当前位置: 首页 > ops >正文

基于FPGA的以太网芯片W5300的tcp/ip协议的开发

   

       W5300的目标是在高性能的嵌入式领域,如多媒体数据流服务。与WIZnet现有的芯片方案相比较,W5300在内存空间和数据处理能力等方面都有很大的提高。 W5300特别适用于IPTV,IP机顶盒和数字电视等大流量多媒体数据的传输。通过一个集成有TCP/IP协议和10/100M的以太网MAC和PHY的单芯片可以非常简单和快捷地实现Internet连接。 W5300与主机(MCU)采用总线接口。通过直接访问方式或间接访问方式,W5300可以很容易与主机接口,就像访问SRAM存储器。W5300的通信数据可以通过每个端口的TX/RX FIFO寄存器访问。W5300的结构如下,外部接25m的晶振,经过内部的pll倍频到150m供内部模块使用。通过硬件上配置test_mode管脚可以使 它工作在internal phy 或者external phy模式。内部集成了mac和phy,不需要操作MII接口 。对数据的读写类似于操作对的DDR3.

 

 

    W5300的使用和我们常用的协议或者控制芯片一样,都是采用总线方式对其寄存器进行配置,从而实现相应的功能。下面将介绍它的TCP/IP协议的开发步骤。

W5300的配置大致分为三个过程:上电初始化、通用寄存器配置和socket寄存器配置三个过程:

 

1, 上电复位

    上电后,利用\RESET管脚对W5300进行初始化。RESET信号低电平至少持续2us,为了使锁相环逻辑稳定,复位信号恢复高电平后至少等待10ms

     

 

2,通用寄存器的配置

 

在通用寄存器配置完成之后,实际上嵌入式系统就可以进行物理连接了,当接入PC时,就可以ping通系统,从而验证通用寄存器配置是否成功。

 

3,Socket寄存器配置 ,即建立socket连接,tcp协议经过了3次握手,这是与udp协议不同之处。

 

 完成W5300初始化以后,W5300可以以TCP、UDP、IPRAW或MACRAW的方式打开Socket发送或接收数据。  在本设计中,W5300工作在TCP服务器模式下。为了实现TCP通信,需要对Socket0(W5300可以支持8个独立socket)进行初始化设置,然后进行侦听设置,完成TCP服务器建立,最后等待建立连接。

    通过Socket0模式寄存器S0_MR(P3:P0)和Socket0端口寄存器S0_PORTR分别设置通信协议和本机端口号(在TCP服务器模式,称之为侦听端口号),然后向Socket0控制寄存器S0_CR中写入0x0001执行OPEN命令,执行完OPEN命令后,如果Socket0状态寄存器S0_SSR改变为SOCK_INIT(0x13),则Socket0的初始化设置完成;再向S0_CR中写入0x0002执行侦听命令,若S0_SSR改变为SOCK_LISTEN(0x14),则侦听完成,W5300设置为TCP服务器;最后等待S0_SSR改变为SOCK_ESTABLISHED(0x17),若S0_SSR变为预期值,则建立了Socket0连接,可以进行数据通信。

 

 

4、接收数据

首先要判断Socket0的RX存储器中是否有接收到的数据,即读取Socket0接收数据报长度寄存器S0_RX_RSR的值,并判断该值是否等于零。如果S0_RX_RSR的值等于零,表示没有数据接收,则继续判断,否则说明Socket0的RX存储器接收到数据,则进入下一步接收数据操作。  当存储器中接收到数据时,要进一步判断Socket0模式寄存器S0_MR的对齐控制位(ALIGN),若S0_MR[8] = 0(0表示没有对齐),则从Socket0的RX_FIFO寄存器S0_RX_FIFOR中读取需要接收的数据字节长度(这样做是由TCP/IP协议数据格式来确定的),否则从S0_RX_RSR中读取数据字节长度。实际上,在对齐的判断过程中,潜在的判断了数据字节是不是偶数,对齐则为偶数(S0_MR[8] = 1)。  得到数据字节长度信息后要将其转换为数据字长度,在TCP通信过程中,当每次收到的数据包的字节数为偶数时,S0_MR[8](ALIGN)为‘1’,删去附在接收数据包中的PACKET-INFO(数据的字节数),可以使读取数据的操作大大增强。如果收到的数据长度字节数为奇数,那么将添加一个哑字节,主机必须首先读取这个哑字节并丢弃它。从PACKET-INFO的字节长度信息可以判断数据包的最后一个字节是否为哑字节。字数作为读取S0_RX_FIFOR中接收内容的循环控制量。注意,字数的大小与数据总线宽度有关,本系统采用16位总线,所以包含2个字节。 最后,要在向S0_CR写入0x0040,执行REVC命令,告知主机W5300已经完成数据的读取。

 

 

