基于DM9000网口芯片的DSP6713B网口扩展
2012-06-25文张斌陈志华
文张斌,陈志华
(暨南大学 信息技术研究所,广东 广州 510075)
目前,设备网络化已经成为业内所达成共识的、必然的趋势,随着硬件接入网络被广泛重视,大量高端的硬件板基本上都具备自带的网口功能,很多成熟的开发板都已具备了网口功能。然而,DSP6713B没有自带的以太网功能,所以需要扩展网口来实现以太网的连接。现在被广泛用作网口扩展的芯片有DM9000,RTL8019等,相关资料也非常多。该设计为了解决DSP6713B没有自带网口的问题,结合DM9000广泛使用于网口扩展的情况,提出一种采用DM9000网口驱动芯片作为网口的底层硬件来实现TCP/IP物理层的方案,并且使用LWIP协议作为网口通信协议,最终实现了DSP网口功能扩展[1-2]。
1 DM9000网口芯片介绍
1.1 DM9000功能简介
DM9000是一款完全集成并符合成本效益单芯片快速以太网MAC控制器与一般处理接口,1个10/100 M自适应的PHY和4 K DWORD值的SRAM。
DM9000支持8位、16位和32位接口访问内部存储器,以支持不同的处理器。DM9000物理协议层接口完全支持使用10 Mbit/s下3类、4类、5类非屏蔽双绞线和100 Mbit/s下5类非屏蔽双绞线。这是完全符合IEEE 802.3u规格。它的自动协调功能将自动完成配置以最大限度地适合其线路带宽。
1.2 DM9000与DSP6713B硬件连接
DM9000与DSP连接如图1所示。DM9000需要控制的主要引脚有:IOR、IOW、AEN、CMD(SA2)、INT、RST,数据线SD0~SD15(此处数据以16位传输)和地址线SA4~SA9。IOR和IOW分别为读写引脚,低电平可以读写;AEN为DM9000选通引脚,此处只用到1个DM9000芯片,直接将AEN管脚接低电平,DM9000工作的默认基地址为0x300,按照默认地址选择,将SA9与SA8接高电平,SA7~SA4接低电平,从而直接选通了DM9000芯片;CMD为命令/数据切换引脚,低电平时读写命令操作,高电平时读写数据操作,将CMD与DSP的EA2地址线连接;INT为中断信号输出引脚,与DSP的INT5中断信号线连接,低电平时有中断信号;IOR为读命令控制线,与DSP的AOE读命令控制线连接;IOW为写命令控制线,与DSP的AWE写命令控制线连接;RST为复位信号引脚,与DSP的GP[0]管脚连接;SD0~SD15数据线与DSP的数据线ED0~ED15连接。
1.3 DM9000初始化
首先,将DM9000控制读写命令基地址ADDR_BASE在DSP地址空间映射为0xB0000300,由于DSP的EA2地址管脚控制CMD,所以DM9000控制读写数据基址DA⁃TA_BASE在DSP地址空间映射为0xB0000302。确定了DM9000控制读写数据和命令的基址之后,接下来就是编写DM9000的驱动程序,有2个函数需要完成,读寄存器数据函数REG_read(uint8 reg)和写寄存器函数REG_write(uint8 reg,uint16 writedata),其中reg为相对于ADDR_BASE的偏移量,要写入ADDR_BASE地址中去,writedata是寄存器要写入的数据,要写入DATA_BASE数据基址中去。
DM9000初始化第一步就是要使DM9000的硬件初始化,DSP的GP[0]控制DM9000的RST,RST低电平可以使硬件复位,要求保持RST低电平时间大于20 μs。第二步,DM9000还需要2次软复位,往DM9000的NCR寄存器写入要求值即可实现DM9000软复位。第三步,设置DM9000收发模式和开中断,最后设置DM9000的MAC地址,从而整个DM9000的初始化完成,进行收发数据。
1.4 DM9000发送和接收数据控制
DM9000是发送和接收数据的底层硬件,因此,要实现数据与网络接口的传输,就必须实现发送和接收函数的编写,而发送和接收函数也是底层硬件与上层应用程序的接口。
1.4.1 发送函数sendpacket()流程图
DM9000发送函数流程图如图2所示。
1.4.2 接收函数recepacket()流程图
DM9000从网络中接到1个数据包后,会在数据包前面加上4个字节,分别为“01H”(同MRCMDX的值)、“status”(同RSR寄存器的值)、“LENL”(数据包长度低8位)、“LENH”(数据包长度高8位)。整个接收过程如图3所示。
图2 DM9000发送函数流程图
图3 DM9000接收函数流程图
2 LWIP协议的移植
LWIP协议是1个开源的TCP/IP协议,它把整个TCP/IP协议封装好,并且提供用户移植需要的操作系统模拟层接口和用户使用LWIP协议的API接口,该协议代码占用内存空间小,提供明确的操作系统模拟层移植说明,已经被广泛运用,且该协议支持不带操作系统直接使用,大大降低了移植难度。
LWIP协议移植必须完成底层操作系统模拟层与底层硬件的接口,这样才能让LWIP协议真正运行起来。然而要完成LWIP协议模拟层与硬件的通信,就必须实现4个重要函数:网口芯片的初始化函数,数据接收函数,发送函数和网口中断函数。
该设计使用DM9000作为网口芯片,上文已经详细介绍了DM9000网口芯片的初始化、发送和接收函数的实现。需要把发送函数sendpacket()和接收函数进行部分改动recepacket()。首先,对于发送函数,LWIP中的发送数据存放在pbuf*p的p->payload中,所以发送的数据就是p->payload,而且发送数据p->payload是已经封装好的MAC帧,然后把生成的MAC帧发送出去;对于接收函数,也是先把接收到得数据存放在p->payload,然后LWIP会自动处理这些数据。
初始化函数ethernetinit()。首先,需要初始化LWIP,然后初始化DM9000芯片。LWIP初始化需要netif->state数据状态,netif->name以太网名,netif->output输出函数,netif->linkoutput连接函数。
网口中断函数需要处理的有发送中断处理、接收中断处理和出错处理,一般出错的时候直接丢包不做处理,发送时调用发送函数,接收时调用接收函数。
3 系统仿真测试
3.1 ARP测试
ARP分组格式图如图4所示。
ARP协议是地址解析协议,主要是通过目标IP查询得到目标MAC地址的协议。首先,已知目标IP,然后向网络发送1个ARP分组报文,如果目标IP收到报文,则发送1个ARP回文,从回文中便可得到目标IP的MAC地址。
现在直接把ARP请求报文放在1个数组中,然后调用sendpacket()发送函数,直接把ARP报文发送出去,然后等待ARP回文,收到回文就会调用中断函数,并把接收到的ARP回报存放在0x20001000地址开始的地址空间。仿真结果如图5所示。仿真结果显示,回文中的目标IP地址192.168.1.25,对应的MAC地址为0x00,0x14,0x97,0xf0,0x07,0x24,该回文是从 MAC 地址为 0x6c,0xf0,0x49,0x92,0xb4,0x32,对 应 IP 地 址 为192.168.1.26,整个ARP地址解析过程说明DM9000芯片初始化正确,接收和发送函数也能够正常工作。
3.2 LWIP协议TCP/IP通信测试
整个系统设计流程图如图6所示。首先,DSP6713B初始化,DSP的初始化主要是完成PLL时钟,EMIF外部存储器接口初始化和中断初始化,PLL时钟为DSP内核和外部存储器接口提供工作时钟,EMIF外部存储器接口的初始化主要是设定外部存储器的类型、工作模式和读写时序;其次,DM9000初始化,主要是设置DM9000的复位,工作模式和中断的初始化;LWIP的初始化,主要是初始化LWIP的操作系统模拟层接口,实现LWIP与底层硬件的通信。整个系统的初始化完成。
建立1个TCP连接用来测试系统设计的效果。首先设置好本机的MAC地址,MAC地址在DM9000上面有标明,这个是DM9000的固定MAC地址,不能自己更改;然后设置IP地址,网关和子网掩码,这几个参数应依据使用的局域网设置;开启1个TCP通道,绑定到本地端口60023,端口号就代表着1个TCP线程,然后侦听TCP连接,与DSP建立TCP连接后,PC机向DSP发送字符串“LWIP”,如果PBUF的payload中成功接收该字符串,则DSP向PC机发送字符串“TCP TEST IS OK”。实验仿真结果如图7和图8所示。
DSP硬件板作为服务器,服务器IP地址为192.168.1.25,服务器端口为60023,PC机作为客户端,打开网络调试助手,如图8设置,然后单击连接,就能够把PC机和DSP硬件板连接上,往发送区填入发送数据LWIP(16进制为0x5049574c)。从图7可以看到LWIP数据存储PBUF中的payload已经接收到了0x5049574c,在确定接收数据为0x5049574c后,DSP向PC发送字符串“TCP TEST IS OK”,在图8网络调试助手的接收区可以看到显示接收到来自IP地址192.168.1.25的数据“TCP TEST IS OK”,TCP通信测试成功,表示DSP网口扩展成功[3-4]。
4 结束语
针对DSP6713B没有自带网口功能,提出了基于DM9000网口扩展芯片扩展网口的方法。该设计详细地分析了DM9000初始化过程,指出DM9000发送和接收函数需要解决的问题和实现的具体过程,并且把DM9000网口芯片作为LWIP网口通信协议的驱动底层,实现了LWIP协议操作系统模拟层接口并最终实现LWIP协议的移植。采用TCP通信测试整个系统的功能,并最终实现了DSP与PC机的TCP通信,整个设计稳定、可靠,能够有效地运用在现实的网口功能上,具有很好的市场前景。
[1]张翠,邓志良.LWIP协议栈在μC/OS-II上的移植和应用[J].微计算机信息,2010,26(3):84-86.
[2]李国辉,范科峰.基于ARM+DM9000的TCP/IP协议栈的移植与实现[J].电子科技,2008,21(6):66-69.
[3]袁安富,夏生凤.基于ARM和Linux的DM9000网络接口设计及驱动实现[J].计算机工程与科学,2011,33(2):27-31.
[4]胡俐蕊.基于LWIP的μC/OS-II网络应用程序设计方法[J].计算机应用与软件,2010,19(1):145-148.