0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CC2640R2的Bootloader是怎么Run的

电子设计 来源:网友电子设计发布 作者:网友电子设计发布 2021-12-29 14:37 次阅读

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模式。如图1所示,BL_CONFIG是实现Bootloader最重要的寄存器,我们后面在讲代码时会参照这个寄存器,其说明在SWCU117H也可以找到。

第三个常见的问题也是容易犯的错误是是不是CC2640R2的所有接口和PIN脚都支持Bootloader? 答案是否定的。CC2640R2的Bootloader只支持两种接口,UART和SSI,而且仅有UART0 和 SSI0 支持,不同封装的芯片对应的引脚也有差别,如图2所示,使用时要特别注意。

对于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上购买。https://store.ti.com/LAUNCHXL-CC2640R2-CC2640R2-LaunchPad-P51441.aspx

IDE环境 IAR 8.11.2
蓝牙协议栈版本 1_50_00_58
硬件平台 LAUNCHXL-CC2640R2
工程文件 simplelink_cc2640r2_sdk_1_50_00_58\examples\rtos\CC2640R2_LAUNCHXL\blestack\simple_peripheral
上位机软件 sblAppEx.exe
仿真器 LAUNCHPAD板载XDS110

值得一提的是,sblAppEx.exe 是TI专门为CC2640R2实现Bootloader开发的工具,并向客户开放源码,可以基于此二次开发,下载地址:http://www.ti.com/lit/zip/swra466。

首先,我们需要修改一下Bootloader的设置,在source\ti\devices\cc26x0r2\startup_files里,打开ccfg.c,对几个宏定义做出配置,如下图3所示,依据则是图1的BL_CONFIG。

图 3. 修改ccfg.c中的宏定义以匹配Bootloader的要求

在这里我们用DIO15高电平作为Bootloader backdoor的敲门砖,当然也可以根据用户实际需要选择相应的DIO。配置好后,点击IAR的编译下载按钮,就可以在simple_peripheral\tirtos\iar\app\FlashROM_StackLibrary\Exe里看到刚刚编译好的带Bootloader功能的镜像文件,我们需要的是.bin结尾的,如图4所示。

图 4. 编译生成的不同格式的镜像文件

将生成的.bin文件复制到sblAppEx.exe所在根目录下,即sblAppEx_1_02_00_00\bin。由于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,整个流程如图5所示。

图 5. 执行正确的Bootloader的流程

一路OK后,此时的LAUNCHPAD里就是新的固件所示现的功能啦!如果配置不对的话,这个App是会闪退的,无法完成Bootloader的功能。如果不想用板载的XDS110,用自己的USB转串口工具也是可以的,只不过不会跳出那么多跟XDS110有关的COM ports了,取而代之的是USB Serial Ports,串口号不用太纠结。

图 6. USB转串口工具的COM ports

当然啦,有可能你双击sblAppEx.exe来执行,但执行完一系列操作后会自动退出,看不到任何Log,解决的方法是不要双击进入程序,在windows的run里用cmd命令,如图7所示,切到sblAppEx.exe所在文件夹就可以啦。如果某个环节遇到任何问题,Bootloader就会中断,DOS界面会提示ERROR,具体可以对照sblAppEx.exe的源码进行检查,此处不再赘述。需要注意的是,如果不用Bootloader模式,Bootloader backdoor的引脚一定要接固定电平,此处DIO15一定要接低电平,不能悬空。

图 7. 从Windows的cmd进入程序可防止自动退出

重要的事再说一遍,sblAppEx.exe是开源的,用户可以根据需要修改源码实现定制化的功能,比如UART波特率和上文提到的镜像名称等等。

是不是产线上用起来既简单又方便呢,基本是一键式下载,既高效又防止误操作。当然啦,还可以适当修改一下下载工具和上位机软件,就可以实现多个器件的下载。打开你的环境,拿起你的开发板,来试一下吧!

审核编辑:何安

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式处理
    +关注

    关注

    0

    文章

    341

    浏览量

    9994
