DM9000

2024-07-29

DM9000(共4篇)

DM9000 篇1

0 引言

某项目采用北京微电子技术研究所自主研发的BM3101芯片, 其核心是SPARC V8体系结构的32位RISC处理器, 只有Vx Works 5.4版本操作系统支持该架构处理器, 为了在开发板上实现以太网通信功能, 需要移植Vx Works 5.5版本的DM9000网络驱动程序。

1 DM9000网络驱动程序移植实现

本次移植基于国产PLC样机的CPU开发板, 采用了国产SPARC V8架构的32位RISC芯片BM3101, 以太网芯片选用DM9000BI。整个移植过程中需要注意很多问题, 包括DM9000芯片与CPU地址线的连接、底层网络驱动程序主要函数的实现等。

1.1 DM9000芯片及地址线连接

DM9000由PHY和MAC两部分组成。PHY集成10/100M收发器, 由自协商模块负责检查和控制;MAC通过MII (介质无关接口) 管理PHY以及发送和接收设备的信道, MAC经由内存管理模块与处理器接口连接。DM9000集成16KB的内部SRAM, 用作收发数据的缓冲区, 提供E2PROM接口, 可连接外部E2PROM存储MAC地址、ID号等信息。

DM9000共有48条引脚, 其中处理器接口对应21条, E2PROM接口对应3条, 时钟对应2条, LED对应2条, PHY对应12条, 电源和地各3条, 测试引脚1条, 复位引脚1条。DM9000可工作于8位模式和16位模式, 本次移植将其设置为16位模式。

BM3101芯片数据存储采用大端模式且数据线为32位, 而DM9000数据存储采用小端模式且数据线为16位, 对它们的数据线进行连接时, 只使用BM3101的低16位数据线 (DATA16-DA7A31) 。

1.2 Vx Works网络驱动程序移植步骤

(1) 安装Tornado 2.0开发环境, 取得可以创建工程、Vx Works操作系统能够正常启动的BSP包, 然后通过该BSP包建立可引导型工程。

(2) 将网络驱动程序的头文件dm9000end.h包含到网络驱动程序的源文件dm9000end.c中, 然后在sys Lib.c中合适地方包含源文件dm9000end.c。可以在config.h头文件中使用宏来配置组件, 也可以在Tornado下建立可引导工程后通过工作空间中的配置选项卡进行配置。network components (网络组件) 是必须添加的, 为了减小操作系统映像的大小, 可对其进行裁剪, 禁用其中的部分功能。

(3) 到相应位置修改自定义的驱动数据结构END_DEVICE。驱动自定义结构是联系内核与驱动程序的纽带, 保存着设备与驱动的重要信息。驱动自定义结构END_DEVICE是基于内核结构END_OBJ实现的, 其首个成员必须为内核数据结构END_OBJ。程序如下:

(4) Vx Works为END型网络驱动提供了mux中间层接口, 根据接口定义实现所需的函数即可, 本次移植需要实现的函数有:加载函数、启动函数、中断处理函数、接收函数、发送函数、设备控制函数、停止函数和卸载函数, 这些函数对应dm9000Func Table数组里的各个元素。程序为:

以启动函数dm9000Start为例, 接口实现的程序为:

2 网络驱动程序测试

在网络驱动程序开发完成前, 只能使用串口对目标机进行调试。主机端使用超级终端或串口助手通过WDB调试通道连接目标机。在驱动程序中, 使用log Msg函数添加调试信息, 从串口打印出来。

目标机启动后, 可通过Shell命令行输入相应的命令查看目标机状态, 如:使用devs命令显示设备列表, i命令显示任务信息, if Show命令显示网络设备详细信息, ipstat Show命令显示IP状态。目标机状态信息显示如图1所示。

devs命令第5个设备host为添加的网络设备。i命令可以显示所有可执行的任务, 其中t Net Task任务已经正常启动, 能够完成中断下半部分的执行。图2为使用Wireshark抓包工具抓到的数据包, 可看到目标机的MAC地址为96:0c:7f:e5:08:06。

3 结语

通过在BSP包中添加Vx Works网络设备驱动源代码, 并在Tornado2.0里建立相应的工程, 反复修改, 不断调试, 最终解决了在SPARC V8架构处理器上实现网络设备驱动的问题。

摘要:介绍基于Vxworks 5.4的DM9000网络驱动移植过程, 把Vx Works 5.5版本的网络驱动程序移植到Tornado 2.0建立的工程中, 实现开发板以太网通信功能。

关键词:VxWorks 5.4,网络驱动,DM9000,移植

参考文献

[1]王景刚, 邓如玉, 杨小平.基于Vx Works的网卡驱动设计[J].中国新技术新产品, 2010, (14)

[2]孔祥营, 柏桂枝.嵌入式实时操作系统Vx Works及其开发环境Tornado[M].北京:中国电力出版社, 2002

[3]高超, 郝燕玲, 吴润.Vx Works下网卡驱动程序的开发[J].微计算机信息, 2004, (9) :10-11

