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

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

3天内不再提示

CC2640R2:如何利使用芯片内部Bootloader烧写程序

星星科技指导员 来源:TI 作者:Holly Gu, Robin Yu 2023-04-04 10:10 次阅读

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波特率和上文提到的镜像名称等等。

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

审核编辑:郭婷

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

    关注

    146

    文章

    16019

    浏览量

    343657
  • uart
    +关注

    关注

    22

    文章

    1159

    浏览量

    99972
  • GUI
    GUI
    +关注

    关注

    3

    文章

    611

    浏览量

    38797
收藏 人收藏

    评论

    相关推荐

    昇润科技将在三月底推出CC2640R2 SDK开发平台

    平台的市面主流机型,不仅如此,昇润CC2640R2 SDK中还将包含生产测试程序,开发人员不需要再设计蓝牙测试程序,极大的简化蓝牙应用开发人员的开发步骤。昇润CC2640R2 SDK解
    发表于 02-23 15:37

    CC2640R2调试出现奇怪的问题

    :simplelink_cc2640r2_sdk_1_35_00_33硬件版本:CC2640R2 4x4 补充内容 (2018-7-27 13:34): 谢谢各位大侠,已经查明原因,是芯片
    发表于 06-28 09:57

    CC2640R2F蓝牙4.2试用体验】昇润科技CC2640R2初试体验

    今天刚刚收到昇润科技CC2640R2蓝牙开发套件,看起来还不错,非常的精致,首先上一张开发套件的外壳图,如下:非常感谢昇润科技提供的这个2640的开发板套件。今天就非常迫不及待的想验证一下
    发表于 07-24 15:34

    CC2640CC2640R2F的核心区别和重点是什么?不急,本文为你细细道来

    之上,CC2640R2F提供给客户应用程序的空间可以满足和256K Flash BLE SOC 芯片一样的使用需求。*SimpleLink CC2640R2 SDK 介绍*TI专门提供
    发表于 11-01 16:19

    CC2640CC2640R2F的不同点及开发板有哪些?

    CC2640R2F提供给客户应用程序的空间可以满足和256K Flash BLE SOC 芯片一样的使用需求。*SimpleLink CC2640R2 SDK 介绍*TI专门提供了适
    发表于 11-01 16:21

    CC2640试用体验与相关设计

    datasheet【CC2640R2F蓝牙4.2试用体验】实现通过手机控制LED的亮灭昇润CC2640 SDK应用入门教程9昇润CC2640 SDK应用入门教程10CC2640
    发表于 08-29 17:45

    CC2640R2软件测评分享!

    各位好,相应大家已经对CC2640R2蠢蠢欲动了,我简单的贴一份测评报告和上手错误指导给到给位,马上大家就可以在官网上下载到SDK了,请各位持续留意。首先上app + stack的空间测评数据
    发表于 10-14 07:19

    请问使用cc2640R2 CCS版本对之前版本的工程会产生影响吗?

    之前使用的芯片cc2640对应的ccs版本是V6.2,现在想使用CC2640R2,请问CCS是直接更新还是另外下载一个版本,会不会对之前版本的工程有影响?
    发表于 10-21 07:51

    请问谁有CC2640R2 Sensor Controller的UART例程吗?

    Studio 7.2.0我现在需要在Power_Save下使用串口,想问问有CC2640R2 Sensor Controller 的UART例程,或相关参考资料?(现在项目ADC已经在使用Sensor Controller)
    发表于 10-31 10:20

    为什么更改CC2640bootloader的默认IO口之后bootloader功能就失败了?

    一、大致情况介绍 目前使用CC2640R2 launchpad ,如图1所示。目前需要对CC2640进行bootloader操作,使用DIO6和DIO7作为UART的TXD和RXD,使用DIO23
    发表于 11-01 10:30

    请问CC2640R2编译出现以下情况该怎么办?

    CC2640R2 编译问题这个问题该如何解决?
    发表于 11-05 06:49

    利用芯片内部Bootloader程序的方法

    的编程器配上位机,又舍不得口袋里的银子,而且不是TI官方出品,稳定性和可靠性难以得到保证。本文给大家介绍一种利用芯片内部Bootloader
    发表于 11-11 07:08

    CC2640R2的外设功能介绍

    设。  《SensorController 协处理器教程》 SensorController 是 CC2640R2 内部的一颗协处理器,可以使用该协处理器开发超低功耗的传感器采集程序。协处理器教程,从介绍
    发表于 09-22 07:30

    CC2640R2Bootloader是怎么Run的

    里的银子,而且不是TI官方出品,稳定性和可靠性难以得到保证。本文给大家介绍一种利用芯片内部Bootloader烧写程序的方法,进入Boot模式,用普通的串行接口就可以进行固件的引导,F
    的头像 发表于 12-29 14:37 1179次阅读

    CC2640R2:如何利使用芯片内部Bootloader烧写程序

    CC2640R2:如何利使用芯片内部Bootloader烧写程序
    发表于 11-01 08:26 3次下载
    <b class='flag-5'>CC2640R2</b>:如何利使用<b class='flag-5'>芯片</b><b class='flag-5'>内部</b><b class='flag-5'>Bootloader</b>烧写<b class='flag-5'>程序</b>