一、芯片简介

引用百度百科对芯片的一个简介,我就不再赘述。

W5300的目标是在高性能的嵌入式领域,如多媒体数据流服务。与WIZnet现有的芯片方案相比较,W5300在内存空间和数据处理能力等方面都有很大的提高。

W5300特别适用于IPTV,IP机顶盒和数字电视等大流量多媒体数据的传输。通过一个集成有TCP/IP协议和10/100M的以太网MAC和PHY的单芯片可以非常简单和快捷地实现Internet连接。

W5300与主机(MCU)采用总线接口。通过直接访问方式或间接访问方式,W5300可以很容易与主机接口,就像访问SRAM存储器。W5300的通信数据可以通过每个端口的TX/RX FIFO寄存器访问。由于这些特性,即使一个初学者也很容易使用W5300实现Internet连接。

应用领域

W5300在很多嵌入式系统中都非常适用,包括:

  • 家庭网络设备:机顶盒,PVR和数字多媒体设备。
  • 串口转以太网:访问控制,LED显示等
  • 并行接口转以太网:POS/微型打印机,复印机
  • USB转以太网:存储设备,网络打印机
  • GPIO转以太网:家庭网络传感器
  • 安防设备:DVR,网络摄像头
  • 工厂和建筑自动化
  • 医疗监控设备
  • 嵌入式服务器

W5300的使用,和我们常用的协议或者控制芯片一样,都是采用总线方式对其寄存器进行配置,从而实现相应的功能。W5300的配置,大致分为三个过程:上电初始化、通用寄存器配置和socket寄存器配置三个过程。

二、上电初始化

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

复位完成后,对W5300进行通用寄存器配置。

三、通用寄存器配置

W5300每个通用寄存器的详细说明及每一位代表什么含义,请参见官方手册。采用间接地址配置模式,W5300的基地址是0x08000。在FPGA对其配置时,是从上到下的顺序。

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

四、Socket寄存器配置

完成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连接,可以进行数据通信。

五、接收数据

当W5300控制器收到接收数据控制命令时,进入接收数据状态。W5300接收数据的程序流程如下图所示。

首先要判断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已经完成数据的读取。

六、数据发送

当W5300控制器收到发送数据控制命令时,进入发送数据状态。W5300发送数据程序流程如图所示。

首先读取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。

七、其他说明

1、作为客户端

当嵌入式系统作为客户端时,在配置W5300过程中,唯一与服务器模式不同的是,不用配置socket寄存器S0_CR的监听模式,改为配置服务器IP和端口号,然后采用写入连接connect。

2、时钟信号的选择

W5300一般选择内部PHY模式,时钟信号可以由内部振荡器(外接晶振)或外部振荡器产生。我的设计中外部振荡器由FPGA的PLL产生25MHz的时钟。

最新文章

  1. ThinkPHP3.2中if判断条件是两个变量
  2. <context:component-scan>使用说明
  3. <![CDATA[ ]]> 的作用
  4. 使用nodejs搭建图片服务器(一)
  5. 【Ext.Net学习笔记】06:Ext.Net GridPanel的用法(GridPanel 折叠/展开行、GridPanel Selection、 可编辑的GridPanel)
  6. Android的BroadcastReceiver 广播 短信拦截
  7. WinForm 弹框确认后执行
  8. C. Tourist's Notes
  9. poj Pie
  10. vsftp虚拟用户登录配置详解
  11. mahout源码分析之Decision Forest 三部曲之二BuildForest(1)
  12. yum 简介及使用 安装、删除
  13. Oracle中的游标的原理和使用详解
  14. 2017年1月1日 App Store中的所有应用都必须启用 App Transport Security安全功能
  15. iOS SVN出现的问题,在mac使用Cornerstone中无法提交提交失败处理。。。
  16. ES6 Generators并发
  17. python-正则表达式练习
  18. python数据结构之冒泡排序
  19. Apple Pay 支付集成
  20. pandas介绍及环境部署

热门文章

  1. 学习笔记之CSS样式(选择器背景字体边框绝/相对、固定位置and分层流等)
  2. Django实现用户密码重置
  3. vb6.0的各种SHELL,CMD内部命令、外部命令、SHELL任意文件
  4. caffe源码 池化层 反向传播
  5. OpenWRT 恢复出厂设置命令
  6. python中sys.exit()和os._exit(0)退出程序
  7. 【NOIP2016提高组】 Day2 T1 组合数问题
  8. dubbo 笔记-XML配置文件简介
  9. sql的基本知识
  10. Java基础笔记10