[4]周启平.Vx Works下设备驱动程序及BSP开发指南[M].北京:中国电力出版社, 2004

DM9000 篇2

在传统嵌入式系统开发中, 经常使用串口JTAG口下载文件, 这些方式适合文件镜像比较小的情况。但是随着嵌入式产品功能越来越强大, 操作系统和根文件系统已经出现在许多嵌入式系统中, 需要下载的文件大小有了显著的增加, 传统的方式已经不能满足开发者需求。为了提高下载速率, 可以采用USB方式和以太网方式。针对USB方式, 可以通过USBNET、USBSERIAL、USBSTORAGE或自定义协议等途径实现[1], 在设计实现时, 都需要操作USB主控制器, 而嵌入式设备通常采用OHCI主控制器, 支持USB 1.1标准, 最大速率为12Mb/s, 速率有时不能满足开发者要求。以太网是局域网采用的最通用的通信协议标准, 目前有标准以太网、快速以太网、千兆以太网和万兆以太网, 网络吞吐量理论上分别为10Mb/s、100Mb/s、千兆和万兆。在嵌入式中用的比较多的是标准以太网和快速以太网。本文介绍通过以太网口DM 9000A实现文件下载, 称PC为主机, 称嵌入式设备为目标机。

1网络接口设计

PXA 270嵌入式微处理器采用XSCALE核, 是INTEL公司继StrongArm之后推出的新一代处理器核, 主要特点[2,3]:主频最高可以达到624MHz;IN-TELWIRELESSMMX指令集和扩展单指令多数据流指令SSE可以提供高性能、低功耗的多媒体、3D游戏和视频等应用加速;INTEL QUICK CAPTURE技术可以支持高达400万像素的摄像头, 支持快速预览、高质量图片捕捉、快速动画捕捉等模式;支持复位、空闲、深度空闲、运行、等待、睡眠和深度睡眠等多种CPU工作模式;集成众多外设控制器, 如USB、PCMCIA/SD/MMC、I 2C、串口、AC 97、LCD、实时时钟、PWM等。

DM 9000A是DAVICOM公司推出的一种高度集成、功能强大、少引脚的以太网控制器, 主要特性[4,5]:实现以太网媒体介质访问层和物理层的功能, 包括数据帧的组装/拆分与收发、CRC编码/校验、MLT—3编码器、接收噪音制、输出脉冲成形、链路完整性测试、信号极性检测与纠正等;支持8/16位数据总线;10/100M网络自适用, 适应不同的网络速度要求;内置16KB的SRAM, 用于收发缓冲, 降低对主处理器的速度要求;与IEEE 802.3u兼容, 支持IEEE 802.3x全双工, 可同时收发;具有睡眠模式, 可降低功耗;采用48引脚LQFP封装, 缩小了PCB面积。DM 9000A以太网接口电路原理框图如图1所示。

其连接说明:与DM9000A地址有关的信号只有NCS4和ADDR14, NCS4是片选4使能信号, 只有当它有效 (低电平) 时, 才能对DM9000A进行读写操作, ADDR14是用来选择片内指针寄存器或数据端口寄存器;INT是为了保证后续加载的Linux操作系统能够以中断的方式处理DM9000A数据收发, 而该信号在U-BOOT中并没有用到;LED1和LED2显示了DM9000A的工作状态, 便于开发者对网卡进行测试, 本文中当LED1连接的灯亮和LED2连接的灯反复一闪一灭时, 表示正在下载文件;RX+、RX-和TX+、TX-分别是以太网口的差分接收端和发送端, 与以太网隔离器H1102相连。

2 基于U-BOOT的文件下载软件设计

2.1 TCP/IP协议栈简化

在遵守OSI模型和TCP/IP协议的基础上, 为了实现引导程序U-BOOT的ping功能和tftp文件下载功能, 对协议栈进行简化, 实现链路层的网络设备底层驱动、网络层的IP协议ARP协议和ICMP协议、传输层的UDP协议、应用层的TFTP协议。同时, 对其中某些协议也进行简化, 遵守原则:由于ping功能用到ICMP回响请求和回响响应两种报文类型, 所以省略对其他ICMP报文的处理部分;主机和目标机连接采用网线直连的方式, 不需跨越路由器, 在IP协议实现中可省去路由选择功能;TFTP数据报文中数据长度小于或等于512 byte, 小于以太网媒体的MTU, 所以在IP协议中可省略数据分片和组装处理部分[6];考虑到目标机不需要主动发送TFTP数据报文, 所以TFTP报文类型有读请求报文 (RRQ) 、数据报文 (DATA) 、确认报文 (ACK) 。简化的TCP/IP协议栈体系结构如图2所示。

2.2 文件下载实现

2.2.1 网络设备底层驱动设计

(1) 硬件初始化

