(1) 虽然RTL8019AS的地址总线有20根,但在不使用芯片的Boot ROM和PnP功能时,只需要其中的SA0~SA9,这样可以保证RTL8019AS的I/O基地址为200H~300H,共占用基地址之后的32字节空间。
(2) 数据总线是双向总线,需要考虑芯片间的电平匹配问题。C5409是3.3V接口器件而RTL8019AS的接口电平为5V,因此需在总线上加入一个兼容3.3V和5V电平的驱动芯片,如LVTH16245A。另外由RTL8019AS向C5409输出的中断和READY信号也需要通过驱动芯片进行电平匹配。中断信号通过非门翻转。
(3) 由于C5409没有分离的读写控制信号,需要通过译码的方法来与RTL8019AS进行连接。对DSP的IS#、R/W#和IOSTRB#信号译码可以获得RTL8019AS的IORB和IOWB信号,这里需要选择快速的译码芯片以满足控制信号的时序要求。
(4) JP拉高表示工作在跳线模式,IOCS16B拉高表示配置数据总线的宽度为16位,AEN驱动为低。RTL8019AS的复位信号RSTDRV直接以DSP的XF引脚控制。
2.3 C5409对RTL8019AS控制与读写
(1)初始化RTL8019AS。首先在寄存器页0,通过配置三个指针寄存器BNRY、PSTART、PSTOP来定义接收缓存区环,通过配置寄存器ISR和IMR来清除使能中断,然后在寄存器页1配置物理地址寄存器PAR0~PAR5、多播地址寄存器MAR0~MAR7(在无需接收多播以太帧RCR寄存器的AM为0,MARx无需配置)及当前页指针寄存器CURR,最后回到寄存器页0,初始化数据配置寄存器DCR、接收配置寄存器RCR和发送配置寄存器TCR并向控制寄存器写入开始命令。
(2)接收以太帧。芯片在接收到一个完整的以太帧并校验正确后就会发出一个中断并置状态寄存器ISR和RSR的PRX位,表示正确接收到一帧以太网数据。这时DSP就可以通过RTL8019AS的远程DMA通道从芯片内部的接收缓存区环中读出以太数据帧。在每个接收到的以太数据帧之前,RTL8019AS会向这一帧的接收缓存区的头四个字节中写入接收状态、下一包(即下一个以太帧)缓存区头指针、当前接收帧的字节数等信息。在8位模式时如图2所示。这里字节长度包括接收到的4字节校验数据。接收过程受到三个寄存器的控制:BNRY、RBCR0和RBCR1,BNRY寄存器指向待接收数据帧在缓存区环中的首页起始地址,而RBCR0和RBCR1指定了待接收数据的长度。DSP通过初始化这三个寄存器并向RTL8019AS发出“Remote read”命令来将数据从缓存区环读出。Remote DMA通道会自动根据这三个寄存器来控制读出的起始地址和长度。此外,还可以使用“Send Packet”命令来接收数据,这时BNRY、RBCR0和RBCR1寄存器是自动初始化的。
(3)发送以太帧。发送过程受到四个寄存器的控制:CRDA0、CRDA1、RBCR0和RBCR1,其中CRDA0和CRDA1寄存器指向待发送数据帧将要写入到缓存区环中的起始地址,而RBCR0和RBCR1指定了待发送数据的长度。DSP通过初始化这几个寄存器并向RTL8019AS发出“Remote write”命令来将数据写到缓存区环。Remote DMA通道会自动根据三个寄存器来控制写入的起始地址和长度。为了向以太网发送数据帧,DSP只要将控制寄存器CR的TXP置为1即可,RTL8019AS会自动完成数据的校验并发送。
3 TCP/IP协议的实现
由于嵌入式硬件上处理资源和实时性要求的限制,其TCP/IP协议的实现与在通常的计算机上实现是有差别的,要求占用存储空间尽可能的小,处理速度足够快,因此一般都要针对应用的特点对TCP/IP协议进行必要的裁剪与优化。
较普遍的TCP/IP协议嵌入式实现主要有两种方案,一是基于各种实时操作系统的TCP/IP协议栈,如VxWorksμC/OS-II、μClinux、CMX-RTOS等嵌入式实时操作系统都内嵌或有可配置的TCP/IP协议栈实现模块;另外一种方式是直接在嵌入式硬件上实现,如Microchip公司为其PIC单片机设计的TCP/IP协议栈。对一些处理任务比较简单而且实时性要求很高的系统来说,直接实现的方式是较好的选择。在本系统中,根据具体应用的特点,选择对开源软件lwIP(a light-weight implementation of the TCP/IP protocol suite)[4]进行适当的裁剪后将其移植到C5409 DSP上,直接实现了IP、ARP、TCP、ICMP协议和以太网驱动,代码长度28KB,占用数据空间9KB。
应用层与lwIP协议栈的接口可以有两种方式,一是通过调用lwIP API函数;二是直接调用协议的实现模块,即使用原始API函数。lwIP API函数为上层应用提供了使用协议栈常态的顺序的编程模式,即基于“open-read-write-close”模式,这是一种类BSD socket的API。而原始API是一种基于回调(callback)机制的应用程序接口,调用这种接口使得应用层与lwIP协议栈联系得更紧密,要求应用程序员对lwIP的底层机制了解得更透彻,因此相对来说编写程序会更困难一些,程序代码也更难理解。然而好处也显而易见——处理速度更快,占用内存更小,对小型系统而言很有意义。
4 嵌入式WEB数据服务器应用
本系统通过调用协议栈的原始应用层接口来实现嵌入式WEB数据服务器应用,其原理如图3所示。其作用是将传感器采集到的数据或数据处理后的信息按照预先约定的格式存储在数据缓存中,每收到一次网络上的主机发来的“Get AE”命令就将处理的结果发送出去。ae_init函数用来在初始化时启动数据服务应用;在建立TCP连接时ae_accept函数用来在协议控制块PCB中注册应用层处理函数,每次在建立连接时都会被协议栈调用;ae_recv是实际的应用层处理函数,在每次接收到从对应连接上发来的应用层命令时,协议栈都会调用它做出合适的处理和响应,这里主要是用来向客户端主机传输传感器数据或信息。在未进行优化的情况下,在一个正常工作(有外部Internet连接)的局域网内,系统能达到最少110KBps的传输速率,基本满足设计要求。若需进一步提高传输带宽,可以应用100M或更高速度的网卡芯片与DSP进行接口。
在嵌入式系统中实现以太网接口的主要困难:一是合适的接口芯片较少,集成的方案(即处理器内嵌以太网接口)成本又相对较高;二是TCP/IP协议栈的实现。随着嵌入式系统网络应用的发展,第一个困难会随着芯片技术的发展逐渐解决,而对于第二个困难,使用开源代码是一个经济的合适选择。目前,对大多数应用来说,本文的系统都是一个可行的低成本方案,能够满足一定的数据传输率要求,且因为C5409 DSP接口还有带宽裕量,系统具有较高的可扩展性,可以连接更快传输率的以太网芯片。本文设计的嵌入式WEB数据服务器,已在一个声发射(AE)传感器数据采集及分析系统中得到使用并达到了预期的效果。
参考文献
[1] 曹宇, 魏丰,胡士毅. 用51单片机控制RTL8019AS实现以太网通讯. 电子技术应用, 2003,29(1):21-23.
[2] TMS320VC5409 Fixed-point digital signal processor datasheet. Texas Instruments Inc, 2000.
[3] RTL8019AS datasheet. RealTek Semiconductor Corp, 2005, 8.
[4] Adam Dunkels. Design and implementation of the lwIP TCP/IP stack.http://www.sics.se/
~adam/lwip/doc/lwip.pdf, 2001, 2.