基于DSP+ARM架构的协议转换器设计
摘 要: 介绍基于DSP+ARM架构协议转换器的系统组成及其工作原理,给出了DSP通过EMIF接口与FPGA无缝连接的接口实现,DSP通过HPI接口与ARM高速接口的实现,以及基于ARM的高速以太网接口。简要介绍了基于嵌入式操作系统Clinux的网络编程,给出了实验结果。
关键词: 数字信号处理器;ARM;主机接口;外部存储器接口;嵌入式系统
在测试飞行控制组件时,遥测接收设备离信息处理中心较远,而被测数据量又极大,如果采用传统的专线传输遥测数据,则传输时间需几个小时,无法满足快速处理的要求。因此,需要研制一种协议转换器,用来完成被测数据无损、实时、远距离地与远程上位机进行通信,并能接收上位机的控制指令,实现工作状态的远程交互,而测试人员通过上位机的人机界面就可以完成所有测试。
1 系统组成及工作原理
考虑到系统实时性和可靠性的要求,选择以太网口作为协议转换器与远程上位机的数据转发接口、以高速串口作为控制口的通信方式,采用DSP+ARM架构的硬件解决方案。系统框图如图1所示。基本工作原理:FPGA作为数据预处理器,完成并行数据到串行数据的转换等数据预处理任务;DSP读取FPGA处理后的数据并完成数据压缩;ARM作为中央处理控制器,主要从DSP系统中读取已经编码的数据并通过以太网完成与上位机实时通信的任务。上位机按照数据传输协议、产品的数据遥测协议解调出各类物理变量,记录并存储。测试人员通过上位机完成工作状态的远程设置与查询信息交互的任务。
2 硬件设计
2.1 TMS320C6416及其外围电路设计
DSP芯片选用TI公司的TMS320C6416。这是TI公司推出的高速定点DSP,它拥有处理能力强大的CPU、高达1 MB的RAM及丰富的外设接口。外设包括为CPU访问外围设备提供无缝接口的灵活的外部存储器接口EMIFA和EMIFB,一个使得DSP很容易通过PCI接口无缝连接到具有PCI功能的外部主CPU上的PCI接口,一个16/32 bit宽的异步并行接口HPI(和PCI共用相同的引脚),一个提供64 bit数据通道访问的增强型EDMA等。TMS320C6416采用3.3 V和1.4 V电源供电,其中I/O采用3.3 V电源供电,内核采用1.4 V电源供电。TMS320C6416有符合IEEE1149.1标准的JTAG标准测试接口及相应的控制器,从而可以通过仿真器把DSP系统与PC机相连,进行在线调试[1]。
2.1.1 DSP与SDRAM、Flash的接口电路
DSP处理器TMS320C6416对外有2个EMIF总线接口,分别是宽64 bit的EMIFA和宽16 bit的EMIFB。EMIFA接口具备与8、16、32、64 bit系统接口的功能,EMIFB接口端口支持8 bit和16 bit系统。EMIFA分成ACE0~ACE3四个存储空间,每个存储空间可以独立配置,无缝连接多种类型的存储器(如SRAM、Flash RAM、DDR RAM)。
为了提高系统运行速度,外扩两片SDRAM芯片作为程序的运行空间、数据及堆栈区。SDRAM 芯片选用同步存储器MT48LC2M32B2TG,其容量为2 M×32 bit。TMS320C6416通过EMIFA接口实现与两片SDRAM芯片的无缝连接。
TMS320C6416内部没有Flash存储器,为了形成独立的系统,采用外部扩展Flash存储器AM29LV400B存储程序。系统复位时,从Flash中加载程序。TMS320C6416通过EMIFB接口实现与Flash芯片的无缝连接。
2.1.2 DSP与FPGA的接口电路
由于DSP处理器TMS320C6416的采样速度及存储空间受到自身约束限制,所以数据的采集、流向控制和数据预处理等任务由FPGA完成。FPGA芯片选用Xilinx公司低成本现场可编程门阵列Spartan-3E系列中的XC3S500E。XC3S500E芯片集成有20个Block RAM,每个RAM块中的18 Kbit的模块存储器是完全同步、真正的双端存储器。用户可独立地从每个端口读出或向每个端口写入(但同一地址不能同时进行读和写)。另外,每个端口都有一个独立的时钟,并且对每个端口的数据宽度都可以独立进行配置。
在该协议转换器中,DSP通过EMIFA接口连接到FPGA,实现DSP与FPGA Block RAM的无缝连接,从而使得DSP与FPGA之间的通信问题转化为DSP对其EMIFA外设的访问,达到了提高系统实时性的目的。为了保持FPGA与DSP之间的同步,FPGA的时钟直接由DSP内部的锁相环提供。DSP处理器TMS320C6416与FPGA的接口示意图如图2所示[2]。
2.2 S3C4510B及其外围电路设计
ARM芯片选用Samsung公司的S3C4510B。S3C4510B是基于以太网应用的高性价比16/32 bit RISC微控制器,内含一个由ARM公司设计的16/32 bit ARM7TDMI RISC处理器核。S3C4510B 提供了一套比较完整的通用的外围设备,从而使得整个系统消耗最小。正是因为它具有很多常用的功能模块,所以也免去了添加配置附加设备的麻烦。芯片上集成的功能主要包括以下几个方面[3]:3.3 V ARM内核和3.3 V外部I/O,具有50 MHz时钟频率的微处理器;8 KB的Cache/SRAM;一个10/100 Mb/s以太网控制器,MII接口;2个HDLC通道,每个通道可支持10 Mb/s;2个UART通道,2个DMA通道,2个32 bit定时/计数器;1个通道IIC接口,18个可编程I/O口;中断控制器,支持21个中断源,包括4个外部中断;支持SDRAM、SRAM、Flash等;具有扩展外部总线和JTAG接口,支持软件开发及硬件调试。
本设计选用ARM微控制器S3C4510B是因其集成有以太网控制器和极强的外围扩展能力。S3C4510B以及其外围芯片Flash、SDRAM组成了整个系统的核心,负责控制和协调各模块工作,并实现与远程上位机的以太网通信。本设计对S3C4510B内部SDRAM和ROM进行了扩充。采用两片SDRAM芯片HY57V641620并联构建32 bit的SDRAM存储系统;采用一片Flash芯片HY29LV160构建16 bit的Flash存储器系统。
2.2.1 ARM与DSP的接口电路
由于ARM微控制器要实现整个系统的协调控制和网络功能,DSP处理器要执行复杂计算,因此需要实现ARM和DSP之间的数据交换。从某种程度上来说,ARM和DSP之间数据交换的速度决定了整个系统的运行速度和性能。
DSP处理器TMS320C6416集成了一个16/32 bit宽的主机接口HPI,HPI通过复位时的自举和器件配置引脚HD5选择采用HPI16或HPI32。HPI具有两条地址线HCNTRL[1:0],负责对HPI的内部寄存器寻址。HPI只有三个32 bit内部寄存器,分别是控制寄存器HPIC、地址寄存器HPIA和数据寄存器HPID。只需对上述三个寄存器进行相应的读写操作,就能完成对DSP内存空间的访问。
由于ARM微控制器S3C4510B中没有完全符合DSP处理器TMS320C6416 HPI接口时序的外部接口可以直接使用,因此选用S3C4510B中时序最接近HPI接口时序的外部I/O接口与TMS320C6416进行连接。TMS320C6416与S3C4510B的接口示意图如图3所示。由图3可知,TMS320C6416与S3C4510B通过单独的32 bit数据线HD0~HD31和8条控制线进行连接。S3C4510B通过HPI访问DSP内部的RAM以及其他一些外部资源。在整个ARM与DSP通过HPI进行通信和数据交换的过程中,除了中断ARM和清除ARM发过来的中断需要DSP本身参与外,其他操作中DSP都处于被动地位。所以对于ARM来说,DSP就相当于一片外接的SDRAM。
2.2.2 以太网接口电路
ARM微控制器S3C4510B内嵌一个以太网控制器,支持媒体独立接口MII(Media Independent Interface)和带缓冲DMA接口(Buffered DMA Interface)。可在半双工或全双工模式下提供10 /100 Mb/s的以太网接入。在半双工模式下,控制器支持CSMA/CD协议,在全双工模式下支持IEEE802.3 MAC控制层协议。因此,S3C4510B内部实际上已包含了以太网MAC控制,但并未提供物理层接口,所以采用RTL8201作为以太网的物理层接口。信号的发送和接收端TPRX+、TPRX-、TPTX+、TPTX-应通过网络隔离变压器和RJ45接口接入传输媒体[4]。以太网接口示意图如图4所示。
3 系统软件设计
由于需要ARM微控制器S3C4510B实现整个系统的协调控制和网络功能,因此在S3C4510B上移植了嵌入式操作系统μClinux。μCLinux是一个带有完整TCP/IP协议的操作系统,在μCLinux中加入实时RT-Linux模块以满足对嵌入式操作系统的实时性要求,并根据需要对μCLinux系统进行了裁剪。
在网络通信中,基于TCP/IP协议的通信方式有很多,本文选用Socket实现服务器端和客户端的数据通信。Socket是建立在传输层协议上的一种套接字规范,它定义了两台计算机间进行通信的规范。套接字屏蔽了底层通信软件和具体操作系统的差异,使得任何两台安装了TCP协议软件和实现了套接字规范的计算机之间的通信成为可能。在开发?滋CLinux系统下的套接字程序时,采用了TCP套接字,因为它提供了一种可靠的面向连接的数据传输方法,有检错和纠错机制,并且不管对单个数据报还是数据包,它都提供一种流式数据传输方式。服务器首先启动并进行初始化操作,通过调用函数socket()创建一个套接字,然后调用函数bind()将该套接字和本地网络地址绑定在一起,再调用函数listen()将该套接字转换成倾听套接字,之后调用函数accept()来等待接收客户的请求。客户在调用函数socket()建立套接字后就可以调用函数connect()与服务器建立连接。连接一旦建立,客户端和服务器端之间就可以通过调用函数read()和write()进行通信,待数据传送结束以后,双方调用函数close()关闭套接字[5]。
通过对系统进行联合调试,实现了被测数据无损、实时、远距离与远程上位机进行通信并能接收上位机的控制指令,实现工作状态远程交互的任务。测试人员通过上位机可以对遥测数据进行编辑,并随时可以查看接收数据的正确与否。
本文详细介绍了基于DSP+ARM架构的协议转换器的设计实现。提供了详细的硬件平台结构设计方案,阐述了基于嵌入式系统的网络编程的实现方法。根据本方案实现的协议转换器具有低成本、低功耗、通用性好、功能可升级扩展等优点。
参考文献
[1] TI.TMS320C6416 datasheet[EB/OL].http://www.TI.com,2001.
[2] 赛灵思公司.使用EMIF将Xilinx FPGA与TI DSP平台接口应用指南[EB/OL].www.xilinx.com.cn,2007.
[3] 李驹光.ARM应用系统开发详解[M].北京:清华大学出版社,2004.
[4] Realtek.RTL8201 Datasheet[EB/OL].http://www.realtek.com.
[5] 孙天泽,袁文菊,张海峰.嵌入式设计及Linux驱动开发指南[M].北京:电子工业出版社,2005.
暂无评论