基于CAN总线的软件IAP技术
摘要:CAN总线是一种使用CAN协议的串行通信网络。Silicon Laboratories公司的单片机C8051F040是完全集成的混合信号系统级芯片,而且内部集成了CAN控制器。文中详述了如何通过CAN总线实现对软件的升级,并给出具体的软件设计方案。
关键词:C8051F040;CAN;IAP
CAN总线是低成本、高利用率的工业控制总线,在工业控制、汽车电子等方面有十分广泛的用途。
C8051F040单片机内部集成的CAN控制器是Bosch全功能CAN模块的完全实现,完全符合CAN规范2.0 B,其内部还集成了64 kB系统编程用FLASH存储器,这就为软件的更新、升级提供了可能。当产品安装位置不方便拆卸或需要一次更新大量产品软件的时候,使用单片机JTAG接口来实现几乎是不可能的事情。本文提出一种系统升级的方法,也对单片机的产品设计具有重要的参考价值。
1 总体思路
将C8051F040的64KB存储器分为三个区域:0x0000~0x5fff作为正常运行的程序存储区,0x6000~0xbfff作为从CAN总线接收到的需要更新程序的存储区,0xc000以上作为bootloader程序的存储区。
正常运行的程序在接收到上位机的程序更新命令后(用户自定义通讯协议来实现),接收数据,且将其按接收顺序写入到以0x6000开始的区域中,直到接收完毕,然后主程序判断接收数据是否完整、有效,如完整且有效则跳转到bootloader程序中,由bootloader程序完成更新程序的工作。
2 程序软件框图
(1)bootloader程序
新建立一个proiect,其中包含程序初始化、端口配置、FLASH读/写等函数。
①FLASH写框图(见图1)
②编译控制项
在linker中,使用“CODE(0c000h,MAINRUN_3s(0c000h))”将程序编译完成后的代码放置到以0xc000开始的地址空间。
(2)主程序
主程序在确认更新程序的有效性后,需要跳转到bootloader程序中运行。由于主程序和bootloader程序是采用不用的项目进行编译的,故不能直接调用,必须采用绝对调用的方法。采用函数指针是一种可行的方式,如:
void(*update_flash) 0=0xc000;
//定义函数指针指向0Xc000
(3)上位机软件
由于本文中节点采用CAN总线连接到同一网络上,且采用CAN通讯的方式来更新程序内容,所以,上位机也必须带CAN控制器。
将需要更新的程序的hex文件通过HEXBTN.EXE文件转换成BIN文件,然后再用BIN2C.EXE将生成的BIN文件转换成一字节数组,将其拷贝到上位机软件中,这就是需要更新的源程序。按自定义通讯协议,将其发送到目标CPU即可。
3 需要注意的事项
(1)程序有效性的判断由自定义通讯协议完成
(2)在写FLASH的过程中,需要关中断
(3)在写FLASH的过程中,需要关中断
4 结束语
文中的通过CAN总线实王见软件IAP技术的方法,完全可以使用,而且抗干扰能力较强,已成功应用于蓄电池检测系统中各个检测模块的程序更新。
- 基于Zigbee技术家用无线网络的构架(12-14)
- 无线通信领域中的模拟技术发展趋势(蜂窝基站)(09-22)
- 第四代移动通信系统中的多天线技术(08-05)
- 移动WiMAX 802.16 Wave2的技术特点(02-04)
- Wi-Fi的最新技术进展及未来应用方向(03-16)
- UWB超宽带传输技术及其应用简析(03-18)