陶春荣,游新望,秦 雅
(中国船舶重工集团公司第七二四研究所,南京 211153)
TMS320F2833x(以下简称F2833x)是德州仪器公司(TI)推出的支持高性能集成外设的32位微控制器,广泛应用于实时控制领域。该系列芯片一般通过JTAG接口进行软件程序的加载,能够满足调试需求,但在进行现场软件的升级时可能存在现场环境恶劣难以到达、结构件拆卸困难等问题。所以,研究基于远程控制的DSP芯片网络加载方法可提高程序更改升级的便利性和灵活性,具有重要的实用和推广价值。
F2833x系列DSP集成了大量的外设供控制使用,具有改进的哈佛结构,还兼有RISC处理器的代码密度和DSP的执行速度,其最高主频可达150 MHz,内部集成了一个单精度浮点单元,并配置了一定容量的闪存(FLASH),可用于DSP程序的存储及执行。该系列芯片支持软件引导模式,通过引脚配置可以实现SCI、SPI、CAN、I2C、McBSP、XINTF和并行I/O等加载方式。
本文设计了一种基于TM4C129x系列ARM芯片的网络加载方法。通过SCI-A口将TM4C129x芯片与F2833x连接,采用了SCI-A的引导模式,并结合F2833x的Bootloader实现其网络在线烧写和加载,进行了具体的硬件设计、TM4C129X软件设计、二次引导程序设计及上位机程序设计,实现了F2833x芯片程序的网络加载升级功能。
F2833x系列DSP内部都固化了ROM存储器。ROM资源里包含了Bootloader程序。Bootloader程序在系统通电后能自动将存放在外部载体的用户代码引导到FLASH存储器的任何空间或片内SARAM中。对于F2833x系列DSP来说,当上电复位后,芯片自动运行引导加载程序。该程序将判断GPIO84~87引脚的电平状态,根据引脚电平状态选择相对应的引导方式,然后引导加载程序将外部的程序加载到芯片内部的SARAM中,最后根据引导加载程序指定的程序入口地址在片内SARAM中运行相应的程序,完成芯片的引导启动。
F2833x上电后,首先处于复位状态,当复位引脚置高时器件退出复位状态,器件从复位向量(0x3FFFC0)处开始运行。该处存放着BootROM的初始引导程序InitBoot程序的入口地址。InitBoot程序是由厂家固化到BootROM中的。此时,程序跳转到0x3FFC00处运行InitBoot程序。该程序首先读取安全保护模块的密码,然后初始化例程调用模式选择功能函数(SelectBootMode)。该函数根据GPIO引脚84~87的状态确定DSP的引导方式,引导方式与控制引脚间的关系见表1。上电复位后,默认使能这4个GPIO引脚内的上拉功能。此时,必须设定好相应控制引脚的电平状态,在引导加载程序中将会对相应的引脚电平进行采样,之后决定进入何种引导方式。SCI、SPI、并行引导等几个启动模式还需要进一步调用Bootloader搬移程序。一旦完成SelectBootMode将会把入口地址返回给初始化引导程序(InitBoot),然后初始化引导程序调用恢复CPU寄存器的退出例程(ExitBoot)并退出到由引导模式确定的程序入口地址,从而完成硬件引导进入用户程序引导并开始运行用户程序。
表1 引导模式与控制引脚的关系
从F2833x引导模式可以看出,由于该芯片本身不具备网络引导的功能,所以要完成程序的网络烧写及加载需要具备下面两个条件:
(1) 需要有一块具备网络接口和SCI、I2C、CAN等数字接口的MCU来实现网络通信,以及对F2833x的引脚控制和数据加载工作。
(2) 需要制作专用的二次引导程序,以此来实现F2833x与MCU的数字通信,以及对其内部的FLASH进行烧写的工作。
只有具备了上述两个条件才能实现F2833x的网络烧写、加载功能。因此,本方案采用了TI公司的TM4C129x芯片作为网络加载的主控MCU。该芯片采用的是ARM-M0结构,具备以太网、USB、CAN、I2C、SCI的丰富的电路接口功能,同时在该芯片上可以运行TI公司专用的实时操作系统。该芯片功能强大到完全可以满足与上位机的以太网通信,以及对F2833x的引脚控制和数据交互功能,从而实现F2833x的网络烧写、加载功能。在本方案中F2833x采用的是SCI-A引导模式。这种异步串口引导模式具有实现简单、稳定可靠的特点。
F2833x的SCI引导模式采用的是异步方式从SCI-A端口将代码引导到F2833x中。这种方式使用的是8位的数据模式。F2833x通过SCI-A口同主机进行通信,其波特率自动检测功能可以用来锁定主机的通信速率。当完成通信速率锁定后F2833x和主机开始进行数据传输。每接收到一帧主机传来的8位数据,F2833x都会将此帧8位数据再返回给主机。通过这种方式,主机可以检验F2833x接收到的字符与发送的字符是否一致,从而保证通信数据的完整性。SCI-A的引导流程图如图1所示。
图1 SCI-A引导流程图
根据F2833x引导流程要实现该芯片引导模式的变化需要GPIO84~GPIO87,以及复位管脚这5根控制管脚的共同作用。本文采用的是SCI-A的引导模式。因此,主控的MCU不仅要控制这5根控制管脚,而且还需要异步串口与F2833x相连接从而完成对F2833x的数据流控制及传输。电路设计图如图2所示。
图2 硬件电路示意图
由于TM4C129x接口丰富,包含有多路物理GPIO端口和多路UART异步串行数据总线接口,其每个物理GPIO端口均可编程为输入/输出管脚。在本方案中采用TM4C129x芯片的GPIOA3~GPIOA7端口作为控制管脚与F2833x的5根控制管脚相连接,采用UART0接口与F2833x的SCI-A接口相连,以此来实现对DSP引导模式的控制及程序的加载。利用TM4C129x的以太网控制器实现与上位机的网络通信,通过专用上位机软件来实现对DSP的引导及程序加载。
2.2.1 TM4C129x软件设计
TM4C129x主要完成从网络接收上位机发来的网络加载命令及需要加载的程序。为了确保加载程序在网络传输中不发生丢帧等错误,TM4C129x与上位机采用的是可靠的TCP协议进行通信。接收到上位机的网络加载命令后TM4C129x通过5根控制管脚控制F2833x进入到SCI-A引导模式,然后TM4C129x将二次引导程序通过SCI-A口加载到F2833x中。加载完毕后复位F2833x让其运行加载好的二次引导程序。二次引导程序将与TM4C129x进行SCI-A串口的握手通信。握手成功后TM4C129x将上网机发来的需要加载的程序通过SCI-A串口传输到F2833x中。传输完成后F2833x的二次引导程序将进行对F2833x内部FLASH空间的擦除及重新烧写接收到的加载程序工作。上述工作完成后,F2833x通过串口发送加载完成信号。这时,TM4C129x将控制管脚置为FLASH引导状态,同时复位F2833x完成对其的网络加载。
2.2.2 二次引导程序设计
从F2833x的引导方式可以知道,SCI-A引导模式只能实现从外部加载程序到F2833x内部并开始运行,并不能实现将程序烧写到F2833x的FLASH内。若要实现在线的FLASH烧写必须采用二次引导的模式,即编写一段二次引导程序。该程序可以实现F2833x与TM4C129x的数据通信功能,同时能将接收到的加载数据按照F2833x的指定格式烧写到其内部相应的FLASH空间中去。通过阅读F2833x的数据手册发现TI公司提供了在线烧写F2833x内部FLASH的API函数。利用该函数可以实现在线烧写F2833x程序的功能。二次引导程序首先初始化F2833x的时钟,然后配置其SCI-A串口(实现与TM4C129x的通信),随后等待TM4C129x的握手信号。收到握手信号后发送握手成功信号至TM4C129x,然后等待TM4C129x的烧写命令。当接收到烧写命令后F2833x将先接收需要烧写的加载程序,而后调用烧写FLASH的API函数擦除FLASH的相应区块并完成最终的加载程序烧写。具体的程序流程如图3所示。
图3 二次引导程序流程图
二次引导程序在设计中有几个需要特别注意的要点:
(1) 二次引导程序在配置编译所需的CMD文件时需要将其工作模式配置成RAM工作模式,因为只有这样专用的烧写FLASH的API函数才能正常运行,否则会无法完成对FLASH的正常烧写。
(2) 在需要烧写的加载程序的CMD文件的地址空间分配应与二次引导程序设定的烧写地址相匹配,否则会产生烧写成功但无法正常实现FLASH引导的问题。
(3) 在二次引导程序中一定要注意对CSM区块的检查及保护。因为该区块是F2833x的保护区块,一旦被烧写了数据便会造成F2833x内部FLASH的锁死保护。如果不知道烧写数据的内容,F2833x芯片将无法再次进行FLASH的烧写,从而造成芯片的报废。
(4) 二次引导程序是由TM4C129x通过F2833x的SCI-A引导模式加载到F2833x并运行的,因此这段程序是以SCI-A引导模式的数据格式存储在TM4C129x内部的,而F2833x编译完成的数据格式无法直接用在SCI-A引导模式上,需要利用TI公司提供的hex2000软件将其转换成标准SCI-A引导格式后才能使用。
2.2.3 上位机程序设计
上位机程序采用Visual C++编制而成的,主要是完成对TM4C129x的网络地址扫描,与TM4C129x建立起TCP连接,发出相关的控制指令,控制TM4C129x对F2833x进行相关的操作(CSM保护块检查、FLASH区块擦除等操作),将需要加载的程序通过TCP连接传输到TM4C129x上从而实现对F2833x的网络加载和烧写。该程序采用的是多进程的体系架构,由独立的通信进程负责网络数据的传输,从而避免了单一进程大数据量传输时界面会假死的现象。同时,为了保证传输数据的一致性,上位机程序与TM4C129x采用的是带数据校验的传输模式。传输的每帧数据均会回传给上位机进行数据校验,当出现数据不一致时将会给出报错信息,进一步对传输的数据起到了保护作用。
通过上述方法可实现对F2833x的网络加载和烧写,只需要一台上位机通过一根网线就可以实现对F2833x的程序更新。该方法已经在多型产品的伺服控制平台上使用,应用稳定可靠、效果良好,进一步改善了调试环境并简化了调试步骤,具有很好的实际应用和推广价值。