基于DSP的嵌入式以太网接口转换器
许多测量和控制设备都是通过串口与其他设备通信,使设备间的数据交互和远程控制受到限制。如果能把串口的数据转换成网络数据格式,组建一个局域网(LAN)来进行数据的交互与传输,则上述的限制将得到有效的改进。考虑到以太网组网技术的易于理解、实现、管理和维护,且成本低廉、网络拓扑结构灵活的优点,应用以太网组网技术来搭建数据交互的平台。其中的关键就是接口转换器的实现。
DSP芯片作为一种特殊的嵌入式微处理器系统,具有嵌入的协处理器和用于快速数据处理的并行数据通道,而且DSP在语音图像信号处理方面也具有强大功能。在嵌入式网络设备中引入DSP技术,可以使嵌入式以太网变得更快,成本更低,也更容易进行功能扩充,因此选用DSP芯片作为接口转换器的微控制器。
为提高网络通信效率,可以采用自定义的从数据链路层到应用层的网络通信协议,以适应特定场合应用的需要;如果需要,还可以编写一个自定义协议和TCP/IP互译的网关软件,实现嵌入式网络和Internet的连接。
本文介绍的接口转换器解决了车内的数字式语音通信系统的接口转换问题。
1 接口转换器的硬件设计
在设计一个嵌入式系统时,不但要考虑系统所要具备的功能,同时还要考虑价格、体积等因素。TMS320C3X[1]系列芯片是TI公司推出的浮点运算DSP芯片。由于其较高的性价比,TMS320C3X的应用极其广泛;由于将浮点运算与定点运算结合起来,具有更高的精度,并且不必考虑运算的溢出问题,因此浮点DSP具有更高的性能,更容易在系统的处理器上实现高级语言[2]。TMS320C32是TMS320系列浮点数字信号处理器的新产品,在TMS320C30和TMS320C31的基础上进行了简化和改进。在结构上的改进主要包括:可变宽度的存储器接口、更短的指令周期时间、可设置优先级的双通道DMA处理器、灵活的引导程序装入方式、可重新定位的中断向量表以及可选的边缘/电平触发中断方式等。对TMS320C32的开发可以用汇编语言,也可以用C语言。使用汇编语言的优点在于,运行速度快,可以充分利用芯片的硬件特性;但开发速度较慢,程序的可读性差。使用C语言的优势在于,编程容易、调试速度快、可读性好,可以大大缩短开发周期;但C语言对于其片内没有映射地址的特殊功能寄存器不能操作,如IF和IE、AR0~AR7等。
以太网接口芯片采用CS8900A[3]。该芯片是Cirrus Logic公司生产的一种局域网信号处理芯片,内部集成了片上RAM,其模拟前端包括曼彻斯特编解码器、时钟恢复电路、10BASE2T收发器和滤波器及一个AUI(Attachment Unit Interface)接口。CS8900A的MAC(Medium Access Control,媒体访问控制)引擎负责以太网数据帧的发送和接收、检测和处理冲突,生成和检测帧引导头(Preamble),自动生成和校验CRC(Cyclical Redundancy Check,循环冗余校验)码。芯片在网络物理层符合IEEE 802.3以太网标准,支持全双工操作,是嵌入式平台实现10 Mbps以太网连接的很好的选择方案。
接口转换器的硬件框图如图1所示。DSP作为整个硬件模块的CPU,SRAM用作外部数据存储器,Flash用于存储程序,CPLD或FPGA用于扩展DSP的对外接口控制。虚线框是可扩展的模块。
2 TMS320VC32与CS8900A的连接方法
CS8900A的20位地址线与TMS320VC32地址线低20位相连;CS8900A的16位数据线与TMS320VC32数据线低16位相连;数据总线高位使能端由A0控制。通过一片CPLD扩展TMS320VC32的外部控制功能,控制CS8900A的中断请求、复位和读写操作。TMS320VC32与CS8900A连接关系如图2所示。
设置以太网接口芯片CS8900A工作于I/O模式。通过对芯片各寄存器的操作可设置网络终端接口电路的功能和读取状态信息。
CS8900A的主要寄存器有:
LineCTL 决定CS8900A的基本配置和物理接口,设置初始值为00D3H,选择物理接口为10BASE2T。
RxCTL 控制CS8900A接收特定的数据报,设置RxTCL的初始值为0D05H,接收网络上的广播或目标地址与本地物理地址相同的正确数据报。
RxCFG 控制CS8900A接收到特定数据报后会引发接收中断,RxCFG可设置为0103H,收到正确数据报时产生接收中断。
BusCTL 控制芯片的I/O接口操作,设置初始值为8017H,打开CS8900A的中断总控制位。
ISQ 中断状态寄存器。内部映射接收状态寄存器和发送中断寄存器内容。
Port0 发送和接收数据时,CPU通过Port0传输数据。
TxCMD 发送控制寄存器。如果写入数据00C0H,那么网卡芯片在全部数据写入后开始发送数据。
TxLength 发送数据长度寄存器。发送数据时,首先写入发送数据的长度,然后将数据通过Port0写入芯片。
系统上电时,首先对CS8900A进行初始化,写寄存器LineCTL、RxCTL、RxCFG、BusCTL。发送数据时,写控制寄存器TxCMD,并将发送数据长度写入TxLength,然后将数据依次写入Port0口,数据就可以发送出去了;接收到数据时,CS8900 A将触发中断,在其中断处理程序中可以接收数据并处理。
3 接口转换器的软件设计
3.1 自定义网络协议
在嵌入式网络系统中,可以使用TCP/IP协议,但不够经济。原因是TCP/IP协议过于庞大,过于复杂,以至于效率低下。一方面是嵌入式系统各单元内部CPU的处理速度受限;另一方面,在某些特定场合特定任务的应用环境中TCP/IP功能冗余,阻碍了硬件效能的最大发挥。为此,针对特定的应用,制定相应的自定义网络协议,灵活方便,针对性强,经济实用。
下面单从数据应用的角度,定义一个简单、实用的以太网传输协议。
3.2协议层次
系统参照ISO的OSI模型,采用缩减的网络体系结构。如图3所示,网络体系结构分为3层:物理层、数据链路层和应用层。物理层规定网络的拓扑形式及通信信号的电气特性;数据链路层实现点到点的通信规程,完全执行IEEE802.3的CSMA/CD协议。
3.3 帧结构
以太网帧结构如下:
物理层的前同步码(即物理帧前导符+物理帧界定符)8字节由硬件自动生成。除去这8个字节,将其余字段的长度加起来,可以得到以太网帧的最大长度为1 518字节,最小长度则为64字节;加上8字节的前同步码,即可得到最小帧长度为576位。这样长度的帧能够保证所有冲突都可以检测到。这是因为IEEE 802.3标准中,两个站点的最远距离小于2 500 m,由4个中继器连接而成,其冲突窗口为2倍电缆传播延迟加上4个中继器的双向延迟之和,合计为51.2μs。就10 Mbps以太网而言,这个时间段内等于发送64字节(即512位)的数据。
使用CSMA/CD作为一种访问控制方式,意味着最短数据帧长度与网络上最长传输延迟时间间隔有着密切的关系。要保证在发送过程中出现冲突时,冲突域内的所有结点都应该知道发生了冲突,以便采取适当的措施。这就需要最短数据帧长度必须大于网络上的最长传输延迟时间间隔,再加上阻塞附加时间和同步延迟时间等。这就是IEEE 802.3标准中最短帧长度为64字节的由来。[4]
其中应用层帧类型分为数据帧和数据确认帧两种,具体结构如下:
由于数据帧长度可变,又由于数据确认帧的MAC层长度仅为18字节,故在网络控制器初始化时须设置MAC层PAD填充功能(即MAC帧长度少于64字节时,网络控制器自动将其填充至64字节后再交给物理层)。
自定义数据帧的预留管理单元还可以制定一些简单的控制或管理信息帧,以便更好地扩充功能和组织软件。限于篇幅,兹不赘述。如想连入Internet,需要在系统中加入一个能够转换本协议和TCP/IP协议的前端网关(实质上是一个交互翻译的软件系统)。
3.4程序设计流程
本接口转换器所要实现的功能是把从RS232串口接收到的串口数据转换成以太网帧格式发送到以太网,并把从以太网上接收到的帧数据解包转换到串口传送。程序设计中包含初始化程序、主循环、串行接口程序和网络通信接口程序。
程序运行首先进行初始化工作,包括初始化CS8900A、初始化串口和初始化一些参数,然后进入主循环。主循环内循环运行CS8900A中断服务查询程序和串口缓冲区查询程序,若有CS8900A中断申请,则中断调用网络通信接口程序;若串口缓冲区有数据,则中断调用串行接口程序。流程如图4所示。
(1)串行接口程序
串行接口程序是DSP通过16C2550向外部数据口进行数据接收、发送的程序,目的是进行数据传输。此程序包括串口发送接收程序及数据组织程序。发送和接收通过中断并发处理。整个串口发送程序在主循环中调用。其模块的流程为:
发送 收到网络串口数据→打开数据口→中断发送;
接收 中断接收→整理串口数据→发送到网络上去。发送和接收逻辑流程如图5所示。
(2)网络通信接口程序
网络接口程序是DSP通过CS8900A对系统的其他单元发送命令和接收信息的程序,目的是与系统的其他单元通信,接收与发送数据包和信令数据包。此程序包括网络数据接收程序、网络数据发送程序、数据组织程序。发送与接收服务程序流程如图6所示。
结语
该接口转换器已成功地应用于车内的数字式语音通信系统之中。结果表明,本方案成功地实现了数据的实时传输,可以给各种应用RS232串口进行数据传输的嵌入式系统的联网操作提供接口解决方案。本方案预留了升级扩展的功能。接入PCM编码器并对程序作出相应改动,可实现语音的数字化网络通信;接入A/D转换器和各种传感器可实现数据采集系统的联网。
linux操作系统文章专题:linux操作系统详解(linux不再难懂)
评论