在诸多应用中[1]都需要对终端提供大量数据流[2]。使用数据传输系统进行传输能够根据终端需求动态提供数据,并且数据传输系统能够针对不同终端的接口时序进行灵活调整[3]。本设计提出一种基于TCP/IP通信协议、使用以太网控制器芯片W5100与ARM内核芯片实现的数据传输系统。本系统能够将PC上的文件数据连续地传输给终端,并且针对终端接口的多样性特点,能够通过简单的编程进行调整,以完成相同的数据传输功能。本文针对终端具有数据缓冲队列FIFO的情况阐述本系统的硬件设计、接口时序以及软件流程。对于不同终端,本系统只需经过少量的软件修改就可达到数据传输的目地。
1 以太网控制器芯片W5100
以太网控制芯片W5100是WIZnet公司推出的一款单片网络接口芯片[4]。W5100内部集成了传输层、网络层TCP/IP协议栈与数据链路层及介质访问子层MAC协议。这使得通过W5100进行以太网通信时,各层协议对设计者而言都是透明的。设计者不需要借助操作系统,只需要通过W5100的地址线、数据线对其内部寄存器进行简单的读写访问,就能灵活方便地控制W5100进行以太网通信。W5100还集成了物理层PHY并支持信号极性自适应,这使得在硬件设计中,只需要在W5100外部使用一个带有网络变压器的RJ45座HR911103C,就可以实现其与PC通信。故本设计中选择W5100实现以太网通信,既保证了接口简单,又使得开发周期短。
本设计中,对W5100供给3.3 V与1.8 V两种电源电压。为了保证信号完整性,降低干扰,两种电源电压分别划分为数字网络与模拟网络,网络之间使用电感隔离;其地平面也分为数字地与模拟地,网络之间使用铁心磁珠隔离。W5100使用直接总线连接模式,其15 bit地址线与8 bit数据线与ARM芯片的通用I/O连接;W5100的控制线/CS、/WR、/RD、/RESET也直接与ARM芯片的通用I/O连接。由此实现ARM芯片对W5100的控制。W5100的SPI接口中的SEN、SCLK、MISO接固定电压数字0 V,/SCS接固定电压数字3.3 V,MISO保持悬空,由此屏蔽SPI接口。
2 ARM内核芯片AT91SAM7SE
AT91SAM7SE是Atmel公司的一款基于ARM7内核的处理器[5]。在本系统中,其作为MCU,完成对W5100一侧的读写访问,并完成对终端一侧的数据转发。AT91SAM7SE具有丰富的通用I/O管脚,能保证整个系统的灵活性。AT91SAM7SE使用 55.296 MHz作为主时钟MCK、处理器时钟PCK。
3 硬件设计与接口时序
3.1 硬件设计
W5100与AT91SAM7SE在硬件设计中采用直接总线连接模式,可以同时兼容间接总线连接模式。这样设计是为了能够在连续访问发送存储器、接收存储器时工作于间接总线模式,使用W5100的地址自增功能;并且在非连续访问时工作于直接总线模式,减少读写时序,以提高传输速率。
AT91SAM7SE与W5100之间的接口、AT91SAM7SE与终端之间的接口以及硬件设计的总体框图如图1所示。
3.2 AT91SAM7SE与W5100间接口时序
当AT91SAM7SE在/RESET线上输出低电平2 ?滋s及以上时,W5100被复位,其公共寄存器、各端口寄存器都恢复初始值。本设计中/CS始终同步于/WR和/RD选中W5100。/WR、/RD与DATA[7:0]、ADDR[14:2]、ADDR[1:0]构成读写时序,完成对W5100片内寄存器、存储器的访问,/WR与/RD同时只能有一个有效。W5100可以工作于两种总线模式下。
3.2.1 间接总线模式
当AT91SAM7SE连续访问W5100发送存储器、接收存储器时,W5100工作在间接总线模式下,其地址线ADDR[14:2]稳定输出0。AT91SAM7SE首先在地址线ADDR[1:0]输出01,选中W5100间接总线模式地址寄存器IDM_AR0;然后在数据线DATA[7:0]输出需要访问的W5100存储器地址高7位AH,接着/WR与/CS输出下降沿将AH写入IDM_AR0;之后AT91SAM7SE再将需要访问的W5100存储器地址低8位AL以同样方式写入间接总线模式地址寄存器IDM_AR1;最后,通过/CS与/WR(或与/RD)连续输出下降沿,连续访问间接总线模式数据寄存器IDM_DR。间接总线模式地址寄存器IDM_AR0与IDM_AR1值的自增以及间接总线模式数据寄存器IDM_DR值的变化同步于/WR或/RD的下降沿。AT91S-
AM7SE在间接总线模式下连续访问W5100的存储器时序如图2、图3所示。
3.2.2 直接总线模式
当AT91SAM7SE访问W5100模式寄存器、端口寄存器时,W5100工作在直接总线模式下,其15 bit地址线ADDR[14:0]直接选中各个寄存器。然后通过/CS与/WR(或与/RD)输出下降沿实现访问。
3.2.3 间接总线模式与直接总线模式对比
访问单一存储器时,使用间接总线模式需要3个总线时序,使用直接总线模式只需要一个总线时序。连续访问存储器时,使用地址自增功能,能够使得访问一个地址平均花费大约一个总线时序。虽然在间接总线模式下使用地址自增功能时,平均访问一个地址仍然不会花费少于一个总线时序,但是在连续访问时,AT91SAM7SE不需要在其通用I/O上准备每一个需要访问的W5100的存储器地址,在连续访问开始后ADDR[1:0]的值是固定为11,因此平均花费在一个总线时序上的指令条数有所减少。所以当AT91SAM7SE配置为W5100工作模式、端口模式来读取和更新端口信息时,使用直接总线模式以减少总线时序次数;当AT91SAM7SE读取、写入TCP数据段数据时,使用间接总线模式以减少总线时序中的平均指令数。
3.3 AT91SAM7SE与终端间接口时序
AT91SAM7SE将从W5100接收存储器中取回的TCP数据段数据先缓存在片内,再转发给终端。考虑到本设计终端具有数据缓冲队列FIFO,所以只使用RESET、CS、BLOCK、WR、DATA[31:0]信号线。当终端具有存储器空间时,还需要使用ADDRESS信号线。根据终端接口的不同,可以对AT91SAM7SE编程,使其生成匹配的接口时序。由于选择了ARM内核的芯片作为MCU完成存储转发功能,所以能够保证编程简便,易于经过少量修改而匹配各种终端的接口时序,使得代码的重用性强。本设计中,RESET输出高电平时清空FIFO;CS实现对终端的片选。当FIFO空时,BLOCK信号无效,指示AT91SAM7SE可以转发数据;当FIFO趋近于满时,终端给出指示信号BLOCK,阻塞AT91SAM7SE,使其停止转发数据。本设计中,AT91SAM7SE在WR的每一次上升沿将TCP数据段中的数据转发到DATA[31:0]。由于AT91SAM7SE编程灵活,通用I/O管脚丰富,故可以重用于对各种终端进行数据传输。
4 软件流程
在本设计中,AT91SAM7SE作为W5100的控制芯片,控制其工作在TCP/IP协议下,并作为服务器模式端SERVER。而客户模式端CLIENT由PC机充当,PC运行Linux操作系统,使用套接字Socket编程。由于PC通过本系统向终端传输大量数据流,这些数据不经过路由,独享信道,所以不会出现路由拥塞而导致分组被丢弃的情况。因此,本设计简化了关于分组超时的检测,使用AT91SAM7SE查询W5100端口状态寄存器Sn_SR及其他端口寄存器的方式来获知通信所处的状态,并使用写端口命令寄存器Sn_CR的方式来控制通信进程。图4描述了PC通过本系统向终端传输数据的流程。
PC上的Socket程序非常简单,只需要调用最基本的文件操作函数与Socket函数就能实现端口连接与文件传输。AT91SAM7SE上程序流程细节如下。
(1)上电,复位:AT91SAM7SE开始执行程序。
(2)芯片初始化:配置AT91SAM7SE时钟模块、PIO模块等。
(3)配置W5100:配置W5100的公共寄存器,设置IP地址、子网掩码、MAC地址等。
(4)配置TCP端口:配置端口寄存器,使端口工作于TCP模式,设置端口号等。
(5)等待建立连接:写端口命令寄存器,使端口处于等待PC发起连接的状态。
(6)监听是否建立连接:轮询端口状态寄存器,循环等待端口与PC建立连接。
(7)监听是否接收到TCP数据段:轮询端口接收数据长度寄存器,循环等待W5100从PC接收到TCP数据段。
(8)检查是否为最末TCP数据段:查询端口状态寄存器,检测当前状态,判断其是否为最末TCP数据段。
(9)缓存TCP数据段中数据:访问接收数据长度寄存器、端口读指针寄存器等,计算数据读取位置等参数,将接收到的TCP数据段数据以1 B为单位缓存在片上。
(10)转发数据:将缓存在AT91SAM7SE片上的数据以4 B为单位向终端FIFO转发。
(11)断开连接,关闭TCP端口:写端口命令寄存器,使端口关闭,断开与PC的连接。
其中步骤(9)需要访问各寄存器,还需要通过间接总线模式数据寄存器连续访问接收存储器。本设计中采用直接总线模式和间接总线模式相配合的方式,完成对TCP数据段数据的读取,步骤如下:
①在直接总线模式下访问各寄存器。
②计算参数,获得TCP数据段数据在接收存储器中的地址。
③切换至间接总线模式,开启地址自增功能。
④连续读取接收寄存器。
⑤切换回直接总线模式。
⑥访问各寄存器,更新配置,继续接收分组。
5 测试
测试中,通过PC向本系统传输文件,再使用FPGA模拟终端FIFO的接口时序,同时将本系统传输至终端的数据输出到逻辑分析仪。对比逻辑分析仪采样信号与原始文件数据可以得出结论,本系统能够实现数据的准确传输。逻辑分析仪采样结果如图5所示。表1记录了传输不同大小文件所用的时间与平均传输速率。兼顾系统的灵活性与性能,MCU工作在55.296 MHz的情况下,平均传输速率能够达到2.7 Mb/s。
本设计使用W5100与AT91SAM7SE实现了一种基于TCP/IP通信协议的数据传输系统。其硬件设计简单,软件编程灵活方便,可以适应不同的终端接口时序。整个系统具有集成度高、重用性强、适应性广的特点。