cc2640 r2是德州仪器推出的面向 bluetooth smart 应用的低功耗无线 mcu。该芯片运行ti的ble协议栈,具有功耗低,外设种类丰富,射频性能好等特点。利用它可以实现许多有趣的应用,收到了用户的广泛欢迎。
可是很多用户在量产的时候却犯难了,用xds110 + flash programmer 2,效率很低,还要在gui上各种配置,产线工人操作起来十分困难而且容易失误。买一拖多的编程器配上位机,又舍不得口袋里的银子,而且不是ti官方出品,稳定性和可靠性难以得到保证。本文给大家介绍一种利用芯片内部bootloader烧写程序的方法,进入boot模式,用普通的串行接口就可以进行固件的引导,flash的擦写,program,不花费额外成本。 而且这个bootloader是放在rom里的,不会被误擦除, boot的时候uart/spi不断就没事,实在不行load一半断了也无伤大雅,再boot一次就好了,即快捷又安全。
我们来看一下cc2640r2的bootloader是怎么run的。cc13x0, cc26x0 simplelink wireless mcu technical reference manual(swcu117h)第8章节bootloader中详细介绍了bootloader的原理,功能,接口定义,包的组成,校验等等,内容很多,容易犯困,现在来画一下重点。
第一个常见的问题是什么情况下会进bootloader,进bootloader会不会影响应用程序的执行?如果使能了bootloader,有两种情况下会进,第一种情况是一个flash里没有任何镜像的新芯片在上电后;第二种情况是开启了bootloader backdoor,并且预先定义的backdoor pin脚被设置到正确的逻辑电平。上述条件不满足,在上电后,芯片优先执行应用程序。所以bootloader和应用程序执行的条件不同,所以并不会相互影响。
第二个常见的问题是什么是bootloader backdoor?实际上就是为芯片进入bootloader留的一个后门。用户可以通过bl_config寄存器的bl_enable位使能这个backdoor,并预设某个gpio在某个电平的时候启用这个backdoor,在reset的时候,芯片内部会自动检测预设条件是否满足,来决定是否进入bootloader模式。bl_config是实现bootloader最重要的寄存器,我们后面在讲代码时会参照这个寄存器,其说明在swcu117h也可以找到。
第三个常见的问题也是容易犯的错误是是不是cc2640r2的所有接口和pin脚都支持bootloader? 答案是否定的。cc2640r2的bootloader只支持两种接口,uart和ssi,而且仅有uart0 和 ssi0 支持,不同封装的芯片对应的引脚也有差别,使用时要特别注意。
对于uart0来说,我们芯片理论上可以达到3mbaud(48m/16)的最大波特率,但是片内rom中的bootloader固件只支持1.6mbaud。ssi0是motorolar格式的,sph=1,spo=1,ssi0时钟最快频率是4mbaud(48m/12)。不过一味追求接口的速率也没有必要,毕竟下载程序的速率瓶颈在flash的读写速度。
其实要点就这么多,很简单吧。很多用户会有疑问是不是要把ti规定的协议搞得很透才能实现bootloader?当然不是,ti工程师的使命就是把复杂的问题变得简单,只要把配置搞对,配上正确的上位机,一秒上手不是难事。下面就以uart为例详细跟大伙说说bootloader在cc2640r2上是怎么实现的。
工欲善其事,必先利其器,请准备好下面的ide环境,蓝牙协议栈和硬件平台。插播一条广告,launchxl-cc2640r2的demo板可以在ti的estore上购买。
ide环境 iar 8.11.2
蓝牙协议栈版本 1_50_00_58
硬件平台 launchxl-cc2640r2
工程文件 simplelink_cc2640r2_sdk_1_50_00_58examplesrtoscc2640r2_launchxlblestacksimple_peripheral
上位机软件 sblappex.exe
仿真器 launchpad板载xds110
值得一提的是,sblappex.exe 是ti专门为cc2640r2实现bootloader开发的工具,并向客户开放源码,可以基于此二次开发。
首先,我们需要修改一下bootloader的设置,在sourcetidevicescc26x0r2startup_files里,打开ccfg.c,对几个宏定义做出配置。
在这里我们用dio15高电平作为bootloader backdoor的敲门砖,当然也可以根据用户实际需要选择相应的dio。配置好后,点击iar的编译下载按钮,就可以在simple_peripheraltirtosiarappflashrom_stacklibraryexe里看到刚刚编译好的带bootloader功能的镜像文件,我们需要的是.bin结尾的。
将生成的.bin文件复制到sblappex.exe所在根目录下,即sblappex_1_02_00_00bin。由于sblappex.exe自动识别的是blinky_backdoor_select_btn2650.bin,所以需要把刚生成的ble_simple_peripheral_cc2640r2lp_app_flashrom_stacklibrary.bin改个名字。当然了,也可以通过修改sblappex.exe的源码识别用户所需的.bin,此处不再赘述。然后,按如下步骤操作:
1) dio15接成高电平。
2) reset。重新上电或者按launchpad的reset按钮均可。
3) 在dos界面选择0,即xds110 class application/user uart ,回车。不同电脑可能会识别不同的串口号,这个无关紧要。
如果设置都正确的话bootloader开始工作,经过erasing flash,writing flash,calculating crc on device,comparing crc这一系列过程后,bootloader更新程序就完成了,最后系统会reset device。
一路ok后,此时的launchpad里就是新的固件所示现的功能啦!如果配置不对的话,这个app是会闪退的,无法完成bootloader的功能。如果不想用板载的xds110,用自己的usb转串口工具也是可以的,只不过不会跳出那么多跟xds110有关的com ports了,取而代之的是usb serial ports,串口号不用太纠结。
当然啦,有可能你双击sblappex.exe来执行,但执行完一系列操作后会自动退出,看不到任何log,解决的方法是不要双击进入程序,在windows的run里用cmd命令,切到sblappex.exe所在文件夹就可以啦。如果某个环节遇到任何问题,bootloader就会中断,dos界面会提示error,具体可以对照sblappex.exe的源码进行检查,此处不再赘述。需要注意的是,如果不用bootloader模式,bootloader backdoor的引脚一定要接固定电平,此处dio15一定要接低电平,不能悬空。
重要的事再说一遍,sblappex.exe是开源的,用户可以根据需要修改源码实现定制化的功能,比如uart波特率和上文提到的镜像名称等等。
是不是产线上用起来既简单又方便呢,基本是一键式下载,既高效又防止误操作。当然啦,还可以适当修改一下下载工具和上位机软件,就可以实现多个器件的下载。
Windows10虽好,但大多数人都愿意用windows7原因在哪里?
大家都在用的一种轴承室磨损修复技术
新型的铁塔基站“能源管家”
CW32L083串口中断+定时器实现不定长数据接收
电动汽车采用轮毂电机驱动技术原因
CC2640R2:如何利使用芯片内部Bootloader烧写程序
Zybo Board 开发记录: Xilinx SDK 在 Linux 的一些注意事项
夏天防晒单品好选择,遮阳帽品牌排行榜了解下
以AT90CAN32单片机为控制核心的智能充电设备控制系统设计
华天科技董事长肖胜利增持公司股份 巩固实际控制权地位
笔记本电脑一蹶不振成为台湾经济新威胁 瞄准物联网
美国断供华为 三星是否渔翁得利
华为nova4e值不值得买
日本正在开发VR味觉设备 既能过嘴瘾又不用担心身体
Imagination推出IMG CXM最小GPU,为家庭娱乐带来无比便捷的用户界面
为保住美国领先地位,英特尔等芯片制造商将获得美政府250亿美元补贴
交流接触器和直流接触器的区别在哪
基于VxWorks嵌入式实时操作系统ARM9核芯片中实现BSP的定制过程
滴滴的自动驾驶汽车的王牌技术首次公开
Neuranics利用TMR效应来检测人体器官pT级的微小磁信号