基于CAN 总线的DSP28335 在线烧写方法研究

2019-04-11 05:21周洋洋赵昶宇
科技与创新 2019年6期
关键词:上位总线代码

周洋洋,赵昶宇

(1.海军驻天津地区兵器设备军事代表室,天津 300308;2.天津津航计算技术研究所,天津 300308)

1 引言

DSP28335 是用于实时信号处理的微处理器,具有浮点运算功能,它接口丰富,控制精度高,且预算速度快,因此广泛应用于嵌入式系统的各个领域。通常将芯片的内部存储区分为引导程序区、运行程序区和下载区3 个部分。芯片接收到下载命令后,进入引导区运行引导程序,在引导程序下将用户应用程序代码内容下载到下载区,下载完毕并校验通过后再将下载区的内容复制到运行程序区,运行复位程序,完成Flash 的在线烧写。

本文以DSP28335 为例,提出一种基于CAN 总线的DSP在线烧写的方法,避免了在升级程序时因拆卸控制器带来的各种问题,降低了设备的维护成本。

2 FLASH 程序引导流程

DSP28335 自带FLASH 存储器,在代码运行前,将代码从FLASH 中拷贝到RAM 中运行,能够显著提高程序的运行效率。用户编写的应用程序固化到非易失性存储器FLASH 中,系统每次上电复位后,便开始运行FLASH 程序引导流程,具体流程为:调用InitBoot 函数把器件初始化成C28X 工作模式;然后调用SelectBootMode 函数,检测相应GPIO 引脚的电平状态,判断为FLASH 引导模式;引导结束后PC 指针将跳转至FLASH 中0x33FFF6 地址单元处,并执行其中的代码,用户需要在该地址存放一条指令;最后执行跳转指令将会跳转到C 环境初始化函数c_int00,只有当c_int00 运行后,才开始执行Main()函 数。

3 在线烧写软件设计

DSP28335 的在线烧写软件部分主要是由上位机端软件和DSP 端软件构成。

上位机端软件主要完成读取可执行代码文件,进行格式转换后将该文件通过CAN 总线发送给DSP 端,等待DSP端的响应。

DSP 端软件主要完成和上位机端软件的握手,接收上位机端软件发送的可执行代码文件,并将该文件立即烧写到FLASH 中,完成烧写过程;此外DSP 端还需实现bootloader程序的功能。

基于DSP28335开发的应用程序经过CCS编译生成的目标文件类型为.out 文件,而DSP28335 无法识别该文件类型,需要通过hex2000.exe 工具将.out 文件转换成DSP28335 可以识别的二进制数据流文件。

3.1 上位机端软件设计

上位机端软件首先读取.hex 文件,通过解析.hex 文件内容,将其拆分为多条数据帧结构。上位机端软件与DSP 端软件通过CAN 总线进行通讯。

上位机端软件向DSP 端软件发送的每帧数据都带有校验和,当DSP 端程序接收到该帧数据后,通过校验和对接收数据进行确认。确认完毕后,DSP 端软件将确认帧发送给上位机端软件,上位机端软件收到DSP 端发送的确认帧后,再向DSP 端软件发送下一帧数据;当上位机软件将全部数据发送完毕后,上位机端软件向DSP 端软件发送数据的总长度,DSP 端软件将该总长度与接收到的数据长度进行比较,将比较结果发送给上位机端软件,完成了整个数据的总校验。

3.2 DSP 端软件设计

DSP 端软件主要包括引导程序和用户应用程序,前者不仅用来和上位机软件进行CAN 总线通讯接收DSP 程序可执行代码文件,并将接收到的可执行代码文件烧写到FLASH中,而且会在系统上电复位后会判断是执行FLASH 烧写工作还是运行用户应用程序工作;后者是用来和上位机软件进行CAN 总线通讯接收DSP 程序可执行代码文件,并将接收到的可执行代码文件烧写到FLASH 中。

为保证接收数据的准确性和完整性,DSP 端软件在接收数据的过程中,不执行对RAM 或FLASH 操作的相关代码;同时,关闭其他的外部中断,仅响应CAN 总线接收中断,保证了数据接收的实时性。此外,DSP 端软件将接收到的数据存储在外扩的FLASH 中,等接收完全部数据后,再进行程序的烧写,防止在接收数据过程中出现意外而导致系统程序不能正常工作。

FLASH 的烧写工作也是DSP 端软件需要实现的重要功能。在擦除或读写FLASH 之前,必须先执行相应的命令字序列,即在指定的FLASH 地址处写入指定的指令代码。

向FLASH 的指定地址中写入数据,需要四个总线周期。前两个是解锁周期,第三个是建立编程命令,最后一个周期完成向编程地址中写入编程数据。待写入的数据为.Hex 文件内容。

引导程序框图和应用程序框图的处理流程如图1 所示。

图1 引导程序框图和应用程序框图示意流程图

4 DSP28335 在线烧写的步骤

DSP28335 在线烧写分为以下4 个步骤:①利用CCS 开发工具,将要升级的应用程序编译生成.out 文件,利用hex2000.exe 工具将.out 文件转换成.hex 文件;②利用仿真器将被烧写的引导程序固化到DSP 中FLASH 的相应地址中;③完成步骤②后重新上电复位,利用上位机端软件将被烧写的DSP 应用程序发送到DSP 中;④DSP 重新上电,即可自动运行新更新的应用程序,完成DSP 的在线程序烧写。

5 结束语

本文研究的基于CAN 总线的DSP28335 的在线烧写方法极大释放了软件维护人员的工作量,提高了软件升级的质量和效率。该方法已成功应用到某型号DSP 控制系统中,经过实际应用证明,软件烧写过程快速、稳定、可靠。该技术的研究使DSP 程序的更新可以脱离仿真器,为程序的更新和程序的远程维护提供了方便,具有很强的实用性。

猜你喜欢
上位总线代码
关于CAN总线的地铁屏蔽门控制思路论述
一场史无前例的乐队真人秀
神秘的代码
一周机构净增(减)仓股前20名
重要股东二级市场增、减持明细
基础油“上位”
近期连续上涨7天以上的股
Q&A热线
PCI9030及其PCI总线接口电路设计
基于VC的PLC数据采集管理系统