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

    浏览量

    9883
收藏 人收藏

    评论

    相关推荐

    单片机BootLoader与APP如何合并?

    单片机BootLoader与APP如何合并?
    的头像 发表于 10-25 17:17 637次阅读
    单片机<b class='flag-5'>BootLoader</b>与APP如何合并?

    ov2640模组和ov2640模块区别在哪?

    ov2640模组和ov2640模块区别在哪
    发表于 10-07 06:26

    STM32 Bootloader异常复位案例

    电子发烧友网站提供《STM32 Bootloader异常复位案例.pdf》资料免费下载
    发表于 09-25 09:17 3次下载
    STM32 <b class='flag-5'>Bootloader</b>异常复位案例

    CC2640R2F连接jlink怎么总是断开?

    CC2640R2F连接jlink怎么总是断开
    发表于 09-25 06:52

    CC2640R2的外设功能介绍

    本文档详细介绍 CC2640R2 的外设功能,例如 UART,GPIO,I2C,SPI,PWM,ADC 等等,以帮助开发者快速熟悉外设的使用。通过本文档的学习,开发者能够快速进行外设的使用。 1.1
    发表于 09-22 07:30

    CC2640R2外设教程

    发表于 08-18 17:22 0次下载
    <b class='flag-5'>CC2640R2</b>外设教程

    图解基于UDS的Flash BootLoader

    这张图和恒润教程中的BootLoader流程大体是一致的。
    的头像 发表于 08-14 10:49 746次阅读
    图解基于UDS的Flash <b class='flag-5'>BootLoader</b>

    TI CC2640超低功耗无线MCU特性介绍

    德州仪器 (TI) 在2015年就推出了CC2640,该器件是一款无线微控制器,主要适用于蓝牙低功耗应用,是SimpleLink超低功耗无线MCU平台的首批成员之一,是目前广泛使用的CC2540和CC2541的升级产品。
    的头像 发表于 08-04 14:36 1745次阅读

    浅谈CC2640超低功耗无线MCU

    SimpleLink超低功耗无线MCU平台的首批成员是用于Bluetooth Smart的CC2640,以及针对6LoWPAN和ZigBee的CC2630。
    的头像 发表于 08-04 14:35 557次阅读

    CC2640R2F无线微控制器(MCU)规格书

    CC2640R2F 器件是一款 2.4GHz 无线微控制器 (MCU),支持低功耗 Bluetooth® 5.1 和专有 2.4GHz 应用。该器 件经过优化,可在楼宇安全系统、HVAC、资产跟踪
    发表于 07-31 18:29 0次下载

    ARM处理器如何编写Bootloader

    前面给大家分享过Bootloader从应用角度执行的相关文章,今天从底层原理来给大家描述ARM处理器如何编写Bootloader,以及底层流程。
    的头像 发表于 07-26 09:10 565次阅读
    ARM处理器如何编写<b class='flag-5'>Bootloader</b>

    单片机BootLoader与APP如何合并

    嵌入式固件一般分为BootLoader和App,BootLoader用于启动校验、App升级、App版本回滚等功能,BootLoader在cpu上电第一阶段中运行,之后跳转至App地址执行应用程序。
    的头像 发表于 07-25 11:29 984次阅读
    单片机<b class='flag-5'>BootLoader</b>与APP如何合并

    一文了解bootloader

    大多数Bootloader 包含两种操作模式。
    的头像 发表于 06-25 10:05 1610次阅读
    一文了解<b class='flag-5'>bootloader</b>

    LCD Hill Run v2游戏开源

    电子发烧友网站提供《LCD Hill Run v2游戏开源.zip》资料免费下载
    发表于 06-14 15:39 0次下载
    LCD Hill <b class='flag-5'>Run</b> v2游戏开源

    适合单片机的几款开源Bootloader

    如果日常工作中经常使用linux,那么对U-Boot,LILO,GRUB等常用Bootloader一定不陌生。但是这些Bootloader主要用于引导linux启动,不太适合单片机产品。
    发表于 05-25 15:42 4687次阅读
    适合单片机的几款开源<b class='flag-5'>Bootloader</b>