5、数据发送

首先读取Socket0剩余存储空间寄存器S0_TX_FSR,并判断S0_SSR当前的状态,若既不处于连接状态(SOCK_ESTABLISHED),也没有接收到连接断开请求(SOCK_CLOSE_WAIT),则直接关闭端口。  判断要发送数据的字节长度是否小于发送寄存器剩余空间的大小,如果小于等于剩余空间,则将需要发送数据字通过S0_TX _FIFOR复制到Socket0的TX存储器中,然后再将发送数据字节长度值写入Socket0的写长度寄存器S0_TX_WRSR,告知W5300需要向上位机发送数据的字节数。最后向S0_CR写入0x0020执行SEND命令,W5300收到此命令后对接收到的数据进行协议处理,并发送到网络中。数据发送完成后,Socket0的中断寄存器S0_IR会产生发送完成(SEND_OK)中断(用于检测上一次是否发送完成),中断值为0x0010,软件清除该中断后表示完成一次发送。如果是第一次发送,则不需要检测SEND_OK

 

另外:  由于不需要操作高速MII接口,我们给的工作时钟是50m,时序方面也很容易过。

 

 

6, tcp协议和udp协议的区别

   a.基于连接与无连接;

   b.对系统资源的要求(TCP较多,UDP少);

  c.UDP程序结构较简单;

 d.流模式与数据报模式 ;

 e.TCP保证数据正确性,UDP可能丢包,直接导致TCP的传输效率不如UDP

 f.TCP保证数据顺序,UDP不保证。

 

UDP是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接。简单来说,当一台计算机向另外一台计算机发送数据时,发送端不会确认接收端是否存在,就会发出数据,同样接收端在收到数据时,也不会向发送端反馈是否收到数据。  由于使用UDP协议消耗资源小,通信效率高,所以通常都会用于音频、视频和普通数据的传输例如视频会议都使用UDP协议,因为这种情况即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。

从上图可以看到,TCP/IP是个协议组,可分为三个层次:网络层、传输层和应用层。  在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。  在传输层中有TCP协议与UDP协议。  在应用层有FTP、HTTP、TELNET、SMTP、DNS等协议。


Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组API接口。


 

http://www.xdnf.cn/news/11110.html

相关文章:

  • 各类数据库介绍
  • XP登录密码忘了 教你九种方法解决问题
  • 用Python编写录屏程序将播放的视频用截屏方法转换为多帧图像编辑后保存为GIF格式动图文件
  • PHP+MySQL实现留言板功能
  • 批量爬取指定多个网址的爱站权重关键词词库(爱站拓词自动去重)
  • Simsimi和Gimi Talk:聊天机器人还能火多久
  • java jp2launcher.exe_jre1.8.0.zip
  • DO-178C解读 - 软件配置索引(2)
  • 来看看为什么typeof null是object
  • dsaadsadasd
  • ASP.NET动态网站开发学习实录(一)
  • VLC简介及使用说明
  • 工作后,如何免费查论文
  • Flash Cookie【使用Flash Cookie技术在客户端永久保存HTTP Cookie 】(一)
  • JMS2.0(Java EE JMS 2.0——Java EE新特性 )
  • 简述U-boot的修改
  • 财智6出免费版本了,不需要在找破解了哈哈!
  • 如何进行Google关键词分析
  • 快速搭建个人博客——保姆级教程
  • 电脑摄像头未能创建连接服务器,电脑提示未能创建视频预览,请检查设备连接的原因及解决办法...
  • Unity之OpenXR+XR Interaction Toolkit实现 UI交互
  • html没有网络也可以打开,我的html网页不能正常打开?
  • Apple Mac Os 10.6 雪豹--VirtualBox+AMD CPU
  • 学习7:Windows XP运行命令
  • JavaScript自学手册
  • 短视频社交应用Socialcam关闭背后,是又一个圈钱阴谋?
  • flv转换为MP4格式(使用cmd命令行)
  • Cisco命令大全
  • 使用SOAP Toolkit 3.0监听Web服务的SAOP消息
  • Eclipse中使用SVN