现在很多无线的东东都想要做在线升级,无线升级,所以我也想给工作上最熟悉的CC1110做上空中升级,换工作带来了一个契机,客户提出了这个要求,于是我们几个人花了近月半的时间把CC1110的空中升级做好了。特别写博纪念。
实现的硬件平台是CC1110F32+512K FLASH(SPI接口),兰德手持机(带DOS操作系统)。
实现的软件是IAR,外加手式写的少量的hex。
流程是手持将新的应用程序(bin文件)分成小包发送给无线模块,无线模块将其按顺序保存在外部FLASH中,当传输完成时,外部FLASH中存储的其实就是可以CC1110上执行的机器码,暂且称之为影像,同时在外部FLASH中写一个5BYTE的升级标志。重启运行BOOT LOADER,BOOT 会检查是否要升级和影像文件是否正确,如果影像CRC校验通过,则将后30K空间擦除,然后将影像文件复制到内部FLASH的后30K空间里。然后由BOOT区跳转到应用程序区,开始执行新的应用程序,每次升级后的程序都有传输bin文件的功能,就可以反复升级了。
CC1110可以内部FLASH的任意区域,为了安全,我把这32K的空间分为两在块,前面2K称为A区,后面30K称为B区。A区用来存放BOOT LOADER,B区用来存放APPBIN,由于CC1110的特性是上电后首先运行0x0000处的指令,所以这样安排。BOOT区是永不擦除的。
现在再分开讲BOOT和APPBIN两个程序主要要实现的功能及实现方法。
BOOT区有检查升级标志、影像文件、CPU控制权交给APPBIN、将中断接口交给APPBIN等功能。我是用一片SPI接口的串行FLASH在存储影响文件的,还要在BOOT中实现串行FLASH的驱动。下文称外部FLASH为EFLASH,请大家注意区别。BOOT开始后读EFLASH中的升级标志,如果标志为“升级”,则进一步检查影像文件,影像文件全文件使用CRC16(IBM)来实现的,如果校验正确则要将影像复制到APPBIN区,将原有的APPBIN覆盖。复制完成后,或者校验错误就将EFLASH中的影像文件全部擦除,防止重启时再作无用的判断。进而将CPU的控制权交给APPBIN。如果检查不到升级标志,也将CPU的控制权交给APPBIN。APPBIN总是存放在0x800开始的空间,所以只要用LJMP指令就可以完成控制权的交接。比较难的中断接口交接,经过讨论,最后我们决定将中断进行映射来实现,BOOT不使用中断。BOOT区的头143个字节是CC1110的中断向量区,在这里使用跳转指令到0x800+中断向量的地址,这个不好代码,于是我们就直接手工写了机器码来实现,也挺简单的,比如说,当APPBIN发生ADC中断时,程序就会跳转到0X000B执行,我要做的是在0x000B这里放一条指令,让程序再跳到0x080B处执行,尽管APPBIN中的中断服务程序各变量,但这个地址却不能再改变,IAR可以帮助我们做到这一点。
APPBIN要实现文件传输,将中断服务程序放在指定的地方,其它跟普通程序无二。文件传输是一个小问题,新的程序最大30K,定一个简单的传输协议,将文件从手持机上接收过来,对每一包都要校验,正确后将数据写入EFLASH,确定整个文件传输完成后,置升级标志,然后重启就可以了。中断服务程序的地址可以在IAR中的思路lnk51ew_cc1110.xcl和lnk_bask.xcl及cstrartup.s51中更改。改好了再编译,中断服务程序就会从0x800后开始放置了。
顺便再说道下手持机,它负责将应用程序(bin文件)分成小包,为各包计算校验值,为全文件做校验值。然后向无线模块发送就可以了,它存放并发送的是bin文件,而不是hex文件。
最后一个难点就是如何时将两个程序BOOT LOADER和APP同时下载到芯片里了,将BOOT工程编译输出hex,将应用程序编译输出hex,将前者的尾去掉,并在适当的位置添加以下hex
:03000300020803ED
:03000B0002080BDD
:03001300020813CD
:03001B0002081BBD
:03002300020823AD
:03002B0002082B9D
:030033000208338D
:03003B0002083B7D
:030043000208436D
:03004B0002084B5D
:030053000208534D
:03005B0002085B3D
:030063000208632D
:03006B0002086B1D
:030073000208730D
:03007B0002087BFD
:03008300020883ED
:03008B0002088BDD
再将后者复制到上面hex的后面,使用TI提供的SmartRFProg.exe下载程序,下载的时候千万别把Write protect选上,我想会自找麻烦。
最后,要感谢3位同事这段时间的坚持不懈。
用户377235 2015-12-24 10:30
zigbee_904218839 2010-11-17 13:16
zigbee_904218839 2010-11-17 13:11
用户1406923 2010-11-17 09:46
huotingtu_505472073 2010-11-5 01:00