使用DM9000A进行数据收发之前, 必须对其进行初始化, 用函数eth_init完成, 主要任务:读取DM9000A厂商id和产品id, 并检验其合法性, 如果不合法, 初始化失败;设置网络控制寄存器NCR的bit[0]、bit[1]和bit[2], 其中bit[0]是软件复位位, bit[1]和bit[2]用于网络工作模式选择;设置中断掩码寄存器IMR的bit[7], 使当指向DM9000A中SRAM的指针寄存器超过了其容量的最大值时, 寄存器值自动返回到SRAM起始地址;将来源于环境变量区的以太网物理地址写入物理地址寄存器;设置接收控制寄存器RCR的bit[0], 使能接收功能;清除中断掩码寄存器IMR的bit[0]至bit[7], 禁止所有中断。

(2) 数据发送

用函数eth_send实现, 主要任务:利用写操作寄存器MWCMD向DM9000A的发送缓冲区写入已具有以太头结构的数据;将待发送的数据长度写入发送长度寄存器, 该寄存器是16位, 采用小端对齐方式存放数据;设置发送控制寄存器的bit[0], 表示向DM9000A发出发送数据命令。剩下的操作与软件无关, DM9000A会插入前导码、帧首定界符SFD, 形成以太网帧头, 然后将该帧头和帧数据发送到以太网上, 并且一边发送, 一边逐位进行CRC检验, 最后形成一个32位CRC检验和, 填在帧尾FCS位置中, 并在媒体上传输。

(3) 数据接收

DM9000A的接收缓冲区是一个环形结构, 初始化后的起始地址是0c00h, 用函数eth_rx完成数据接收, 主要任务:借助存储器预读命令寄存器MRCMDX从接收缓冲区读取前4个字节, 如果第一个字节不为0×01, 说明SRAM中没有数据, 设置rxlen=0, 退出eth_rx, 否则rxlen来源于第3和第4字节, 利用存储器读命令寄存器MRCMD读取前4个字节和帧数据, 并更新接收缓冲区地址寄存器;根据帧状态判断接收的帧是否正确, 如果错误, 则再一次读取接收缓冲区内容, 这样很可能造成主机超时重传, 否则调用函数NetReceive, 将接收到的数据提交给上层, 上层依据各层协议对帧内容进行相应处理。接收缓冲区数据格式如图3所示。

2.2.2 定义的数据结构

(1) 结构体IP_t, 包含了网络层的IP报头、ICMP报头或传输层的UDP报头。由于ICMP报头和UDP报头大小相等, 所以这里将ICMP报头和UDP报头共用同一空间, 用IP_t结构中协议字段ip_p加以区别。

(2) 结构体ARP t, 定义了网络层ARP报头。

(3) 结构体Ethernet t, 定义了缺少前导码和帧首界符的帧头结构, 称作以太头。

2.2.3 ping实现

U-BOOT中ping命令用于测试主机和目标机的连通性, 主要过程:目标机向主机发送一个含有ICMP回响请求的IP报文, 主机在收到该报文后向目标机回送一个含有ICMP回响响应的IP报文, 目标机对该报文进行分析, 如果IP_t结构中的ip_src等于NetPingIP (主机ip) , 说明主机和目标机是连通的。用函数PingStart完成发送ICMP回响请求报文的功能, 用函数PingHandler对接收到的ICMP回响响应报文进行处理。

2.2.4 tftp实现

本系统采用TFTP协议进行数据传输。目标机根据下载命令组装TFTP读请求报文, 然后向主机发起建立连接的请求, 主机端口号是69, 目标机端口号随机产生。主机在接收到TFTP读请求后, 向目标机发送一个TFTP数据报文, 这样连接建立, 在整个文件传输过程中一直使用上面的端口号。主机在接收到目标机发送的TFTP响应后才发送下一个TFTP数据报文, 只有当TFTP数据报文中数据长度小于512 byte时, 文件传输才结束。发送方发送一个TFTP报文后, 如果在规定的时间内没有收到响应, 要超时重传。TFTP协议报文数据单元格式如图4所示。

2.2.5 错误处理机制

主要是通过超时重传机制进行错误处理。目标机在每次发送TFTP报文之前都要设置当前时间、超时值、超时处理函数, 随后从函数eth_rx返回后, 目标机会对该TFTP报文传输时间进行判断, 如果在程序设定的时间内, 没有收到主机发来的TFTP数据报文, 就认为TFTP读请求报文或TFTP响应报文丢失, 重新发送丢失的TFTP报文;如果重传次数达到了程序设置的最大值, 目标机将丢弃以前接收到的所有有效数据, 重新向主机发送TFTP读请求报文。ARP超时设计可参考TFTP超时。另外, TFTP数据报文中有一个字段是数据块号, 在上层调用TFTP包处理函数对该报文进行处理时, 如果发现数据块号等于前一个接收到的数据块号, 则丢弃该报文, 避免了TFTP报文重复接收。

2.2.6 U-BOOT中DM9000A支持

U-BOOT的配置文件include/configs/dma270.h增加宏定义:

#define CONFIG_ETHADD= 00:C0:26:28:96:30;

#define CONFIG_DM9000_BASE 0x10000000

