CC1310 两线 Serial Bootloader 方案
[复制链接]
CC1310是TI Simplelink MCU系列中支持Sub-1G的SOC.针对很多客户需要串口进行固件升级的应用需求,CC1310内置了基于ROM的bootloader, 该bootloader支持UART和SPI两种接口.详细信息可参考TI CC1310的用户指南(查看详情) 以及TI应用文档SWRA466A, CC2538/CC26xx Serial Bootloader Interface (查看详情)。传统的bootloader至少需要三跟连线,这篇博客主要介绍如何实现两线bootloader并基于TI Flash Programmer 2(查看详情)工具和CC1310 Launchpad(LAUNCHXL-CC1310)评估板对芯片实现UART的固件烧写。
两线bootloader工程设置
CC1310 三线bootloader如下图左,除了串口的两根连线外,还需要一个专门的I/O进行启动模式的控制。针对很多客户产品只有一个对外的串口接口,提出了下图右的两线Bootloader方式,这个方式将BOOT_IO 与CC1310的UART RX复合使用。
![](https://e2echina.ti.com/resized-image/__size/1230x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-01-21/2018_2D00_04_2D00_08_5F00_175343.png)
如下图BOOTLOADER的串口配置所示,UART和SPI的口是固定的I/O, 不能设置其他的I/O。CC1310 Launchpad 使用的是7*7 RGZ的封装,下面我们需要设置BOOT_IO
![](https://e2echina.ti.com/resized-image/__size/1230x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-01-21/2018_2D00_04_2D00_08_5F00_175403.png)
BOOT_IO的设置在ccfg.c文件中,需要配置两个宏,一个是有效触发电平, 一个是DIO的编号。我们将有效触发电平设置成高有效,BOOT_IO设置为DIO3。修改如下代码。同时,为了使能Bootloader功能,需要定义下面两个宏SET_CCFG_BL_CONFIG_BOOTLOADER_ENABLE和SET_CCFG_BL_CONFIG_BL_ENABLE为0xC5
#define SET_CCFG_BL_CONFIG_BOOTLOADER_ENABLE 0xC5
#define SET_CCFG_BL_CONFIG_BL_LEVEL 0x0 // Active low to open boot loader backdoor
#define SET_CCFG_BL_CONFIG_BL_PIN_NUMBER 0x02 // DIO number for boot loader backdoor
#define SET_CCFG_BL_CONFIG_BL_ENABLE 0xC5
编译,烧写固件。
编译生成目标升级Bin固件
这里以TI的CC1310 SDK的pwmled_CC1310_LAUNCHXL_tirtos_ccs例程,编译需要升级的固件。有两个地方需要设置,一个是设置ARM Hex Utility中的memory width和rom width为8,一个是Build, Step中的post build添加,${CCS_INSTALL_ROOT}/utils/tiobj2bin/tiobj2bin.bat ${BuildArtifactFileName} ${BuildArtifactFileBaseName}.bin ${CG_TOOL_ROOT}/bin/armofd.exe ${CG_TOOL_ROOT}/bin/armhex.exe ${CCE_INSTALL_ROOT}/utils/tiobj2bin/mkhex4bin.exe
设置生成bin文件。 如下图。
![](https://e2echina.ti.com/resized-image/__size/700x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-01-21/0408a.jpg)
![](https://e2echina.ti.com/resized-image/__size/700x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-01-21/0408b.jpg)
编译工程,得到pwmled_CC1310_LAUNCHXL_tirtos_ccs.bin
通过Flash Programmer2对目标芯片完成两线串口Bootloader烧写
应用文档SWRA466A中,对应的提供了一个命令行小程序sblAppEx,用于固件升级,因为程序编译较早,有些版本运行会出错。而很多用户不知道的,Flash Programmer2 具有通过串口进行固件烧写的功能。下面, 具体介绍用Flash Programmer2进行串口固件升级的具体操作如下:
1. 按照图X所示,连接UART口和BOOT IO口, BOOT IO (即DIO2) 接低点平, 复位系统. 由于我们设置的是低点平进入Bootloader状态,复位后,芯片进入ROM Bootloader模式
2. 在Flash Programmer2 的左上角 Connected devices中,选择XDS110 Class Application, Unknown (这是CC1310 Launchpad自带的UART口,如果是你自己的串口,也可以在这里看到)
![](https://e2echina.ti.com/resized-image/__size/1230x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-01-21/2018_2D00_04_2D00_08_5F00_175506.png)
3. 选择好Unknown后,在左下脚的Select Target Device… 下拉菜单中选择对应型号CC1310F128
![](https://e2echina.ti.com/resized-image/__size/1230x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-01-21/2018_2D00_04_2D00_08_5F00_175525.png)
4. 选择好芯片好. 右键, 选择Connect, 与目标芯片建立UART通信, 如下图
![](https://e2echina.ti.com/resized-image/__size/1230x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-01-21/2018_2D00_04_2D00_08_5F00_175538.png)
5. 选择需要升级的固件BIN文件, 这里选取之前步骤生成的pwmled_CC1310_LAUNCHXL_tirtos_ccs.bin文件
![](https://e2echina.ti.com/resized-image/__size/1230x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-01-21/2018_2D00_04_2D00_08_5F00_175553.png)
6. 升级成功后,可以从Flash Programmer最下方的状态窗口看到更新
![](https://e2echina.ti.com/resized-image/__size/1230x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-01-21/2018_2D00_04_2D00_08_5F00_175606.png)
7. Dd
至此,我们就实现了两线Bootloader
|