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

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

3天内不再提示

全硬件TCP/IP协议栈学习笔记 (第八天:W5500+FPGA实现tcp连接)

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

扫码添加小助手

加入工程师交流群

经历了一个多月的调试,最终终于使用basys2将tcp模式配置成功了。

首先说一下思路吧,首先W5500的发送与接收与开发板的通信使用的是SPI协议,下降沿发送,上升沿接收。每次发送的数据格式为前十六位为地址位,之后五位为寄存器区的选块,例如常用的为5‘b00000为通用寄存器区,5’b00001为socket1寄存器区。接下来一位为读写操作位,0为读数据,1为写数据。接下来两位是SPI模式选择,00代表使用SCSN信号确定位宽,01代表一位字长(八个二进制数),10代表两位字长(十六个二进制数),11代表四位字长(32个二进制数)。随后便是和之前字长相匹配的数据位。格式如下:

0000000000000000_ 00000__1_01_00000000

地址位 寄存器区 写 一位字长 数据

在发送数据与接收数据的时候,要保证数据位和SCK信号沿对其,同时要保证SCSN为低电平。具体的SPI发送可以参考之前的博客。

说完了发送的格式,接下来我们来说一说发送的数据。

首先我们要明确我们要配置数据,我们要发送我们的IP,GATEWAY,MAC,端口以及目的IP,端口。实际上我们讲的发送应该是配置寄存器,我们是在将我们发送所必须的信息写入寄存器中。在发送数据之前我们要首先将我们W5500通过外边的接口硬复位,之后对模式寄存器进行读操作,直到模式寄存器的最低位为0时,即复位完成,我们在进行其他的写入操作。在复位结束之后,我们可以将IP,MAC,GATEWAY等数据写入对应的寄存器中,具体的寄存器地址和所属寄存器区具体参看W5500的手册,里边的东西都写的非常清楚。

在配置完成这些之后,我们对socket1 mode即1端口的模式选择寄存器进行书写,将W5500模式选择为TCP模式。具体的操作为将对应的后三位写入为001。之后再对该寄存器进行读操作,以此来确定模块却是在TCP模式运行。确认之后开始配置目标IP,端口,最大字长等信息。之所以先配置TCP模式是因为我们后边配置的寄存器都属于端口寄存器区,而我们在配置之前应先配置模式寄存器。

完成这些配置之后,我们来接触两个很特殊但是也很重要的寄存器,一个是CR寄存器,另一个是SR寄存器(原谅我平板打字实在不想写全称了)。在我们完成以上基础的寄存器配置之后,我们对CR寄存器写入对应特定的值,该值可以让模块进行对应的操作。而我们要知道该操作是否完成,我们就要对SR寄存器进行读操作,读出的对应值代表模块当前所处在的模式状态。如我们最初对CR寄存器写入值0x01,表示我们将模块设置为TCP,之后我们对SR寄存器进行读操作,如果读出的值是0x13,那么代表模块当前处在TCP客户端模式,我们即可进行下一步操作。我们之后再进行对应的操作,例如要将模块设置为侦听状态下,将CR寄存器写入0x04,读SR寄存器值为0x17即为处在侦听状态。接下来我们对发送区读指针寄存器读操作来获取当前读指针,随后根据读指针读出的数据将我们要发送的数据写入到发送缓存即可。这样就完成了数据的发送。

这样,我们将配置的大概思路讲完了。

设计模块如下

在具体书写时,我将SPI发送与接收写在了一个模块,而且发送与接收都只是发送8位和接收8位。SCSN信号是在该模块中产生,具体发送与接收都是使用状态机来书写,SCSN信号在发送第一位的时候拉低,最后一位发送结束之后拉高。(注意,是发送结束之后不是发送最后一位时就拉低。)SPI发送与接收部分就结束了,在书写时要注意接收条件为SCSN信号为低信号同时SCK信号的上升沿,发送的条件是SCSN信号为低同时SCK信号的下降沿。

8位发送数据波形如下

我们将要发送的信息写在一个状态机模块中,通过状态机来实现发送信息的按顺序发送。我们将每次发送的信息按照8位来拆解,想对应的想发送一位时就要发送总共32位,和下来就是发送四段。两位时发送五段,四位时发送7段。相应的读操作也是一样,由于我在我所做的项目中所需读的数据均为一个字长,即为8位,所以我只写了读一个字长的操作。拆解的过程就是移位加取高8位,另加一个计数器即可完成。而每次发送的触发信号即为上边的SPI控制模块在接受或者发送结束后发送的结束信号。当接收到发送或接收的结束信号,即可将下一个8位数据传输给SPI控制模块。

最后我写了一个同步FIFO来将几个拆分的几位数据合并。

合并之后波形如下