#define DM9000_IO CONFIG_DM9000_BASE

#define DM9000_DATA (CONFIG_DM9000_BASE+0X4000)

#define CFG_MSC2_VAL 0XB8847FFC

由于本系统没有外接eeprom, 所以以太网地址只能来自程序, 定义了CONFIG_ETHADDR;为了区别本系统中的CS8900A和DM9000A两种以太网卡, 定义 CONFIG_DM9000;在DM9000A的以太网卡寄存器组中, 只有片内寄存器和数据端口寄存器可以被直接访问, 对其他寄存器的读写都是通过这两个寄存器进行的, 所以根据硬件电路图、DM9000A手册、PXA270手册, 定义它们的地址: DM9000_IO, DM9000_DATA;MSCx寄存器是存储器控制功能中极其重要的寄存器, 记录了存储器的性质、位宽和操作的实际参数, MSC2控制着nCS[4:5]连接的设备, 根据DM9000A手册, 设置CFG_MSC2_VAL等于 0XB8847FFC, 表示nCS4连接的DM9000A设备类型为可变延迟I/O、总线宽度16位、慢速设备及第一次访问、下一次访问、恢复时间均是最大延迟。

3 实验分析

通过带参数的宏U_BOOT_CMD, 在U-BOOT中添加tftp命令, 用于支持文件下载。如图5所示, 将文件zImage成功地下载到目标机的SDRAM。

实验证明, 通过JTAG、USB1.1、DM9000A下载文件的速率分别为9.7 kb/s、1.7 Mb/s、4.3 Mb/s。这里USB1.1和DM9000A的传输速率与它们各自的理论值相差甚远的主要原因是嵌入式处理器主频还不够高、U-BOOT中采用轮询的方式依次执行数据接收及判断是否发生ARP超时、TFTP超时、终止按键 (CTRL+C) 等事件, 这些造成了不能够及时处理到来的帧数据, 另外主机在收到TFTP响应报文后才发送下一个TFTP数据报文, 这些因素使宏观上传输速率下降, 而微观上速率接近于各自的理论值。

4 结束语

在嵌入式开发和代码更新阶段, 都需要将镜像文件下载到目标机, 合适的下载方案对于项目进度有着积极的作用。文中所介绍的方法具有硬件设计简单、软件易于实现的特点, 并获得了较高的下载速率。

摘要:提出了一种高速下载文件的方案。它结合PXA270嵌入式微处理器及DM9000A以太网控制器的特点, 进行硬件接口设计, 再根据引导程序U-BOOT中网络部分的要求, 简化了TCP/IP协议栈, 实现了U-BOOT中DM9000A下载功能, 提高了文件下载速率。

关键词:引导程序,U-BOOT引导程序,PXA270,DM9000A,嵌入式系统

参考文献

[1]柴东岩, 候紫峰.引导程序中USB下载功能的设计与实现.计算机工程, 2008;34 (6) :268—270

[2]Intel Corp.Intel PXA27X processor family developer s manual.2006

[3]Intel Corp.Intel PXA270Processor electrical, mechanical, and ther-mal specifications data sheet.2005

[4]DAVICOM Semiconductor Inc.DM9000A Ethernet Controller with General Processor interface data sheet.2006

[5]苏耀峰, 王德刚, 魏急波.DM9000A与基带信号处理平台的综合应用.芯片应用, 2007

DM9000 篇3

关键词:FPGA,DM9000A,FT245,数据采集,高速,长线,通信

1 引言

随着测试测量和控制应用的要求变得愈发苛刻, 数据采集要求提供吞吐速度更快、传输距离更远、灵活性更强的传输方法。IT技术的高速发展, 以太网的传输效率、速度有了显著的提高, 其传输有效距离能达到100m, 如果使用中继有效传输距离能增加到1km, 码率达到100Mbps~1Gbps, 这样就很好地解决了长线高速数据采集中要求传输码率高、距离远的问题。本文提出用FPGA控制以太网接口芯片DM 9000A进行远程数据采集, 同时用USB接口芯片FT245与PC机实现数据通信。

2 DM 9000A和FT 245工作原理介绍

DM 9000A是DAVICOM公司的一款低功耗、高效单芯片以太网接口芯片, 具有体积小、功耗低、配置灵活、操作简单等特点[1]。DM 9000A完全符合IEEE 802.3u国际标准, 其内部集成10/100M PHY和4K SRAM, 并且I/O电平兼容3.3V和5V, 其内部的存储器总线既可以工作在8位模式也可以工作在16位模式, 以适应于不同的处理器, 可以为单片机、嵌入式微处理器 (MPU) 等提供廉价的以太网接口。

计算机技术的高速发展, USB已经成为了一种主流的接口, 成为了计算机、通信和消费类电子等应用领域最广泛的工业标准总线。FT245提供了一种低功耗、易操作的数据传输方法, 内置FIFO使得很容易和微控制器、FPGA或其他外部设备进行数据通信。