收藏 人收藏

    评论

    相关推荐

    CC13x2CC26x2 Simplelink™无线MCU技术参考手册

    电子发烧友网站提供《CC13x2CC26x2 Simplelink™无线MCU技术参考手册.pdf》资料免费下载
    发表于 11-13 14:39 0次下载
    <b class='flag-5'>CC13x2</b>、<b class='flag-5'>CC26x2</b> Simplelink™无线MCU技术参考手册

    自定义RISC V的bootloader-v2

    来讲解下怎样定义自己的bootloader 在外部存储的Bootloader 1、导入软件自带的bootloader工程,在工程中选择bootloaderConfig.h文件。 2、修
    的头像 发表于 10-31 12:37 508次阅读
    自定义RISC V的<b class='flag-5'>bootloader-v2</b>

    传音频2.4G无线芯片推荐?CC2640可以吗?

    传音频2.4G无线芯片推荐?CC2640可以吗?CC8520?
    发表于 10-21 07:28

    请问CC2640R2F能否使用Linux自带的蓝牙驱动?

    CC2640R2F能否使用Linux自带的蓝牙驱动?如果不能 需要自己重新开发吗
    发表于 10-14 07:07

    将硬件迁移到CC2652R7和CC2652P7

    电子发烧友网站提供《将硬件迁移到CC2652R7和CC2652P7.pdf》资料免费下载
    发表于 09-26 11:07 0次下载
    将硬件迁移到<b class='flag-5'>CC2652R</b>7和<b class='flag-5'>CC</b>2652P7

    CC2651R3和CC2651P3的硬件迁移

    电子发烧友网站提供《向CC2651R3和CC2651P3的硬件迁移.pdf》资料免费下载
    发表于 09-26 11:03 0次下载
    向<b class='flag-5'>CC2651R</b>3和<b class='flag-5'>CC</b>2651P3的硬件迁移

    Simplelink CC13x2/CC26x2 MCU上的加密性能和能效

    电子发烧友网站提供《Simplelink CC13x2/CC26x2 MCU上的加密性能和能效.pdf》资料免费下载
    发表于 09-26 10:56 0次下载
    Simplelink <b class='flag-5'>CC13x2</b>/<b class='flag-5'>CC26x2</b> MCU上的加密性能和能效

    CC2640在Beacon应用中的实现方法

    电子发烧友网站提供《CC2640在Beacon应用中的实现方法.pdf》资料免费下载
    发表于 09-10 14:30 0次下载
    <b class='flag-5'>CC2640</b>在Beacon应用中的实现方法

    硬件从CC26x0迁移到CC26x2R

    电子发烧友网站提供《硬件从CC26x0迁移到CC26x2R.pdf》资料免费下载
    发表于 09-05 11:34 0次下载
    硬件从<b class='flag-5'>CC</b>26x0迁移到<b class='flag-5'>CC26x2R</b>

    CC2340R5的硬件迁移

    电子发烧友网站提供《向CC2340R5的硬件迁移.pdf》资料免费下载
    发表于 09-05 09:22 0次下载
    向<b class='flag-5'>CC2340R</b>5的硬件迁移

    CC2674R10和CC2674P10的硬件迁移

    电子发烧友网站提供《向CC2674R10和CC2674P10的硬件迁移.pdf》资料免费下载
    发表于 09-04 10:29 0次下载
    向<b class='flag-5'>CC2674R</b>10和<b class='flag-5'>CC</b>2674P10的硬件迁移

    LM324的周边电路是否和TL084有相异之处?

    升高,其线性度会变得不太好,不如TL084。请问有没有较为完整的应用电路图能够反映LM324和TL084的周边电路不同? (注:不考虑放大倍数问题。与之配合的CC2640R2,其内置的嵌入式程序可以改修正系数。)
    发表于 08-16 09:41

    在MINGW32中编译工程时遇到如下错误,怎么修改?

    Compiler version: 5.2.0 CC build/bootloader/bootloader_support/src/bootloader_random.o
    发表于 06-26 07:03

    CC2640R2F HwI2CInit后,调用HalI2CRead HalI2CWrite获取SHT31数据没有反应的原因?

    #include #include I2CCC26XX_Object i2cCC26xxObjects[CC2640R2_LAUNCHXL_I2CCOUNT]; const
    发表于 05-30 06:37

    英伟达宣布收购Run:ai

    英伟达近期宣布收购Run:ai公司,以进一步推动后者的产品路线图并整合其资源至Nvidia DGX Cloud。虽然具体的收购金额和完成时间尚未对外公布,但这一举措无疑显示了英伟达对于Run:ai的高度认可与期待。
    的头像 发表于 05-06 10:34 432次阅读