其实最初这个FIFO是用来救场的,由于最初书写的时候没有认真的研究说明书,想成每次发送8位,后来意识到这件事情的时候时间有些紧张,就想写一个FIFO来救个场,就过再后来做的时候,发现实际上是因祸得福,这种书写方式可以有效的减少资源,而且在SPI控制模块也会更加简单,在最后纠错时也好找错误字段。

到此,设计思路和配置思路均结束。这几天还是有些忙,稍后把仿真图补一下吧。等到元旦后期末结束了认认真真的将W5500数据传输从硬件连接到网络编程写一篇大报告分享出来。

最后,说个心声吧,从ping通到今天完成,足足过了5,6这五六周,有踌躇满志,更多的是茫然无措。但是我就决定一定要做出来。现在完成之后激动的都不想睡觉了抓紧时间总结发出来。代码量对于我来说感觉仿佛突破了自己,风格可能还很稚嫩,但是真的很有成就感。尤其是在一个问题卡住了2周多的时间结果一个偶然发现是配置管脚的UCF错了但时候,恨透了愚蠢的自己。这段时间的学习真的收获了太多了,感谢这段时间的自己。

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

    关注

    9

    文章

    431

    浏览量

    28216
  • TCP
    TCP
    +关注

    关注

    8

    文章

    1434

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    DPE5500以太网控制器详解

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

    EtherNet/IPTCP/IP 塔讯智能网关储能PACK产线集中管控

    。本次20GWh储能电池PACK生产线项目中,塔讯TX 181-RE-EIS/TCPIP总线协议网关凭借专业的协议转换能力,作为核心工业网关与智能网关,成功实现EtherNet/IP
    的头像 发表于 03-27 15:48 282次阅读
    EtherNet/<b class='flag-5'>IP</b>转<b class='flag-5'>TCP</b>/<b class='flag-5'>IP</b> 塔讯智能网关储能PACK产线集中管控

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

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

    疆鸿智能EtherNet/IP和Modbus TCP技术应用,建议点赞收藏!

    和Modbus TCP作为工业现场最常见的两大以太网协议,它们之间的数据交互需求日益迫切。EtherNet/IP转Modbus TCP网关正是为了解决这一“通信孤岛”问题而生,它充当了
    的头像 发表于 03-18 14:56 193次阅读
    疆鸿智能EtherNet/<b class='flag-5'>IP</b>和Modbus <b class='flag-5'>TCP</b>技术应用,建议点赞收藏!

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

    上板测试后,发现FPGA与电脑之间存在报文交互,交互正常。
    的头像 发表于 03-16 15:58 1362次阅读
    使用<b class='flag-5'>FPGA</b><b class='flag-5'>实现</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 805次阅读

    为什么会有TCP/IP协议

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

    以太网通讯在FPGA上的实现

    一、介绍在本项目由于我们需要使用PC实时的向FPGA发送将要识别的图片,所以我们最终选择使用以太网来从PC向FPGA发送图片并暂存在DDR中,下面是对以太网协议硬件
    发表于 10-30 07:45

    快速掌握TCP/IP?LuatOS新手入门指南

    想快速上手TCP/IP通信却不知从何开始?LuatOS为开发者提供了简洁高效的开发路径。通过本指南的实操步骤,你将发现,实现网络连接其实比想象中更简单。 提到网络应用,就绕不开
    的头像 发表于 10-15 17:27 812次阅读
    快速掌握<b class='flag-5'>TCP</b>/<b class='flag-5'>IP</b>?LuatOS新手入门指南

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

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

    EtherNet/IP转Modbus TCP网关,让设备对话更简单!

    在工业自动化与物联网飞速发展的今天,不同协议设备之间的互联互通已成为企业提升生产效率、实现智能化升级的关键挑战。如何让支持EtherNet/IP的PLC、伺服系统与基于Modbus TCP
    的头像 发表于 09-19 16:30 837次阅读
    EtherNet/<b class='flag-5'>IP</b>转Modbus <b class='flag-5'>TCP</b>网关,让设备对话更简单!

    实现EtherNet/IP网络与Modbus TCP网络之间数据互通

    硬件连接与配置 使用工业以太网网关(如ENE-350)作为桥接设备,通过以太网交换机实现硬件互联。 网关需根据应用场景配置为EtherNet/IP
    的头像 发表于 08-06 13:48 878次阅读
    <b class='flag-5'>实现</b>EtherNet/<b class='flag-5'>IP</b>网络与Modbus <b class='flag-5'>TCP</b>网络之间数据互通

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

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

    什么是Modbus TCP协议

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

    生物制药自动化升级:Modbus TCP与Ethernet/IP协议转换实践

    Ethernet/IP),直接通信存在障碍。为此通过稳联技术的Modbus TCP与Ethernet/IP网关,实现两种协议的无缝转换,确保
    的头像 发表于 06-17 18:34 762次阅读
    生物制药自动化升级:Modbus <b class='flag-5'>TCP</b>与Ethernet/<b class='flag-5'>IP</b><b class='flag-5'>协议</b>转换实践