FT245的主要功能是进行USB和并行I/O口之间的协议转换。芯片一方面可从PC机通过USB串行总线接收数据, 并将其转换为并行I/O口的数据流格式发送给外部设备;另一方面外部设备可通过并行I/O口将数据转换为USB串行数据格式传回PC机。当外部设备发送数据通过USB到PC机时, 只有当TXE引脚是低电平时, 才能单字节写入FT245内部缓存FIFO。如果FIFO的发送缓存全部存满或者正在存储前一个字节, FT245的TXE引脚将一直保持高电平;当PC机通过USB向外部设备发送数据时, 当FT245的RXF变为低电平, 这时外部设备可以单字节读取数据, 只有当外部设备读空FT245内部FIFO时, RXF将保持高电平。

3 硬件电路及工作原理

3.1 硬件电路设计

硬件电路芯片主要由FT245、DM 9000A、X 3S500E、EEPROM、Flash等组成。其整体硬件框图如图1所示。

FT245用EEPROM存储配置信息, 包括USB的VID/PID, 厂商、产品ID等信息。在硬件电路上, USBDP (D+) 引脚需要上拉到3.3V或连接到RSTOUT引脚;FT245的I/O逻辑电平通过VCCIO来确定, 如果需要I/O电平为5V, 则VCCIO连接5V, 在本方案中采用3.3V逻辑, 故VCCIO连接3.3V电源。

本文中DM 9000A数据传输采用16位模式和FPGA进行数据通信, 所以DM 9000A的EECS引脚必须通过一个4.7kΨ的上拉电阻拉为高电平, 16位模式设置成功与否, 可以通过读取ISR寄存器的最高位来判断, 0代表16位模式, 1代表8位模式。使用EEPROM存储芯片配置信息, 通过设置EEPROM&PHY寄存器来读写EEPROM的配置信息, 其中包括以太网节点地址 (MAC) , 厂商、产品ID, 处理器总线的极性设置, 唤醒模式等等。DM 9000A的引脚EECK通过一个4.7kΨ的上拉电阻拉为高电平, 配置DM 9000A的接收中断为低电平有效。

由于DM 9000A中数据总线和地址总线复用, 必须通过CMD引脚信号来判断总线当前是地址还是数据, 当CMD=0时, 当前总线上为地址, 读取数据后放入DM 9000A的地址寄存器。当CMD=1时, 当前总线上为数据, 读取数据后放入DM 9000A的数据寄存器。DM 9000A硬件电路如图2所示。

3.2 FPGA内部结构

FPGA内部结构分三部分, FT245控制、DM 9000A控制和Flash控制。FPGA内部框图如图3所示。系统上电后首先对DM 9000A进行初始化内部寄存器, 等待接收发送数据, DM 9000A初始化过程[2]如下:

(1) 激活内部PHY, 上电复位后系统默认是关闭内部PHY, 通过写0到0x1F寄存器激活PHY。

(2) 软复位DM 9000A初始化, 通过写1到0x00寄存器, 延时10μs对其进行清零。

(3) 配置NCR寄存器 (NCR (REG 00) LBKBit[2:1]="00"b) 使其工作在正常模式。

(4) 配置IMR寄存器 (REG FFH Bit[7]=1) , 启用读写缓存地址指针自动返回功能。

(5) 读取EEPROM的3Words, 获取预设以太网MAC地址。

(6) 配置物理地址寄存器 (REG 10H~REG15H) , 写入6Byte以太网MAC地址到物理地址寄存器。

(7) 配置Hash表8个字节到组播地址寄存器。

(8) 配置IMR寄存器, 开启接收、发送中断。

(9) 配置RCR寄存器使能接收。

(10) DM 9000A的NIC被激活, 等待接收发送数据。

4 程序设计

4.1 FT 245程序设计

FT245程序主要分两部分, FT245数据接收和数据发送, 其状态机如图4所示。在系统上电时, 状态机初始化为等待接收发送数据状态, 当TXE和RXF都为高电平时, 为数据等待状态, 只有接收到和发送数据才跳转到下一状态。

当RXF=0时, 即FT245缓存中已经有数据可以读取, FPGA将总线数据读取到内部FIFO中。首先状态机跳转到设置RX低电平状态, 然后保持至少80ns, 状态机跳转到锁存数据状态, 该状态会将FT245缓存数据读出到FPGA内部, 暂存到Data里, 并置FIFO读写标志W Flag=0, 状态机跳转到写FIFO状态, 该状态将向FPGA内部FIFO写入数据Data, 并置W Flag=1, 最后状态机跳转到初始状态, 等待接收发送数据。

当TXE=0时, 并且W fifo en=0, FPGA内部FIFO有数据需要读取。首先状态机跳转到读取FP-GA内部FIFO状态, 将FIFOdata暂存到Wdata中, 然后状态机跳转到WR置高电平状态, 该状态置WR=1, Wdata放到FT245数据总线上等待数据写入FT245内部FIFO, 其次状态机跳转到保持WR高电平状态, 保持80ns后, 状态机跳转到设置WR为低电平状态, 将数据写入到FT245内部FIFO中, 最后状态机跳转到初始化状态, 等待接收或发送数据。FT245接收数据仿真图如图5所示。

