作者: TI 工程师 Louis Lu
CC1310是TI Simplelink MCU系列中支持Sub-1G的SOC.针对很多客户需要串口进行固件升级的应用需求,CC1310内置了基于ROM的bootloader, 该bootloader支持UART和SPI两种接口.详细信息可参考TI CC1310的用户指南(http://www.ti.com/lit/pdf/swcu117) 以及TI应用文档SWRA466A, CC2538/CC26xx Serial Bootloader Interface (http://www.ti.com/cn/lit/swra466)。传统的bootloader至少需要三跟连线,这篇博客主要介绍如何实现两线bootloader并基于TI Flash Programmer 2(http://www.ti.com/tool/flash-programmer)工具和CC1310 Launchpad(LAUNCHXL-CC1310)评估板对芯片实现UART的固件烧写。
两线bootloader工程设置
CC1310 三线bootloader如下图左,除了串口的两根连线外,还需要一个专门的I/O进行启动模式的控制。针对很多客户产品只有一个对外的串口接口,提出了下图右的两线Bootloader方式,这个方式将BOOT_IO 与CC1310的UART RX复合使用。
如下图BOOTLOADER的串口配置所示,UART和SPI的口是固定的I/O, 不能设置其他的I/O。CC1310 Launchpad 使用的是7*7 RGZ的封装,下面我们需要设置BOOT_IO
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文件。 如下图。
编译工程,得到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口,如果是你自己的串口,也可以在这里看到)
3. 选择好Unknown后,在左下脚的Select Target Device… 下拉菜单中选择对应型号CC1310F128
4. 选择好芯片好. 右键, 选择Connect, 与目标芯片建立UART通信, 如下图
5. 选择需要升级的固件BIN文件, 这里选取之前步骤生成的pwmled_CC1310_LAUNCHXL_tirtos_ccs.bin文件
6. 升级成功后,可以从Flash Programmer最下方的状态窗口看到更新
7. Dd
至此,我们就实现了两线Bootloader