cc2540 usb hid升级

cc2540 usb hid升级

基于cc2540开发蓝牙usb设备,功能已经差不多了,那么最后就是升级问题需要搞定。下面介绍一下usb hid升级相关的操作。

oad升级原理

oad升级原理大致描述如下:cc2540的flash从下至上分为BIM,imgA,imgB,如下所示:
这里写图片描述
imgB是被imgA夹住的,可以从代码中看出,也可以升级完成之后使用烧录软件读取整个flash得到一个hex文件和imgA.hex,imgB.hex文件进行对比得出。oadImgBlockWrite函数中的部分代码如下,跳过了imgB的空间:

#if defined HAL_IMAGE_B
    // Skip the Image-B area which lies between the lower & upper Image-A parts.
    if (addr >= (OAD_IMG_B_PAGE * OAD_FLASH_PAGE_MULT))
    {
      addr += OAD_IMG_B_AREA * OAD_FLASH_PAGE_MULT;
    }
#endif

当然上面的地址参数是可以在xcl文件中修改的。他们之间的升级使用的是循环升级的方式,即升级imgA使用imgB升级,升级imgB则是imgA负责升级,不能自己给自己升级,升级数据的传输方式是无线蓝牙,更细一些是蓝牙协议的GATT协议。
那么两个系统到底运行哪一个呢?从bim_main.c的代码中可以看出,启动之后总是有限运行imgB,如果imgB校验不合格或者不存在那么就运行imgA。因此看起来imgA相当于备系统,imgB相当于主系统。
更加详细的阅读参见OAD升级原理以及操作

usb升级原理

usb的升级和oad的升级是一样的原理:imgA和imgB循环升级,只是数据的传输是通过usb通信。具体的流程如下:
这里写图片描述

具体操作流程

其实这里也可以参照OAD升级原理以及操作
1.按照给定的文档教程编译出BIM.hex、imgA.hex、imgB.hex、imgB.bin。
2.烧写BIM.hex、imgA.hex
3.结合自己写的服务端程序升级imgB.bin
4.给个命令破坏imgB,让其运行到imgA,再次升级imgB
第四步时经常升级使用的场景,一般情况下不太可能升级imgA,而是多次升级imgB.
服务端程序主要是提供数据给usb升级,不复杂,主要就是文件的操作。
说明hex文件比bin文件多了一些地址信息,主要是提供给烧录软件烧录用的,而bin文件没有这些信息。img文件和bin文件实际上是一一对应的,hex文件的解析可以参考hex文件解析

遇见问题

1.调试时候usb上的包被覆盖了。
解决:options->debuger->TI中不要选中erase选项。
2.实际写flash的过程中发现第一二个字写不上去。
解决:升级之前erase第一页flash.
3.扫写bim.hex和imgA.hex之后不能识别出usb。
解决:结合bim_main.c中的代码直接写bin文件的代码段到对应的地址,bim直接将会跳转到这个地址执行。
3.bin文件编译不出来。
解决:直接编译sim文件再使用cc254x_sim2bin.exe转换而成即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值