4.2 DM 9000A程序设计

DM 9000A程序设计由基本读写模块、收发模块组成。在DM 9000A工作前首先要对其进行初始化操作, 激活PHY, 读取以太网MAC地址到寄存器, 初始化接收发送RAM地址, 然后开始数据收发。

4.2.1 DM 9000A基本读写模块设计

DM 9000A所有操作都是通过读写其内部寄存器来实现的, 要实现其稳定可靠的工作, DM 9000A最基本的读写模块必须高效、稳定可靠。如图6为DM 9000A写数据时序图。CS为芯片片选信号, CMD为命令类型 (总线数据是地址还是数据) 信号, IOW为写信号, SD为16位总线数据, 由下图可以看出, 要向DM 9000A写入数据, 首先拉低CS、CMD (如果写入的是地址) 信号, 然后拉低写信号IOW, 加载16位数据SD到总线上, 最后拉高写信号IOW产生一个上升沿, 完成数据的写入操作。

向DM 9000A写入数据用C语言实现较为简单, 但是目前中低端FPGA还不能用C语言编写程序, 下面介绍用Verilog语言实现写操作基本模块, RunStart为数据写入开始信号, RunEnd为数据写入结束信号, SData为被写数据, RunCountChange为循环左移位数 (0或者1) , 可控制单个状态机的持续时间, RunCount通过计数控制状态机跳转, RunCountChangeEnable信号防止数据多次写入。将RunStart信号置高, 写入数据开始, 这时RunCountChange=1, RunCount开始计数, 状态机开始逐个执行下去, 首先赋值CS, CMD数据, 然后加载被写数据到总线上和写信号IOW拉低, 最后IOW拉高, 产生上升沿, 被写数据写入到DM 9000A相关寄存器。DM 9000A的基本读模块也和这类似, 这里就不再赘述。根据上面时序图可以编写如下主要Verilog代码[3]:

4.2.2 收发模块

DM 9000A接收到的数据被暂存在接收缓存FIFO中。FPGA读取0xFE寄存器的值获取DM 9000A的接收中断状态, 如果有接收中断产生, 按包读取DM 9000A的接收缓存数据到FPGA内部FIFO, 每个包头有4字节, 其后的数据则是包数据, 包头首字节是用来标识缓存区是否有数据, 01H表明接收到了数据包, 00H说明没有数据包, 第二个字节存储着以太网数据包状态, 第三和第四字节存储着以太网数据包长度[4]。同时将接收到的包数据通过FT245发送到上位机。通过DM 9000A发送数据时, 首先将被发送数据写入到DM 9000A内部发送FIFO中, 随后将包数据长度写入到0xFD和0xFC中, 然后通过向寄存器0x02写入0x01执行发送命令, DM 9000A会自动插入来自上层协议的数据[5], 插入帧起始分隔符和报头, 如果数据量小于64字节, 则自动补齐64字节;根据目标地址、源地址、长度/类型和数据生成CRC校验序列, 并插入校验序列位。如图7所示为电脑接收到的发送数据包。

5 结论

本文所述系统在实验室已通过调试和测试。测试表明, 该系统能够顺利和远端数据采集进行数据通信, 并存储到本地Flash上, 同时也可以通过USB接口上传至PC机, 为高速长线数据采集提供了一套切实可行的方法。

参考文献

[1]United Microelectronics Corporation.DM9000A Datasheet[K/OL]. (2006-10-30) [2010-03-31].http://www.davicom.com.tw.

[2]United Microelectronics Corporation.DM9000AB ProgrammingGuider[K/OL]. (2006-10-30) [2010-03-31].http://www.davicom.com.tw, 2006-10-30.

[3]简弘伦.精通Verilog HDL:IC设计核心技术实例详解[M].北京:电子工业出版社, 2005:117-168.

[4]王天杰, 原明亭.基于C8051F020的以太网远程监控系统的设计[J].化工自动化及仪表, 2007, 34 (5) :36-39.

DM9000 篇4

1 总体设计

本系统使用32位DSP处理器TMS320F28335和以太网控制芯片DM9000A为核心,DSP控制整个系统的运行,DM9000A实现网络传输的底层功能[3]。并对TCP/IP协议栈自行裁剪,构成了DSP的以太网接口,实现了网络通信。其系统总体框图如图1所示。

2 系统硬件设计

2.1 DM9000A功能结构

DM9000A是DAVICOM公司推出的一款高度集成、低成本的快速以太网控制器,实现以太网媒体介质访问层(MAC)和物理层(PHY)的功能。该芯片具有通用的处理器接口,片内集成了10/100M自适应的PHY,内部含有16 KB SRAM用于接收/发送的F1F0缓存,3.3 V供电,并且支持IEEE 802.3以太网传输和8/16接口的两种主机工作模式协议[4]。功能结构如图2所示。

