TMS320C6416程序以太网远程更新技术研究
2014-06-30陈绍炜魏刚王子
陈绍炜 魏刚 王子
摘 要: 针对脱离调试器下,DSP远程软件维护和升级问题,从TI C6000系列DSP程序自加载原理出发,提出了一种基于简单文件传输协议(TFTP)和可用于无操作系统平台的程序远程更新方案,给出了系统软件设计结构,重点设计了程序加载更新的过程,并通过移植轻型TCP/IP协议栈(LwIP),实现了网络协议在DSP平台下的高效稳定嵌入。工程实践表明,该方案优化了网络协议对系统资源的开销,提高了DSP下以太网功能开发的灵活性,有益于系统性能的提升和改进。
关键词: 数字信号处理器; 远程加载; 轻型TCP/IP协议栈; 简单文件传输协议; TMS320C6416
中图分类号: TN711?34; TP368.1 文献标识码: A 文章编号: 1004?373X(2014)12?0125?04
Abstract:In view of remote software maintenance and update of DSP without debugger, a scheme of remote update for DSP program which is based on trivial file transfer protocol (TFTP) and can be applied to a platform without operation system is proposed according to bootloading principle of TI C6000 series DSP. A hierarchical structure of system software design laying emphasis on the procedure of program loading and updating is presented. High efficiency and stability embedding of the network protocol is realized in DSP platform by transplanting the lightweight TCP/IP stack (LwIP). Project practice indicates that the scheme optimizes the expense of system resource from network protocol, improves the flexibility of Ethernet development on DSP, and is beneficial to promote the system performance.
Keywords: DSP; remote loading; LwIP; TFTP; TMS320C6416
随着DSP在航空航天、通信、汽车电子、工业仪器仪表、图形图像处理等领域应用的不断深入,DSP软件的远程维护和升级也逐渐成为工程应用的研究热点。
文献[1]提出了一种基于以太网和TCP/IP协议的远程更新方案,给出了系统软硬件设计流程。但该文并未给出DSP下TCP/IP协议的嵌入细节,缺少具体的工程实现方法,其所设计的自加载引导过程也不能直接应用于需二次加载的C6000系列DSP。文献[2]也提出了一种基于网络的远程加载方案,文中给出了C6000系列DSP二次加载过程,但该方案的以太网功能开发基于TI提供的网络开发套件NDK(Network Developer′s Kit),仅适用于内部集成以太网控制器的DSP型号。文献[3]提出了一种基于HPI引导方式的以太网远程加载方案,但该方案要求系统必须具有主从式双DSP处理器。
本文在深入分析C6000系列DSP自加载原理的基础上,针对大部分DSP内部未集成以太网控制器,并采用ROM引导方式和不运行操作系统的应用前提,以最大限度减小以太网协议对系统的开销为原则,充分发挥LwIP协议栈可以在无操作系统平台上独立运行的优势,设计了基于LwIP协议栈内核和TFTP协议的以太网远程程序更新方案,详细地给出了系统软件设计层次和以太网协议的嵌入细节,并分析了该方案在提升系统性能上的优势。
1 系统硬件设计
本文系统硬件组成框图如图1所示。该系统以TMS320C6416为核心,通过串口完成上位机与DSP之间控制信息的交互,利用以太网口实现用户程序的远程传输。上位机采用TFTP协议将用户程序传输给远端DSP,DSP接收更新程序并将其写入FLASH指定区域,再次上电后更新程序自动被加载至片内RAM或片外SDRAM运行。TMS320C6416是由TI公司推出的高性能定点数字信号处理器,具有2个EMIF接口,64位数据宽度的EMIFA和16位数据宽度的EMIFB,共1 280 MB可分配地址的外部存储器扩展空间,可支持异步存储器(SRAM,EPRAM)和同步存储器(SDRAM,SBSRAM, ZBT SRAM,FIFO)的无缝连接。其中,EMIFA又分为4个256 MB空间,EMIFB分为4个64 MB空间[4?5]。本系统中,UART 控制器芯片[6]、FLASH芯片[7]、以太网控制器芯片[8]均使用EMIFB接口与DSP连接,并分别映射于EMIFB的CE0,CE1,CE2空间。
以太网控制器芯片选用DM9000A,其数据总线工作于16位操作模式,TMS320C6416 EMIFB接口的CE2作为DM9000A的片选信号,地址线BEA01接DM9000A的CMD引脚,故DSP访问DM9000A地址端口和数据端口的内存映射分别为0x68000000,0x68000002。
系统涉及两级外部中断:UART接收中断和DM9000A接收中断,两级中断源分别与TMS320C6416的EXT_INT4,EXT_INT7引脚相连[9]。
TMS320C6416具有可配置的设备端格式,即大端格式(Big Endian)和小端格式(Little Endian),可通过BEA20引脚上电时的电平决定。硬件设计选用小端格式作为主机字节序。
2 系统软件设计
为了方便系统软件的维护和扩展,软件设计采用模块化、层次化体系结构和设计方法,其层次结构如图2所示。硬件驱动层主要涉及各硬件模块初始化操作,使DSP能够通过EMIFB总线正确访问外设,实现DM9000A,TL16C752B的基本收发功能,从而为上层应用屏蔽底层硬件的相关细节。控制层主要负责上位机与DSP之间控制信息的交互,上位机发送程序远程更新命令并响应DSP发送的文件接收完成和FLASH烧写完成的回告信息。数据处理层主要负责将以太网口接收的更新程序写入FLASH的指定位置。引导层和以太网协议层为系统软件设计的核心,文中对其功能实现做出深入探讨。
2.1 引导层设计
TMS320C6416提供三种上电引导模式:No Boot引导、HPI引导以及EMIFB 8位ROM引导[10]。引导模式的选择由引脚BEA[19:18]上电时的电平决定。对于大部分应用,ROM引导是较为普遍的选择模式。在该引导方式下,DSP上电后位于CE1起始1 KB空间的ROM程序首先通过EDMA被复制到RAM地址0处,CPU退出复位状态后,执行地址0处的指令。当用户程序的长度超过1 KB,则需要采用二次加载方式,即首先复制并运行二次加载程序,二次加载程序将后续用户程序复制到RAM运行。
本文设计的远程加载方式如图3所示,该方式也基于ROM引导方式,但对其做出了改进。二次加载程序和用户程序之间增加了串口监控、以太网协议和FLASH编程程序,因而整个引导过程需完成三次加载:一次加载过程如前所述,二次加载将上述增加的程序复制到RAM指定区域,而用户程序的加载和运行取决于串口命令,即第三次加载。由于在引导阶段,C语言环境还未初始化, 二次加载程序只能使用汇编语言进行编程[11?13],且需编程实现以下过程:
(1) 配置EMIF总线接口以访问外部FLASH,RAM存储器,如果片内RAM空间满足程序运行要求,则可以不配置外部RAM接口。
(2) 将已经初始化的数据段从片外FLASH复制到段运行地址所描述的RAM存储区。
(3) 程序跳转至_c_int00( )函数。
要实现上述第二个过程需创建段复制表,段复制表用于描述段加载地址、运行地址以及段长度。对于non?BIOS应用,通常可通过三种方法创建段复制表:查询.map文件,使用hex转换工具的_boot参数[14],使用关联操作符LOAD_START,RUN_START,SIZE。
如以下代码所示,本设计使用关联操作符创建段复制表,首先在cmd文件中的.text段包含以上操作指令,编译链接后,变量_text_load_start为.text段的加载地址,_text_run_start为.text段的运行地址,_text_size为.text段的段长度:
LOAD_START(_text_load_start),
RUN_START(_text_run_start),
SIZE(_text_size)
更新cmd文件后,需要在二次加载代码中将上述链接参数定义为全局变量,并将这些参数添加到段复制表中,具体代码如下所示:
.global _text_size
.global _text_run_start
.global _text_load_start
COPY_TABLE:
.word _text_size
.word _text_run_start
.word _text_load_start
三次加载程序可使用C语言编写,其通过以下两个过程完成用户程序的加载和运行:
(1) 将用户程序从片外FLASH复制到片内RAM,RAM的起始地址可由用户指定,但与引导程序的运行地址不能重叠。
(2) 跳转至用户程序的_c_int00( )函数。用户程序运行的入口地址并非是步骤(1)中所指定的RAM起始地址,而是_c_int00( )函数的入口地址,程序需跳转至该地址处运行,具体实现如下所示:
run=(void(*)())NewprogramRun;
(*run)();
其中,NewprogramRun为用户程序_c_int00( )函数入口地址的宏定义。
2.2 以太网协议层设计
本系统以太网功能的开发受限于两个前提条件:DSP可能不运行操作系统;作为DSP上电启用的引导程序其对系统内存资源的开销不能过大。因此,本系统以太网协议软件设计基于LwIP协议栈。LwIP是TCP/IP协议一种独立、简单的实现,它在保证嵌入式系统拥有完整TCP/IP功能的同时,又能减少协议栈对系统资源的消耗,并能在无操作系统平台下独立运行。
结合本系统的实际应用需求,DSP与上位机之间为点对点传输,传输数据量较小,因此DSP采用静态IP地址,不启用DHCP功能,传输层使用UDP协议,应用层采用TFTP协议以进一步减小DSP的内存开销。
LwIP提供三种用户编程接口方式:raw/callback API,sequential API和BSD?style socket API[15]。由于sequential API和BSD?style socket API的实现要求应用程序必须支持多线程,而本系统的DSP平台不运行操作系统,故选用raw/callback API编程方式。在该编程方式下,应用程序与协议栈内核函数直接交互,用户通过向协议栈内核注册回调函数并直接调用内核操作函数来实现编程。本文中LwIP在TMS320C6416上的移植过程如图4所示。
(1) 确立内核参数。协议栈所有内核参数在opt.h文件中设定,本文结合系统实际功能需求在lwipopts.h文件中对其进行了重新配置,实现了协议栈的功能裁剪,包括内存字节对齐方式,内存堆大小,协议控制块的类型、数目、大小以及启用或屏蔽某些宏定义等。设计中通过以下几条宏定义分别禁用了操作系统、DHCP功能以及TCP协议内核:
#define NO_SYS 1
#define LWIP_DHCP 0
#define LWIP_TCP 0
(2) 移植头文件。cc.h头文件定义了协议栈内部所使用的数据类型,以及不同编译器特性下结构体封装宏。针对TMS320C6416所支持的数据类型和本设计所使用的CCS编译器,在该文件中进行了数据类型的修改匹配,同时对结构体封装宏进行了重新定义:
#define PACK_STRUCT_BEGIN
#define PACK_STRUCT_STRUCT
#define PACK_STRUCT_END
#define PACK_STRUCT_FIELD(x) x
cpu.h头文件定义了字节序,字节序可配置为大端格式或小端格式。由于TMS320C6416的端格式与硬件配置有关,因此软件设置与硬件配置需严格一致。本系统DSP硬件选择小端格式,而网络字节序采用大端格式,通过此处的宏定义,协议内部的字节转换函数将自动进行字节序转换。
(3) 移植网卡驱动。网卡驱动的移植是整个移植工作的核心,通过对ethernetif.c文件中的以下三个函数进行修改,使协议栈与DM9000A驱动程序相切合,从而准确调用网卡初始化函数、发送函数和接收函数。
low_level_init(struct netif *netif)
low_level_input(struct netif *netif)
low_level_output(struct netif *netif, struct pbuf *p)
其中low_level_init函数完成网卡的初始化;low_level_input函数从网卡的SRAM中读取数据,并将数据封装成pbuf结构以供内核使用;low_level_output函数则将由pbuf结构组成的链表中的上层数据包通过网卡发送至物理链路。
(4) 注册用户回调函数。本设计中的用户回调函数即为以太网应用层TFTP协议程序的入口函数,该函数在协议栈初始化阶段的udp_recv(UDPpcb, recv_callback_tftp, NULL)函数中注册,并在udp_input(struct pbuf *p, struct netif *inp)函数中回调,其中recv_callback_tftp即为回调函数。在回调函数的功能设计中,DSP工作于TFTP服务器模式,上位机工作于TFTP客户端模式,上位机以向DSP写文件的方式实现文件的上传。为了减小系统开销,在TFTP协议程序的编写中,只保留了客户端向服务器写功能(上传),而裁剪了客户端向服务器读功能(下载)。
3 系统可靠性、稳定性分析
系统可靠性重点体现在文件传输、烧写的完整性和准确性。由于本系统采用点对点的有线传输,而且传输数据量较小,TFTP协议自身的传输回告和确认功能足以保障数据传输的完整性,准确性则可由DM9000A的CRC校验功能及IP协议首部校验机制予以保证。在FLASH编程过程中,通过查询操作状态位来判断相应动作是否成功,及时对失败操作做出处理,确保文件烧写的准确性。当出现传输、烧写异常,串口将返回错误诊断信息,请求PC再次进行传输。
在系统软件调试阶段,程序有可能出现因内存分配失败或溢出而陷入死循环或返回错误信息,此时需要对协议栈内核参数再次进行调整,通过试验各种方案,找到系统性能和开销的平衡点。
在以太网传输实验中,PC IP地址设定为192.168.0.7,DSP IP地址设定为192.168.0.8,端口号为69。文件上传过程中捕获的网络数据包如图5所示。该图完整的反映了一次文件传输过程中PC与DSP之间数据包的交互过程,图中编号为2的数据包显示了DSP网卡DM9000A的厂商、地址信息;编号为3的数据包显示了用户程序文件的名称,即TEST_LED.bin,使用.bin格式传输的原因见文献[1]。
实验表明,基于LwIP协议栈的TFTP协议能够实现用户程序的完整、准确传输,无连接失败和丢包问题出现。经过功能裁剪和调整后的以太网协议程序占用DSP的内存较小,而且性能较为稳定。串口控制灵活可靠,FLASH 编程准确无误,再次上电后,更新后的用户程序能够正确运行。
4 结 语
本文提出基于以太网的DSP远程程序更新方案,能实现DSP软件远程升级和维护,有效解决极端条件下DSP程序更新问题,进一步拓展DSP工程应用领域。该方案所设计的DSP三次加载技术及以太网传输技术在工程实践中得到了良好验证,具有较好的工程应用价值。
参考文献
[1] 王敏,黄战华,孙秋实,等.DSP系统程序远程更新的研究与实现[J].计算机工程与应用,2012,48(8):109?111.
[2] 左颢睿,刘永清,张傲华,等.基于以太网的DSP远程加载技术研究[J].单片机与嵌入式系统应用,2012(5):24?26.
[3] 李文禄,蒋宇中.一种基于以太网的TMS320C6713B 程序加载技术[J].海军工程大学学报,2008,20(6):35?39.
[4] Texas Instruments. TMS320C6414, TMS320C6415, TMS320
C6416 fixed?point digital signal processors SP?RS146N [R]. USA: Texas Instruments, 2005.
[5] Texas Instruments. TMS320C6000 DSP external memory interface (EMIF) reference guide SPRU266E [R]. USA: Texas Instruments, 2008.
[6] Texas Instruments. TL16C752B 3.3?V dual UART with 64?BYTE FIFO data sheet [R]. USA: Texas Instruments, 2000.
[7] Silicon Storage Technology, Inc. 2Mbit/4Mbit/8Mbit (x16) multi?purpose flash data sheet [R]. USA: Silicon Storage Technology, Inc, 2002.
[8] Davicom Semiconductor, Inc. DM9000A Ethernet controller with general processor interface data sheet[R]. Taiwan, China: Davicom Semiconductor, Inc, 2006.
[9] Texas Instruments. TMS320C6000 DSP general?pur?pose input/output (GPIO) reference guide SPRU584A [R]. USA: Texas Instruments, 2004.
[10] Texas Instruments. TMS320C6000 boot mode and emulation reset SPRA978 [R]. USA: Texas Instruments, 2003.
[11] Texas Instruments. Creating a second?level bootloader for flash bootloading on TMS320C6000 platform with code composer studio SPRA999A1 [R]. USA: Texas Instruments, 2006.
[12] Texas Instruments. TMS320C6000 programmers guide SPRU198K [R]. USA: Texas Instruments, 2011.
[13] 郑红,刘政强,李振.嵌入式DSP应用系统设计及实例剖析[M].北京:北京航天航空大学出版社,2012.
[14] Texas Instruments. TMS320C6000 assembly languagetools user′s guide SPRU186W [R]. USA: Texas Instruments, 2012.
[15] 朱升林,粟思科.嵌入式网络那些事:LwIP协议深度剖析与实战演练[M].北京:中国水利水电出版社,2012.
C6416 fixed?point digital signal processors SP?RS146N [R]. USA: Texas Instruments, 2005.
[5] Texas Instruments. TMS320C6000 DSP external memory interface (EMIF) reference guide SPRU266E [R]. USA: Texas Instruments, 2008.
[6] Texas Instruments. TL16C752B 3.3?V dual UART with 64?BYTE FIFO data sheet [R]. USA: Texas Instruments, 2000.
[7] Silicon Storage Technology, Inc. 2Mbit/4Mbit/8Mbit (x16) multi?purpose flash data sheet [R]. USA: Silicon Storage Technology, Inc, 2002.
[8] Davicom Semiconductor, Inc. DM9000A Ethernet controller with general processor interface data sheet[R]. Taiwan, China: Davicom Semiconductor, Inc, 2006.
[9] Texas Instruments. TMS320C6000 DSP general?pur?pose input/output (GPIO) reference guide SPRU584A [R]. USA: Texas Instruments, 2004.
[10] Texas Instruments. TMS320C6000 boot mode and emulation reset SPRA978 [R]. USA: Texas Instruments, 2003.
[11] Texas Instruments. Creating a second?level bootloader for flash bootloading on TMS320C6000 platform with code composer studio SPRA999A1 [R]. USA: Texas Instruments, 2006.
[12] Texas Instruments. TMS320C6000 programmers guide SPRU198K [R]. USA: Texas Instruments, 2011.
[13] 郑红,刘政强,李振.嵌入式DSP应用系统设计及实例剖析[M].北京:北京航天航空大学出版社,2012.
[14] Texas Instruments. TMS320C6000 assembly languagetools user′s guide SPRU186W [R]. USA: Texas Instruments, 2012.
[15] 朱升林,粟思科.嵌入式网络那些事:LwIP协议深度剖析与实战演练[M].北京:中国水利水电出版社,2012.
C6416 fixed?point digital signal processors SP?RS146N [R]. USA: Texas Instruments, 2005.
[5] Texas Instruments. TMS320C6000 DSP external memory interface (EMIF) reference guide SPRU266E [R]. USA: Texas Instruments, 2008.
[6] Texas Instruments. TL16C752B 3.3?V dual UART with 64?BYTE FIFO data sheet [R]. USA: Texas Instruments, 2000.
[7] Silicon Storage Technology, Inc. 2Mbit/4Mbit/8Mbit (x16) multi?purpose flash data sheet [R]. USA: Silicon Storage Technology, Inc, 2002.
[8] Davicom Semiconductor, Inc. DM9000A Ethernet controller with general processor interface data sheet[R]. Taiwan, China: Davicom Semiconductor, Inc, 2006.
[9] Texas Instruments. TMS320C6000 DSP general?pur?pose input/output (GPIO) reference guide SPRU584A [R]. USA: Texas Instruments, 2004.
[10] Texas Instruments. TMS320C6000 boot mode and emulation reset SPRA978 [R]. USA: Texas Instruments, 2003.
[11] Texas Instruments. Creating a second?level bootloader for flash bootloading on TMS320C6000 platform with code composer studio SPRA999A1 [R]. USA: Texas Instruments, 2006.
[12] Texas Instruments. TMS320C6000 programmers guide SPRU198K [R]. USA: Texas Instruments, 2011.
[13] 郑红,刘政强,李振.嵌入式DSP应用系统设计及实例剖析[M].北京:北京航天航空大学出版社,2012.
[14] Texas Instruments. TMS320C6000 assembly languagetools user′s guide SPRU186W [R]. USA: Texas Instruments, 2012.
[15] 朱升林,粟思科.嵌入式网络那些事:LwIP协议深度剖析与实战演练[M].北京:中国水利水电出版社,2012.