搜索
bottom↓
回复: 7

CC1110 空中升级

[复制链接]

出0入0汤圆

发表于 2011-11-1 11:44:30 | 显示全部楼层 |阅读模式
现在很多无线的东东都想要做在线升级,无线升级,所以我也想给工作上最熟悉的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选上,我想会自找麻烦。

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2012-5-20 15:18:43 | 显示全部楼层
你好,刚刚看到你关于CC1110空中升级的帖子,我想问问你CC1110读写外部FLASH你使用的硬件SPI口还是IO模拟SPI时序呢。我现在弄CC1110的SPI部分,写数据是对的,读数据老是不行。麻烦能不能提供以下SPI部分的程序呢?不胜感激,我的邮箱duliuben@126.com

出0入0汤圆

发表于 2012-8-20 12:24:04 | 显示全部楼层
mark..................

出0入0汤圆

发表于 2012-8-20 13:21:54 | 显示全部楼层
用什么传输信号哇

出0入0汤圆

发表于 2014-9-27 20:16:59 | 显示全部楼层
标记一下,最近在学习这个 无线,可能会用到

出50入8汤圆

发表于 2014-9-27 20:26:16 | 显示全部楼层
每次升级后的程序都有传输bin文件的功能,就可以反复升级了。
哪次升级的文件这个功能有问题的话,升级功能就废了,将传输升级功能放在boot区更保险

出0入0汤圆

发表于 2015-10-8 12:51:25 | 显示全部楼层
顶一个。

出0入0汤圆

发表于 2016-6-26 09:08:41 | 显示全部楼层
赞一个!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-1 08:35

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表