一、 系统硬件构成与设计

1.1 W5300芯片介绍
W5300是一款0.18um CMOS工艺的单芯片器件,内部集成10/100M以太网控制器,MAC和TCP协议栈。W5300主要应用于高性能嵌入式领域,如多媒体数据流服务。通过一个集成有TCP/IP协议的10/100M的以太网MAC和PHY的单芯片可以非常简单快捷的实现Internet连接。W5300的数据通信存储器扩展到128K字节,与MCU的接口支持16位数据总线,用户可以使用8个独立的端口进行高速数据通信。
每一个端口的通信数据存储器可以分配0~64K字节,可以根据端口通信数据吞吐量动态调整期分配。也可以通过配置辅助的寄存器使系统具有更高的性能。TCP/IP内核是完全基于网络协议处理技术进行硬件逻辑化。因此可以更好的通过程序进行控制。
在TCP层实现数据传输协议,它支持TCP客户端模式和TCP服务器模式。

1.2硬件接口设计
W5300与控制器的接口模式有直接寻址模式和间接寻址模式,数据总线分为16位和8位总线两种方式。在本设计中采用直接寻址与8位数据总线模式。因此BIT16EN引脚拉低,物理层使用W5300内部的PHY模式,并配置为全功能自动握手运行模式,即TEST_MODE[3:0]和OP_MODE[2:0]均配置为低电平。W5300硬件接口方式如图1所

图1 W5300硬件接口连接原理图

由FPGA内部逻辑产生地址线、数据线、片选、读写使能信号,并指向W5300芯片。由于W5300不支持上电复位,所以在上电后由FPGA接口逻辑产生复位信号。
1.2.1 W5300接口逻辑设计
W5300接口逻辑由复位逻辑与时序控制逻辑组成。复位逻辑产生W5300复位信号以及时序控制逻辑的复位信号;时序控制逻辑按照W5300的读写寄存器时序完成对寄存器的读写访问。

图2 W5300复位信号时序

W5300的复位信号拉低至少持续2us,为了使W5300系统稳定,在复位信号拉高后至少持续10ms。本系统复位信号拉低持续3.2us,再复位后持续了11ms后,W5300开始正常工作。

图3 写时序控制逻辑
图4 读时序控制逻辑

W5300读写时序如图3、4所示,片选与读写使能均为低电平有效,当写数据时,在给出写使能信号至少7ns后写入到寄存器中,片选拉低至少50ns;读数据时,在读使能信号拉低至少42ns后读数据,在本系统中,采用XILLINX Virtex5的开发板,时钟信号为100Mhz,所以读使能拉低时间为70ns,拉高30ns,在给出读使能50ns后,进行数据读取。写使能信号拉低50ns,拉高30ns,在写使能信号有效20ns后,将数据写入W5300。

二 系统软件设计

本系统主要采用客户端模式,整体设计流程如下图所示:

图5 整体控制流程

2.1 W5300寄存器介绍及初始化配置
本系统由直接寻址模式,8位数据总线组成,W5300的寄存器由模式寄存器、通用寄存器和端口寄存器组成。按照W5300配置流程,首先进行通用寄存器、端口寄存器配置,然后进行端口的建立连接,完成初始化配置。
W5300初始化通过3步完成:
1. 设置主机接口模式为TCP模式,总线位宽为8bit位宽。
2. 设置基本网络信息,主要设置MAC地址,子网掩码,网关,以及源IP地址。当连接建立成功后,设置重传时间和重复发送次数,用于数据包的发送失败和重复发送。
3. 定义内部RX/TX存储器大小,以及每一个SOCKET的TX/RX存储器大小。W5300包括16个8K字节存储单元,这些存储单元依次映射在128K存储空间,128k存储空间分为发送存储器和接受存储器。内部发送存储器和接受存储器以8K字节为存储单元分布在128K字节空间。内部TX/RX存储器可以再0~64字节空间以1K字节为单元重新分配给每个SOCKET。
初始化设置完成后,W5300可以响应Ping请求。
2.2 数据通信
完成初始化配置后,可以通过每一个套接字设置不同的通信方式,本系统采用TCP通信协议,在TCP模式,首先通过IP地址和端口号与对端建立端口连接,通过连接的端口发送和接收数据。建立端口连接有TCP服务器和TCP客户端之分,区分它们的方法是谁首先发送连接请求,本系统由W5300发送连接请求(SYN)到服务器,服务器响应W5300且同时回复已经打开,W5300在收到服务器的回复后响应服务器,完成三次握手的机制,从而开始进行数据通信。

