0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

全硬件TCP/IP协议栈学习笔记(第七天:FPGA+W5500 PING通)

学FPGA,慢慢来 2017-12-18 10:27 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

在一周多的时间,从软件的协议到芯片接口最后到硬件描述,我觉得是时候试一试芯片了,看一看能不能ping通。两天时间终于完成第一次ping,也挺不容易的。

首先想要ping通,要先知道ping是什么

它所利用的原理是这样的:利用网络上机器IP地址的唯一性,给目标IP地址发送一个数据包,再要求对方返回一个同样大小的数据包来确定两台网络机器是否连接相通,时延是多少。

而对于W5500能够ping通,官方博客的解释是这样:

W5500 若想Ping通的话需要保证以下2点:

1)物理信道通信正常:初步判定Link 灯及状态灯指示正常。

2)配置了W5500的IP,网关,子网掩码,MAC地址这些特殊寄存器

由于W5500内部硬件逻辑电路实现了ARP协议。所以,一旦收到ping包请求的话,会自动回复。以上的设置不过是为了保证基本信道及通讯能够建立的而已。

反向而言,如果Ping不通,也可以先从这两方面着手。

看上去并不是很难,如果想ping通的话只是需要配置好W5500的寄存器即可。

下面我们开始动手

器件选择basys2,开发环境ISE,以及野火的W5500网络扩展模块

根据W5500的说明书,我们通过SPI协议来完成与W5500的通信,共有SCSn,SCLK,MOSI,MISO4路信号,且作为SPI从机工作。其工作方式有可变长度模式和固定数据长度

SPI协议定义了四种工作模式,每种模式的区别就是根据SCLK的极性和相位不同。W5500支持SPI模式0及模式3,数据都是在SCLK的上升沿锁存,在下降沿输出,而且无论发送与接收,均遵从最高标志位(MSB)到最低标志位(LSB)的传输序列。

W5500与外设主机的通信受SPI数据帧控制,W5500的帧分3段:地址段,控制端,数据段。

地址段为W5500寄存器或TX/RX 内存指定了16位的偏移地址。控制段指定了地址段设定的偏移区域的归属,读写访问模式以及SPI工作模式。数据段可以设置为任意长度或固定长度;如果SPI工作模式设置为可变数据长度模式,SPI的SCSn信号由外部主机SPI帧控制。

在可变数据长度模式,SCSn控制SPI帧的开始和停止:SCSn信号拉低,即代表W5500的SPI帧开始(地址段)SCSn信号拉高,即代表W5500的SPI帧结束(数据段的随机N字节数据结尾)

SPI数据帧包括16位地址段的偏移地址,8位的控制段和N字节的数据段,8位的控制段可以通过修改区域选择位(BSB[4:0]),读写访问模式位(RWB)以及SPI工作模式位(OM[1:0])来重新定义。区域选择选择了属于偏移地址的区域。

W5500支持数据的连续读写。其流程为数据从偏移地址的基位会自增寻址加1传输接下来的数据。

在控制段中指定了地址段设定的偏移区域的归属,读写访问模式以及SPI工作模式

所以我们在开启第一件事就是配置寄存器,而我们处理发送的顺序为PHY_MODE,MAC address,IP address,gateway_address(网关地址),Set the subnet mask,Set socket 0's mode,Set the size of socket 0's TX buffer,Set the source port for socket 0,Send the command to open the socket, Set the destination IP address for socket 0,Send the command to read the socket state。

好了,我们现在配置的协议了解了,顺序也已经了解了,而按顺序发送即使用SPI在每一个上升沿发送,在下降沿读取。发送的内容以及SPI_clk我们选择使用有限状态机来实现。那我们下一步就来理顺一下状态转移。

首先我们设置出几个状态,按其功能进行命名

1.状态初始在STATE_INITIALIZING状态,该状态内将spi_clk拉低,下一状态转入STATE_SENDING_COMMAND,同时将initialization_progress加一,case他来选择initialization_progress(mosi的数组集合)的赋值,首先是PHY_MODE,spi_chip_select_n赋值给零,spi_clock_count赋值给零,忙信号给1;此状态结束

2.状态转入STATE_SENDING_COMMAND,spi_clk信号取反,即拉高,状态没有变化。

