原创 CC1110 空中升级

2010-11-4 19:06 3105 5 10 分类: 软件与OS


    现在很多无线的东东都想要做在线升级,无线升级,所以我也想给工作上最熟悉的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位同事这段时间的坚持不懈。

文章评论5条评论)

登录后参与讨论

用户377235 2015-12-24 10:30

学习了,很不错

zigbee_904218839 2010-11-17 13:16

PDA上的无线模块和CC1110节点要同样的频率、同样的速率、同样的调制方式、同样的带宽。

zigbee_904218839 2010-11-17 13:11

CC2430也可以实现这个功能。这里生成的hex文件是第一次下载到芯片的程序,以后则只需通过传输appbin就可以了。从原理上来说整个网络的节点也可以实现这个功能,不过我现在还没有做。 手持机是一个无线PDA,它可以是用1100,1020,1110等芯片做的前端,后台主要功能是把appbin分包通过RF发送给1110节点就可以了。

用户1406923 2010-11-17 09:46

你好,刚看了你写的这个空中升级的博文,觉得挺有意思的。我看CC2430也有这个功能,改天想试试。有几个问题请教一下:你上面说的这个是不是仅仅是在当初下程序时用的?整个网络所有节点也可以通过这个方式来做吗?我感觉应该可以做到,因为原理都是一样的。还有一个问题:你说的那个手持机是怎么向外无线发数据的?它的频率是不是得和无线模块的完全相同?

huotingtu_505472073 2010-11-5 01:00

来借鉴一下
相关推荐阅读
emot 2016-06-29 23:39
想在网上直播来讲讲zigbee,大家怎么看
近来发现zigbee热度不减,不才想把所了解的zigbee都跟大家分享,大致按照这个来做。请大家提些建议,是不是还有特别重要但我遗漏的。先来攒些人,人够了我们就开。 --------------...
emot 2015-09-24 07:06
BLE 空中升级谈(二)
BLE 空中升级谈   -- CC2541 的产品开发中OAD注意事项(续)   TI CC2541支持多个硬件,多个软件对它进行空中升级,可以有不同的组合,硬件有    ...
emot 2015-09-24 07:01
BLE 空中升级谈
BLE 空中升级谈   -- CC2541 的产品开发中OAD注意事项     现在的智能设备(可穿戴,智能家居,智能玩具等)是越来越多了,大公司的产品颜值高,功能强大而完备的应该说是比比皆是,这里...
emot 2015-05-19 10:27
寻找共事的朋友[深圳科技园 嵌入式软件 可穿戴]
岗位职责:嵌入式软件工程师 招聘人数:2 简历语言要求:中文 语言能力:英语 掌握程度:熟练 工作地点:深圳南山科技园 工作待遇:面谈   工作职责: 1. 与硬件工程师合作完...
emot 2014-05-06 08:41
CC2530的通信速率实测
首先要说的是这里的测试包括了zigbee与非zigbee两种情况,测试zigbee的通信速率建议使用TI协议栈ZSTACK-2.5.1A(swrc126.zip)中的TransmitApp来进行测...
emot 2014-01-17 18:08
XBee与 RBee ZigBee透明传输模块互传测试
XBee与 RBee ZigBee透明传输模块互传测试   本次测试的目标是为了初步探索ZigBee透明传输模块的传输速率峰值范围,同时也要检查不同公司模块之间的兼容性。测试的目标是 由美国Digi提...
我要评论
5
5
关闭 站长推荐上一条 /2 下一条