2.2.1 端口初始化
为了实现TCP通信,需要对SOCKET进行初始化并打开SOCKET。通过Sn_MR寄存器和Sn_PORTR寄存器分别设置通信协议与本机端口号,然后执行打开命令(Sn_CR),通过状态寄存(Sn_SSR)判断,如果状态寄存器变为SOCK_INIT,TCP端口打开成功。打开成功后,设置目的IP地址(Sn_DIPR)与目的端口号(Sn_DPORTR),然后执行建立连接指令,如果状态寄存器变为ESTABLISHED状态,则建立连接成功。需要注意的是,在建立连接过程中,可能会出现ARP超时或者TCP超时,如果出现超时,则必须对端口进行重新配置。具体流程配置如图6所示。
端口初始化完成,在端口进行数据通信开始后,当端口没有数据收发时,为了保证端口的稳定连接,在每隔40s发送一次心跳包,通过Sn_KPALVTR寄存器配置心跳包。

图6 端口初始化配置流程

2.2.2 数据接收
在端口成功建立连接后,将进行数据的接收流程,在接收数据流程中,当检测到RX存储器中具有数据后,即接收数据长度寄存器(RX_RSR)不在为0,表示接收到数据。通过读取Sn_MR寄存器的ALIGN位,判断字节长度。当ALIGN位为0时,主机首先通过读取Sn_RX_FIFO确定所接收到字节的长度;当ALIGN位为1时,则直接读取Sn_RX_RSR确定RX缓存区字节长度。然后将数据依次通过Sn_RX_FIFO从RX缓存区读出,当数据全部读取完成后,执行RECV命令,完成数据的接收。数据接收流程如图7所示。

图7 数据接收流程控制

需要注意的是,当端口只进行数据接收而没有发送时,主机不能快速处理数据会导致内部RX缓存区溢出,此时W5300窗口尺寸为0。主机必须将RX缓存区数据进行发送处理后,才能继续进行数据的接收。

2.2.3 数据发送
数据通过Sn_TX_FIFO写入到内部TX存储器后,W5300试着将数据发送到对端。发送数据的大小不能比分配给高SOCKET的内部TX存储空间大。首先,需要查询端口TX存储器的剩余空间字节数,当TX存储器由足够的缓存区时,方可将要发送的数据通过Sn_TX_FIFO依次写入到TX存储器中,然后将数据长度写入到Sn_TX_WRSR寄存器中。
当执行命令前,如果不是第一次发送数据,需要查询上一次SEND命令是否执行完成,通过中断寄存器IR(SENDOK)来判断,当SENDOK标志位为1时,说明发送完成,向中断寄存器写入1,进行清除中断操作。然后执行SEND命令。

操作流程如图8所示

图8 数据发送流程

当数据发送完成时,会跳向下一个端口进行数据收发,当完成端口7的数据收发后,会继续从端口1重新开始进行数据的收发,采用这样轮询的方式直到数据全部收发完成停止。