2.2 接口电路的连接

接口电路主要由DSP、以太网控制芯片DM9000A、隔离变压器和RJ-45构成。DSP控制整个系统的运行,DM9000A实现以太网数据的底层传输。隔离变压器的主要作用:其一,可以增强信号,使其传输距离更远;其二,使芯片端与外部隔离,增强抗干扰能力,并对芯片端起保护作用;其三,当接到不同电平(如有的PHY芯片是2.5 V,有的PHY芯片是3.3 V)的网口时,不会对彼此设备造成影响。RJ-45接口可用于连接RJ-45接头,适用于由双绞线构建的网络,这种是最常见的以太网接口。DM9000A采用16位接口模式,数据地址复用总线D0~D15与DSP总线XD0~XD15相连;DM9000A的写信号引脚与DSP的XWE0n相连;读信号引脚与DSP的读引脚相连;DM9000A的片选信号引脚与DSP的CS0n相连;DM9000A的访问类型引脚CMD与DSP的普通I/O口GPIO61相连,高电平访问DM9000A的数据端口,低电平访问地址端口;DM9000A的复位引脚与DSP的GPIO60相连;DM9000A的物理层接口TX+,TX-,RX+,RX-通过隔离变压器连接RJ-45至以太网。其以太网接口硬件连接如图3所示。

3 系统软件设计

网络接口的软件主要有DM9000A驱动程序设计和上层通信协议程序设计两个部分。DM9000A驱动程序设计主要是通过TMS320F28335控制总线配置DM9000A内部寄存器,完成对DM9000A初始化、以太网数据帧的发送和以太网数据帧的接收三部分。上层通信协议程序设计是对TCP/IP栈裁剪移植,主要完成对接收到的以太网数据帧进行解析并处理,并把要发送的数据封装成以太网数据,然后发送。

3.1 DM9000A驱动程序设计

3.1.1 DM9000A初始化

DM9000A正常工作需要在上电后对内部寄存器进行初始化,具体流程如下:

(1)启动PHY。设置通用寄存器GPR(1FH)的GEPIO0=0。

(2)进行两次软启动。设置网络控制寄存器NCR(00H)的RST=1,10μs后RST=0,同样的操作进行两次。

(3)选择网络模式。设置NCR的LBK=00,设置网络工作模式为正常模式。

(4)清除发送标志。设置网络状态寄存器NSR(01H)WAKEST=1,TX2END=1,TX1END=1。

(5)写6 B的以太网节点地址到物理地址寄存器PAR(10H~15H)中。

(6)设置中断屏蔽寄存器IMR(FFH)的PAR=1,使能指针自动跳回,当SRAM读/写指针超过SRAM的大小时,指针自动跳回起始位置;PRI=1,使能数据包接收中断。

(7)设置接收控制寄存器RCR(05H)的WTDIS=1,看门狗定时禁止;DSI_LONG=1,丢弃长数据包;DIS_CRC=1丢弃CRC校验错误的数据包;RXEN=1,使能接收功能。

初始化流程如图4所示。

完成上述初始化步骤后,DM9000A就处于正常工作状态,可以收发数据包。若有异常发生,就需要重复上述步骤,重启DM9000A以使芯片恢复到正常状态。

3.1.2 数据帧发送

DM9000A内部有16 KB的SRAM作为接收/发送数据的缓存区,其中前3 KB的空间,地址从0x0000H~0x0BFFH,用来缓存需要发送的数据。

数据发送的具体步骤如下:

(1)利用写操作寄存器MWCMD(F8H),将需要发送的数据帧写入DM9000A的发送缓存区。

(2)将数据帧长度写入长度寄存器TXPLL(FCH)和TXPLH(FDH)。

(3)设置发送控制寄存器TCR(02H),TXREQ=1,数据帧开始发送。

(4)检查网络状态寄存器NSR(01H)的TX2END和TX1END位,判断此帧数据是否发送完。

数据帧发送流程图如图5所示。

3.1.3 数据帧接收

当DM9000A数据接收使能后,DM9000A就会自动接收数据。DM9000A接收到的数据先保存在地址从0x0C00~0x3FFF的13 KB内部SRAM缓存空间中,它是一个环形结构。

利用寄存器MRCMDX(F0H)和寄存器MRCMD(F2H)可获取缓存中的数据帧信息。接收到的数据帧格式如图6所示。

其中第1个字节是接收数据标志字节,表征接收到数据帧是否有效。第2个字节是接收数据帧的状态字节,其中的内容与接收状态寄存器RSR中的内容相同,可以用来判断所接收的数据帧是否正常。第3,4个字节是接收到数据的长度字节,其中低位在前,高位在后。从第5个字节开始的数据才是真正数据帧内容。

数据接收过程如下:

(1)检查中断状态寄存器ISR(FEH),若PRS位为1,说明有新的数据帧接收,写1清除PRS位;若为0,说明无数据,直接返回。