3.状态依然是STATE_SENDING_COMMAND,spi_clk信号取反,即拉低,此时满足下边的条件,执行将spi_clk_count加1,

反复执行这两个状态,到spi_clk_count 加到32时,各项状态仍和3是一样,经过了32x2个系统时钟

4.状态依然在STATE_AEND_COMMAND,只是将spi_chip_select_n拉高为1;此时is_initialized信号为初始值0,,此时将状态转换为STATE_INITIALIZING

状态再次到达1,此种状态一直重复直到将29个数据全部发送完毕。依次发送的是PHY_MODE,MAC address,IP address,gateway_address(网关地址),Set the subnet mask,Set socket 0's mode,Set the size of socket 0's TX buffer,Set the source port for socket 0,Send the command to open the socket, Set the destination IP address for socket 0,Send the command to read the socket state。

根据spi协议spi_clk 为低,状态处在STATE_SENDING_COMMAND且spi_clk_count 在24到31之间的时候,由于相对于clk,spi_clk实质上是clk的二分频,所以对clk的上升沿的检测就是对spi_clk的所有沿的检测,在上升沿 处读取数据,由高位到低位进行读取。在下降沿处发送数据,每次发送一位一位,同样从高位到低位进行发送。将最后一组数据发送结束之后,waiting _for_socket赋值给1, 初始化的data_read为7个0,之后一直在等待套接字的状态

这就是状态转移的基本思路

我们基础设置IP为222.24.16.3(由于我的主机IP为222.24.16.163,所以设置了这个IP),子网掩码为255.0.0.0(最小)

根据我们的思路,下边就是代码的书写了

完成之后进行仿真

订对后发现和我们想要的都一样,仿真即通过。

(P.S.由于spi是系统时钟的二分频,是发送接受的时钟线。spi_clock_count是发送的计数器,他的数值即为当前发送到所给数据的位数。通过仿真可以发现状态在010和011之间变换,即为位数的变化和发送内容的更新。)

完成仿真之后就可以在开发板上实现一下,即下好之后将电脑和模块之间用网线连接好,(我同时将无线,网络等都关闭了,以保证此网络之中只有模块和主机两个设备),打开cmd,ping一下我的模块

这就证明ping通。

寄存器配置成功。

ping通只是开始,但仅仅一个ping通就已经....这段时间的学习确实走了不少的弯路,博客,说明书,论坛,甚至到淘宝去找资料。就连C51,STM32的例程也学了一些。踉踉跄跄的完成了配置。

而要为了实现我们希望的功能咨询了一下软件大佬,首先是web服务器,web服务器是留在因特网上的程序,可以向浏览器等web用户提供文档,也可以放置文件,让全世界浏览。就是网络环境下的为客户提供某种服务的专用计算机。所以我们向web服务器上发送HTTP包装的协议,他解析分析之后再完成其他你想让他完成的任务,或者是操作。但是W5500只是整合到传输层,所以感到还是前路慢慢啊。

