您当前的位置:五五电子网电子知识电子知识资料总线技术通过CAN总线实现对软件IAP技术升级 正文
通过CAN总线实现对软件IAP技术升级

通过CAN总线实现对软件IAP技术升级

点击数:7807 次   录入时间:03-04 11:52:37   整理:http://www.55dianzi.com   总线技术

    内容摘要: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开始的地址空间。

a.JPG

   
    (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技术的方法,完全可以使用,而且抗干扰能力较强,已成功应用于蓄电池检测系统中各个检测模块的程序更新。




本文关键字:技术  软件  总线技术电子知识资料 - 总线技术

《通过CAN总线实现对软件IAP技术升级》相关文章>>>