基于XC886芯片的在线升级软件设计

2018-02-25 02:39张琪杨建成于宗洋
电子技术与软件工程 2018年7期

张琪 杨建成 于宗洋

摘要 研究了利用总线技术对不易拆卸控制器的加载和远程控制技术,以英飞凌公司的XC886芯片为平台设计并实现了CAN总线远程升级加载方案。该方案摒弃了传统方案升级软件需要打开控制器外壳、连接JTAG口等繁琐过程,通过PC端监控界面与片内驻留BootLoader引导程序进行CAN总线通讯,实现用户程序的烧写和远程升级。

【关键词】XC886芯片 BootLoader 远程升级CAN总线

在现代控制数字技术不断迅猛发展的当下,嵌入式控制系统被越来越广泛的应用在工业领域,嵌入式操作系统经常被安装在自然环境极其恶劣的区域,亟需实现系统远程加载。CAN总线作为一种国际标准的现场总线,具有出众的性价比和高可靠性,因此通过CAN总线对各节点芯片进行在线升级,成为一种简单易行且稳定可靠的方式。本项目提出一种基于CAN总线的分布式嵌入系统升级方案,实现多点或单点系统的升级。项目根据嵌入式处理系统存储结构的特殊性和主流的软件升级原理,建立了一套通过PC机控制远程节点软件升级的系统。

1 工作原理

本研究采用的嵌入式芯片采用Infineon公司的XC886芯片,程序软件升级采用下载模式。主要思路是使用PC平台,与嵌入式芯片驻留程序通讯。系统软件分为PC平台和硬件端底层引导程序(BootLoader),PC平台负责将需要加载的更新程序转化为要求格式,BootLoader将CAN总线发来的数据烧写到FLASH存储区内。先通过JTAG口将BootLoader烧写到FLASH,然后弃用JTAG。在后续使用过程中,芯片上电后按ROM区地址顺序执行,即先执行BootLoader,底层程序负责接收PC端控制命令,决定是否有目标文件更新任务:判断有,将CAN总线上发送的用户文件接收并通过Flash缓存固化到芯片ROM区;判断无,运行硬件端用户程序区。

2 过程实现

控制核心模块使用中断接收PC平台发来的消息,通过ID号分辨消息是命令还是文件传输。该模块是核心部分,负责与PC平台进行通讯,传输和接收数据;响应PC平台发送的命令,完成命令功能,处理接收数据。按此流程解析命令:

(1) CAN通讯初始化;

(2)等待连接命令和建立通讯连接;

(3)等待命令和命令处理:在成功建立连接后硬件端等待PC平台发送用户控制指令:连接断开、程序启动、复位、程序更新和系统状态请求,此外异常情况:超时处理。硬件端对相应指令做出对应处理;

(4)系统状态结束及复位状态结束。

3 数据传输

数据传输部分采用单向传输,从PC端到硬件端,PC平台发送更新程序文件到硬件端,硬件端回传响应信号和状态,PC端发送数据,硬件端接收数据。单个某数据帧的传输过程如图1所示:

①单個某数据帧传输开始,PC平台定义该帧的序列号,如果帧过大需要划分成若干分帧,规定主帧的分帧个数。SeqM为主帧序列号,主帧的每个分帧都包含主帧序列号,用以标记。序列号存储在某分帧的序列号字段中。LFM是在某分帧完成传输后所属主帧中剩余分帧的个数,存储在表征后续帧个数的字段中。FlashAddM为主帧在Flash的目标烧写位置,将地址存储在分帧的Flash相应地址字段中。

②硬件端成功接收到某分帧后,判断数据是否无误,正确回传确认帧,包含主帧序列号和已接收到分帧的剩余帧数,INF为确认帧中包含的信号内容,Next代表已经准备去接收下一分帧。

③成功传输完前一分帧后,顺次向下传输下一分帧,SeqM和FlashAddM均不变,LFM减去1。

④同②,剩余的各分帧成功传输过程与③、④相同。

⑤传输完最后一个分帧,LFM等于O。

⑥同②。

⑦传输完上一主帧后,开始下一主帧的传输,主帧序列号为SeqM加1,FlashAddM更新为当前主帧目标烧写位置,LFM为主帧包含的总分帧个数减1。

4 错误处理机制

当检测到接收数据帧发生错误时,硬件端判断错误类型并反馈给PC平台进行错误处理。数据传输错误处理过程如图2。

①PC平台发送最后一个数据帧Mn。

②硬件端成功接收该数据帧,返回请求下一分帧的信号确认帧。

③PC平台发送数据长度为O的数据帧,通知硬件端数据传输完毕。

④硬件端检查该分帧中带有的总数据长度信息是否与接收到的数据一致,不一致时立即发送Recall反馈帧,通知PC平台重传全部数据。

⑤PC平台端接到Recall后重传数据。

5 文件读取

文件头部的读写是系统处理核心,主要依靠传输头部文件函数boolCfileTrans::HandleHeader()传输文件头信息,包括文件起始字符,硬件端信息,加密,用户文件版本号及ID号。根据配置文件信息,选择调用对应的API对文件中的数据处理。读取头部文件函数bool CPCCANDlg::ReadFileHead(),顺序读取文件起始字符,读取完成后选择Infection文件的帧格式。

struct LK HEADER Infineon

//Infection文件某帧格式

{

unsigned char LENGTH;

unsigned char FLASH_MSTART;

unsigned char FLASH_LSTART;

unsigned char SEQ;

unsigned char LEFT;

unsigned char CRC;

unsigned short reserved;

};

帧头部信息内容包括帧长度、帧写入Flash首地址、帧序列号、后续帧个数、CRC校验码。用户选择传送文件目标位置、邮箱ID,PC平台将文件分装成多帧,调用文件传输函数将帧逐次发送到CAN总线上,硬件端收到信号后,将响应信号发到CAN总线上,监听信号函数接收CAN总线上数据,包括命令及响应信号,执行相应处理分支。

6 FLASH操作

本软件采用基于英飞凌XC886芯片的C语言编写,XC886内嵌用户可编程的闪存( Flash)存储器,Flash分区特性使每个扇区都可被独立擦除。为了适应芯片的存贮方式,地址从Ox0000开始存放中断向量表,这样可以执行复位过程中的寻址。用户上一次更新后的程序代码放置在芯片端用户程序区,底层引导程序放置在引导区。在XC886芯片启动后程序寻址的初始位置写一条LJMP长跳转指令,芯片启动后会先进入引导区。

测试结果:完善后经过上千次软件远程升级测试及软件分支可靠性测试,未出现更新过程中故障,系统表现可靠。

参考文献

[1]何宾,朱红林,基于GPRS的DSP程序远程升级的研究与实现[J].计算工程与设计,2010,31(15): 3390.

[2]周立功.iCAN现场总线原理及应用[M].北京:北京航空航天大学出版社,2007:4— 7.

[3]杨元挺,卓树峰.基于CAN总线的远程升级系统[J],现代电子技术,2009,32 (10): 83-86.