基于DM9000A的网络接口设计
扫描二维码
随时随地手机看文章
摘要:为了实现嵌入式以太网通信,使用以太网控制芯片DM9000A和单片机MSP430F5529,组成了嵌入式以太网接口,实现了网络通信,其中单片机完成自身以及以太网控制芯片的初始化、数据的封包和收发控制,而DM9000A芯片负责网络数据的发送和接收。详细介绍了系统的硬件构成框图和硬件设计,给出了实际的接口电路,重点描述了单片机和DM9000A芯片之间的软件接口程序设计,并给出了网络通信协议的应用方法。实验结果表明,该设计体积小、接口简单、速度快、功耗低,具有很高的推广价值。
关键词:以太网通信;单片机;DM9000A;MSP430F5529
随着嵌入式技术和网络技术的发展及以太网的广泛应用,以太网接口在嵌入式系统中的应用越来越广泛,网络化成为未来设备发展的一个重要方向,各种嵌入式设备已经成功渗透到各个领域,并逐渐朝着网络化、智能化的方向发展。以太网以其在实时性、可靠性、标准化等方面的卓越性能及其便于安装、维护简单、不受通信距离限制等优点,已发展成为一种成熟的技术。本文以MSP430F5529单片机和以太网控制器DM9000A为硬件组成,通过软件编程,和上位机实现了UDP协议的网络通信。
1 硬件设计
DM9000A是DAVICOM公司推出的一款高速以太网接口芯片,是完全集成的和符合成本效益单芯片快速以太网MAC控制器,其被设计为低功耗、高处理性能,而其操作又非常简单,具有通用的处理器接口,可以与多种处理器直接连接,数据总线宽度可设置为8 b和16 b,支持3.3 V和5 V电源模式。
MSP430F5529单片机是TI公司的一款超低功耗单片机。该芯片采用低功耗设计,具有五种低功耗模式,从低功耗模式到唤醒模式的转换时间小于6μs,其独特的时钟设计,每个时钟都可以打开或关闭,从而实现对整体功耗的控制。供电电压范围为1.8~3.6 V,具有强大的中断功能,集成了较丰富的片内外设和较多的I/O端口,提高了对外围设备的开发能力。
在本设计中,单片机MSP430F5529控制整个系统的运行,以太网控制器DM9000A实现网络传输的低层功能。单片机完成对DM9000A的初始化,并将需要发送的数据按协议要求进行以太网帧封装,发送给DM9000A;以中断的方式接收网络数据,并对接收到的数据进行解析,对有用数据进行处理。DM9000A接收从单片机发送来的数据,将数据通过RJ45传送到远程主机,并通过RJ45接收从远程主机发送来的数据,将数据初步解析后保存在缓存中,然后向单片机发出中断信号,由单片机来完成对数据的读取。系统的硬件设计框图如图1所示。
系统中单片机和以太网控制器都采用3.3 V来供电。单片机作为系统的主控芯片,和DM9000A之间采用8 b模式(将EECS脚接一个10 kΩ的上拉电阻),使用P6端口和DM9000A的数据端口相连接,传输数据或地址数据,无需电平转换;P1.0脚和CMD相连,为高时为数据读/写操作,为低时为地址读/写操作;P1.1脚和INT脚相连,作为单片机的数据读取中断信号;P1.2,P1.3脚分别和IOR脚、IOW脚相连,用于控制读或写操作,低电平有效,即在信号的上升沿进行读(IOR)写(IOW)操作;P1.4脚和CS脚相连,作为DM9000A的片选信号。
[!--empirenews.page--]
2 DM9000A芯片操作
DM9000A的读/写操作与一般的异步存储器相同,图2和图3分别显示了DM9000A的读/写时序。
根据芯片资料,编写读/写寄存器的子函数。
寄存器的读操作程序:
3 软件设计
3.1 DM9000A初始化
对DM9000A芯片的初始化,就是向相应的寄存器写入期望的值,为芯片的稳定工作做好准备。主要需要进行以下设置以便让芯片处于工作状态:
(1)开启DM9000A工作状态:芯片GEPIO0的默认值为1,芯片处于Powerdown状态,所以首先需要将这一位设置为0,来打开芯片。设置方法是将寄存器GPCR的bit[0]设置为1,将寄存器GPR的bit[0]设置为0。
(2)进行2次复位操作:根据芯片的特点,要使芯片达到正常工作状态,需要对其进行2次软启动操作,方法是向NCR寄存器写入3,延迟至少10μs后,写入0,重复这个操作一次。
(3)设置MAC地址:初始化时要初始化PAR(10h~15h)寄存器,PAR中保存的是芯片物理地址(MAC地址),芯片根据网络数据与PAR中的数据比较来确定接收到的数据是否是发给自己的。
(4)收、发控制寄存器设置:要清除发送状态寄存器,打开收/发中断使能。
初始化完成后可以通过读NCR寄存器来判断芯片是否已经正确的完成初始化,并处于工作状态,如果未初始化成功,可以重复以上操作。
3.2 数据发送
在数据发送之前,首先要对数据按网络协议进行封包,将封包后的数据全部发送。DM9000A的内部RAM地址0000h~0BFFh是发送缓冲区,用来存放发送数据包。用户在写入数据时,无需关心数据存放的地址,只要向MWCMD寄存器连续写入封包数据即可,芯片会自动将数据依次写入到发送缓冲区中。另外还需将要封包后数据的大小存放在TXPLH和TXPLL寄存器中,之后再将TCR的bit0设为1,芯片将开始进行封包数据的传送。可以通过读取TSRI,TSR11寄存器判断本次数据发送是否成功。[!--empirenews.page--]
单片机数据发送的具体程序如下所示:
3.3 数据接收
可以采用中断的方式来完成对数据的接收。当DM9000A接收到数据并通过CRC校验后,将产生一个接收中断信号,单片机在中断发生时可以将整个数据包读出,并按照使用的网络协议来处理数据。DM9000A内存的0C00h~3FFFh是数据接收缓冲区。芯片在接收到数据包后,会在数据包的前面自动加上4个字节的数据,接收数据包时首先要读取这4个字节来确定数据包的状态,第一个字节“01H”表示接下来的是有效数据包,且数据保存在接收缓冲区中;若为“00H”则表示没有数据包,中断程序可以直接返回;若为其他值则表示出现异常,需要重新初始化芯片。第2个字节则为这个数据包的相关信息,其格式与RSR寄存器的含义一致,可以用来判断本数据包是否出现异常和出现了什么异常。第3和4个字节是存放这个封包的长度大小(不包括前4个字节),在读取数据包时需要用这个长度来进行接收控制。
同数据发送类似,单片机从DM9000A中读取数据也只需要读取MRCMD寄存器中的值即可,读取一个字节数据后,芯片自动将下一个字节数据移到这个寄存器中。数据包的接收过程分2步:先读取MRCMDX寄存器,判断是否存在正确的数据包;如有数据包,根据数据包的长度信息依次读取读MRCMD寄存器,将整个数据包读取出来。其中第1步需要读取两次MRCMDX寄存器,因为第1次读到的值总为0。单片机数据接收程序如下:
[!--empirenews.page--]
4 网络数据传输协议
DM9000A芯片只是用来进行网络数据传输的,在具体使用时需要在单片机中按照所使用的网络通信协议格式如UDP等,进行数据的封包或解析,需要根据各种协议的格式编写相应的数据处理函数。在本系统中使用了UDP协议,协议采用分层结构,因此,数据报文也采用分层封装的方法。UDP协议的数据报文分层封装如图4所示。
单片机在通信时需要按照UDP协议对每一层的数据进行封包或解包处理,在上位机中使用一个抓包工具,可以对通信过程进行监控。图5是在计算机上使用抓包工具监控网络通信的一个截图。
5 结语
本设计采用MSP430F5529单片机和DM9000A以太网控制器相结合,组成了嵌入式以太网接口,通过软件编程实现了简单的网络通信协议,成功的将本系统和控制计算机连接起来,实现了彼此之间的网络通信,为以后实现通过网络进行远程登录、访问、采集、监控等操作提供了可能,符合当今嵌入式设备趋于网络化发展的方向。经多次实验表明,能够实现网络通信功能,并且具有硬件接口简单、使用器件少、开发周期短、功耗低等特点。另外本设计的超低功耗的特点也使其在嵌入式系统中可以得到较多的推广和应用。