(2)读取第1个字节,即接收数据标志字节。如果该字节为01,则表示接收下来的是有效数据帧;如果该位为00则表示没有数据到达,或数据已经接收完成;如果既不是01又不是00,则认为有异常发生,这时就要将DM9000A芯片重启以使芯片恢复到正常状态。

(3)读取第2个字节,即接收状态字节。根据接收状态字节判断所接收的数据帧是否正常。

(4)读取第3,4字节,即数据帧长度字节。

(5)读取真正的数据帧内容。

(6)根据获取的长度信息,判断是否读完一帧。如果读完,接着读下一帧,直到遇到首字节是00H的帧,说明接收数据已读完[5]。

数据帧接收流程如图7所示。

3.2 上层通信协议程序设计

TCP/IP协议模型可以分为四个层次[6],从下到上依次为:链路层、网络层、传输层和应用层。每一层都有不同的功能,低一层为高一层提供服务。

标准的TCP/IP协议栈对处理器的计算、存储要求比较高,然而,DSP系统的计算资源和存储资源通常是非常有限,在DSP中实现标准的TCP/IP协议栈将占用大量系统资源,不利于DSP其他方面的应用,因此必须对它进行简化并优化,尽可能做到代码精简,降低存储开销[7]。本系统设计和实现了TCP/IP通信协议的必要部分,包括:ARP,IP,ICMP,TCP,UDP等协议。

ARP(地址解析协议)为IP地址到对应的硬件地址之间提供动态映射。IP协议是TCP/IP协议的核心,所有的TCP,UDP,ICMP的数据都是以IP数据格式传输的[8]。ICMP(网络控制报文)是用来传递差错报文以及其他需要注意的信息,有各种类型的ICMP报文,本文只用到ICMP的请求回显(类型字段为8、代码字段为0)。TCP提供一种面向连接的、可靠的字节流服务[9],交换数据之前必须先建立一个TCP连接,即“三次握手”。UDP是一个简单的面向数据报的传输层协议,它把应用程序传给IP层的数据发送出去,但是并不保证他们能到达目的地。在链路层,当DM9000A完成一个以太网数据帧接收后,将其读入暂存数组,检查以太网帧类型字段,该字段值为0x0806,表示数据帧为ARP帧;该字段的值为0x0800,表示数据帧为IP帧。接着,分别交由ARP协议处理模块或IP协议处理模块。编程时使用框架如下:

网络层收到的为ARP数据报,ARP根据操作字段(ARP请求为1,ARP应答为2),或者发送ARP应答或者更新ARP地址映射表。若为IP数据报,IP协议处理模块对数据包解析后,IP首部协议字段若为1就将数据交给ICMP协议处理模块,若为6则交给TCP处理模块,若为17则交给UDP处理模块。传输层得到UDP的报文后,按照UDP协议中的端口,分别送给不同的应用层序。若传输层得到的是TCP报文,则要根据TCP的状态转换图进行处理[10]。在TCP或UDP的处理模块中,根据目的端口号,分别将数据送往不同的用户应用程序。其工作流程如图8所示。

4 结语

本文把高度集成、低成本的快速以太网控制器DM9000A与数据处理能力强大、高运行速度的DSP(TMS320F28335)相结合,设计出了一种DSP的以太网接口。实验结果表明,DSP系统可以通过该接口实现以太网数据通信,经自行裁剪的TCP/IP协议栈,不仅实现了IP,ARP,ICMP,TCP和UDP协议,而且提高了数据传输效率。该接口具有硬件接口简单、外围器件少、运行稳定可靠、性价比高等特点,同时也能够满足测试、采集等高速数据传输系统的要求,符合当今DSP设备趋于网络化发展的方向。

参考文献

[1]施勇,温阳东.基于DM9000A的嵌入式以太网接口设计与实现[J].合肥工业大学学报:自然科学版,2011,34(4):519-524.

[2]赵国峰,邱作雨,张毅.基于单片机的嵌入式TCP/IP协议栈的设计与实现[J].计算机技术与发展,2009,19(3):137-140.

[3]刘亚萍,甄国涌,刘东海.基于MSP430和DM9000的以太网接口设计[J].自动化与仪表,2010(7):17-20.

[4]唐娜.基于TMS320F2812和DM9000A以太网接口设计[J].测量与测试技术,2010,37(11):14-16.

[5]苏耀峰,王德刚,魏急波.DM9000A原理及其与基带信号处理平台的结合应用[J].电子设计工程,2007(4):53-56.

[6]朱升林.嵌入式网络那些事[M].北京:中国水利水电出版社,2012.

[7]王原丽,王丽.基于ARM的嵌入式TCP/IP协议栈的实现[J].现代电子技术,2005,28(22):4-9.

[8]龙鹏飞,宫蓉蓉.一种新的嵌入式TCP/IP协议栈的研究与实现[J].微计算机应用,2007,28(4):372-375.

[9]STEVENS W R.TCP/IP详解卷1:协议[M].范建华,译.北京:机械工业出版社,2000.

上一篇:数学障碍下一篇:强制使用论文