转载注明地址

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA设计
    +关注

    关注

    9

    文章

    431

    浏览量

    28250
  • TCP
    TCP
    +关注

    关注

    8

    文章

    1436

    浏览量

    83882
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    DPE5500/W5500—SPI 接口以太网协议芯片

    DPE5500是一款SPI接口的以太网协议芯片,适用于单片机系统实现以太网通讯。DPE5500集成了
    发表于 05-21 17:46

    【瑞萨RA2L1入门学习W5500以太网通信与Web远程控制

    接口) 通信协议 TCP、UDP、HTTP/1.0、AJAX/JSON W5500 作为 WIZnet 的经典硬件 TCP/
    发表于 05-16 18:28

    华大九FIP解决方案助力突破先进工艺瓶颈

    效水平与量产良率。华大九将FIP确立为Foundry业务的关键支柱,依托深厚的EDA技术积淀与完整的产品布局,打造了覆盖0.18μm至7nm工艺节点的FIP解决方案。通过“成熟
    的头像 发表于 05-13 10:06 413次阅读
    华大九<b class='flag-5'>天</b>FIP<b class='flag-5'>全</b><b class='flag-5'>栈</b>解决方案助力突破先进工艺瓶颈

    DPE5500以太网控制器详解

    DPE5500W5500兼容,可以直接参考SDK w5500以太网控制器,集成TCP/IP协议
    发表于 04-29 14:07

    疆鸿智能ETHERNET IP转MODBUS TCP:通讯“绝杀”,让PLC秒懂设备话

    疆鸿智能ETHERNET IP转MODBUS TCP:通讯“绝杀”,让PLC秒懂设备话 车间一台关键设备突然离线。PLC不断报“连接超时”,产线停摆。 设备端是MODBUS TCP协议
    的头像 发表于 03-20 15:13 301次阅读
    疆鸿智能ETHERNET <b class='flag-5'>IP</b>转MODBUS <b class='flag-5'>TCP</b>:通讯“绝杀”,让PLC秒懂设备话

    使用FPGA实现千兆网TCP/IP协议调试记录

    上板测试后,发现FPGA与电脑之间存在报文交互,交互正常。
    的头像 发表于 03-16 15:58 1840次阅读
    使用<b class='flag-5'>FPGA</b>实现千兆网<b class='flag-5'>TCP</b>/<b class='flag-5'>IP</b><b class='flag-5'>协议</b><b class='flag-5'>栈</b>调试记录

    TCP/IP(Socket)协议深度剖析

    TCP/IP协议作为互联网通信的基础架构,其核心机制Socket编程承载着全球数据交换的使命。本文将深入剖析这一协议层架构、三次握手与四
    的头像 发表于 03-03 17:06 856次阅读

    零知IDE——基于STM32与W5500的UDP通信实现温湿度监控

    ,网关和DNS强制指向PC的以太网IP;同时网段检测逻辑 一、系统硬件部分1.1 元件清单[td]硬件名称数量备注 零知增强板(STM32F407VET6)1主控核心板 W5500
    发表于 02-28 16:08

    为什么会有TCP/IP协议

    见了面,完全不能交流信息。因而他们需要定义一些共通的东西来进行交流,TCP/IP就是为此而生。TCP/IP不是一个协议,而是一个
    发表于 12-03 06:28

    STM32驱动W5500作为客户端进行通讯

    SR-ES1内嵌Wiznet的W5500芯片,使用硬件逻辑门电路实现TCP/IP协议的传输层及
    的头像 发表于 10-14 17:19 1612次阅读
    STM32驱动<b class='flag-5'>W5500</b>作为客户端进行通讯

    w5500dhcp无法获取ip怎么解决?

    spi驱动w5500,mac地址写入读取成功,但是获取的ip、子网掩码都是0;
    发表于 09-26 06:58

    rtthread网络接口设备 轻量级tcp/ip 堆栈 这两个冲突吗?

    需要使用 lwip 上图中 网络接口设备 需要使能么? 上图中 网络接口设备 是干嘛用的?是一个比lwip 功能弱的tcp/ip 协议么?
    发表于 09-18 06:16

    GraniStudio : TCP/IP(Socket)协议深度剖析

    在工业自动化与物联网领域,TCP/IP(Socket)协议作为应用最广泛的网络通信标准,是实现设备间数据交互的核心技术。GraniStudio 软件作为工业级零代码开发平台,其内置的 TCP
    的头像 发表于 08-03 22:20 1444次阅读
    GraniStudio : <b class='flag-5'>TCP</b>/<b class='flag-5'>IP</b>(Socket)<b class='flag-5'>协议</b>深度剖析

    第十六章 W55MH32 PING示例

    本文讲解了如何在 W55MH32 芯片上通过 IPRAW 模式实现 ICMP 协议中的 PING 命令,以进行网络连通性测试,通过实战例程展示了从发送 PING 请求、接收并解析回复到
    的头像 发表于 07-24 11:41 1248次阅读
    第十六章 <b class='flag-5'>W</b>55MH32 <b class='flag-5'>PING</b>示例

    什么是Modbus TCP协议

    TCP/IP协议,通过以太网进行通信,并支持多个设备同时访问同一个Modbus TCP服务器。 一、
    的头像 发表于 07-23 17:18 5063次阅读
    什么是Modbus <b class='flag-5'>TCP</b><b class='flag-5'>协议</b>