W5300网口芯片的FPGA控制协议流程相关推荐

  1. 机智云相关的控制协议和上报协议简介

    大家好,今天小编给大家介绍一些机智云通信协议相关的基础知识,欢迎一起交流学习. 1.gagent目录 该目录下的文件为机智云设备接入协议库文件,包括mqttlib.o,mqttgat.o等mqtt(M ...

  2. FPGA控制不其他芯片

    1.1 FPGA控制不其他芯片 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA控制不其他芯片: 5)结束语. 1.1.2 本节引言 "不积跬步,无以至 ...

  3. Type-C扩展坞常用料号大全|音视频芯片|cc协议芯片|PD芯片|HUB芯片|网口芯片|音频芯片

    最近一段时间因为重返职场,把市面上做Type-C 接口相关的常用料号做了整理.自己对CS型号的也更加了解,如何进行方案优化,降低BOM成本.慢慢整理,不断学习,持续更新记录,欢迎大家一起谈论学习. 音 ...

  4. USB之Cyusb3014芯片原理之四控制传输实现原理(十二) 2022-04-01

    1.写在前面 系列文章(一)到(十一)应该是总分的结构,最开始大致写明我要写的内容,后面将每一个点拆解出来作为一篇.本篇所要讲述的内容是基于Cyusb3014实现控制传输的原理,要求比较高,硬是从写文 ...

  5. FPGA控制W5500完成UDP环回测试

    FPGA控制W5500完成UDP环回测试 1 前言 2 前期准备 3 W5500寄存器描述 4 W5500 环回测试 4.1 W5500初始化 4.1.1 通用寄存器初始化 4.1.2 socket寄 ...

  6. FPGA控制TDC-GPX2时间间隔测量(一)

    距离上一次使用FPGA控制TDC芯片测量时间间隔已经过去一年多了,当时采用的TDC芯片是TI的一款芯片TDC7200,最后测量结果所能达到的精度为百皮秒级别,最近使用入手了AMS生产的TDC-GPX2 ...

  7. FPGA控制DDS_AD9850输出正弦波(“并行spi”)

    本次介绍ADI公司的数字频率合成(DDS)芯片--AD9850以及如何使用FPGA控制其输出正弦波. 本文分三个部分讲解:一是AD9850芯片介绍,包括基本引脚功能.驱动时序以及相关注意事项:二是基于 ...

  8. 【Paper】2022_基于无人驾驶地面车辆的多Agent系统仿真平台的设计及编队控制协议的研究

    分享自己的一篇文章,发布在人工生命与机器人ICAROB2022,欢迎各位引用. A Design of Multi-Agent System Simulation Platform Based on ...

  9. FPGA控制AD7768采集

    1.1 FPGA控制AD7768采集 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4) FPGA控制AD7768采集: 5)结束语. 1.1.2 本节引言 "不 ...

最新文章

  1. php 获得用户地址吗,php获得用户的真实IP地址_PHP教程
  2. 关于ueditor多图上传加水印
  3. 敲代码就是一把梭_2020必看!开发五年的大佬日常工作中所使用的java代码技巧...
  4. 一些SqlServer常见和入门操作2
  5. Web性能API——帮你分析Web前端性能
  6. imagenet数据格式以及python文件处理的一些函数
  7. lambda表达式初步
  8. CLR基础,CLR运行过程,使用dos命令创建、编译、运行C#文件,查看IL代码
  9. Apache的架构师总结出30条架构设计原则
  10. ES6 数组、对象的扩展
  11. Spring Boot基础学习笔记21:自定义用户认证
  12. opencv画线和文字
  13. Linux命令之解压缩:tar、zip、rar 命令
  14. 淘宝的npaliedit在mb下会崩溃的问题解决了
  15. cad打印本计算机未配置,为什么CAD点打印的时候会警告无法使用此绘图仪配置?...
  16. 浅析机器学习算法的应用场景!
  17. 「STL详解」RB-tree 红黑树
  18. 提高APP用户粘性,你需要了解这些!
  19. 软件设计师下午真题及参考答案
  20. Windows系统使用开源工具scrcpy投屏

热门文章

  1. 生产者消费者条件变量模型
  2. rocketmq源码分析之namesrv路由中心
  3. 傅盛“追风”GPT,猎户星空春天来了?
  4. html dom取父节点jq,querySelector获得兄弟DOM元素 父级DOM元素 子级DOM元素
  5. 霍桑实验-数据分析手段彻底失效的经典案例
  6. #后疫情时代的新思考#越是疫情当前,企业在营销层面越应该设定底线丨数据猿公益策划...
  7. 拒绝借口之事业生涯力戒“浮躁”
  8. 如何让关键词网页快速的被收录-少占鱼
  9. 电脑时间校对后不自动更新要如何解决
  10. 编译libevent