1. 项目概述与核心价值
在嵌入式产品开发与维护的生命周期中,固件更新是一个绕不开的核心环节。想象一下,你的设备已经部署在成千上万的现场,无论是智能家居的传感器、工业现场的控制器,还是穿戴设备,当需要修复一个关键Bug或增加新功能时,难道要全部召回,用昂贵的JTAG/SWD调试器一个个重新烧录吗?这显然不现实。此时,Bootloader(引导加载程序)的价值就凸显出来了。它是一段预先烧录在微控制器(MCU)内部特殊区域的“小程序”,其唯一使命就是在芯片上电后,判断是否需要进入“更新模式”。如果需要,它会通过一个简单的串行接口(如UART),与上位机通信,接收新的应用程序固件,并将其安全、可靠地写入到Flash的指定区域,最后跳转到新程序执行。这个过程,我们称之为Bootloader编程或串行编程。
对于使用德州仪器(TI)MCU的开发者来说,UniFlash是官方提供的、功能强大的独立闪存编程工具。它不仅仅支持通过JTAG等调试接口进行编程,更关键的是,它原生集成了对TI多个产品线MCU Bootloader的编程支持。这意味着,你可以直接使用UniFlash的图形界面或命令行,通过一根USB转串口线,就能完成对MSP430、MSP432、CC13xx/26xx(无线MCU)、CC32xx(Wi-Fi MCU)等设备的固件更新和内存读写,无需编写额外的上位机软件。这大大降低了开发门槛,提升了现场维护的效率。
本文将基于TI官方文档《SLAU799B》,结合我多年使用TI MCU和UniFlash的实战经验,为你深入拆解如何使用UniFlash对上述TI MCU进行Bootloader编程与内存读写。我会带你从工具准备、映像文件处理,到针对不同系列MCU的具体操作步骤、密码机制、常见陷阱以及高级调试技巧,手把手教你掌握这项嵌入式开发的“硬核”技能。无论你是正在评估Bootloader方案的工程师,还是遇到了现场升级问题的开发者,这篇文章都将提供一份详尽的“操作手册”和“避坑指南”。
2. UniFlash工具与Bootloader基础解析
2.1 UniFlash工具定位与核心功能
UniFlash并非一个简单的“烧录器”软件。它是一个综合性的闪存管理工具套件,其设计哲学是提供一种独立于集成开发环境(IDE)的、标准化的编程解决方案。它的核心优势在于“统一”和“灵活”。
- 统一接口:无论是MSP430低功耗MCU,还是高性能的Sitara处理器,亦或是复杂的无线SoC,UniFlash试图提供一个统一的GUI和命令行接口来管理它们的非易失性存储器。这减少了开发者学习不同工具的成本。
- 多重访问模式:UniFlash支持三种主要的编程模式:
- On-Chip(片上调试):通过JTAG、SWD等调试接口,使用XDS系列仿真器进行编程。这是最常用、功能最全的模式。
- Serial(串行Bootloader):这正是本文的重点。通过UART等串行接口,与芯片内部预置或用户烧录的Bootloader固件通信,实现编程。它不依赖调试器,成本最低。
- 脚本与命令行:支持通过脚本(.bat, .sh)或命令行参数进行自动化编程,这对于生产线批量烧录和持续集成(CI/CD)流程至关重要。
在Bootloader编程的上下文中,我们主要使用其“Serial”模式。当你启动UniFlash并选择设备时,会看到类似MSP430FR2355 (BOOTLOADER)和MSP430FR2355 (On-Chip)的选项。前者就是用于串行Bootloader编程的配置。
2.2 Bootloader协议与安全机制(BSL)
TI的Bootloader通常被称为BSL(BootStrap Loader)。它不是一段“魔法代码”,而是一个遵循特定通信协议的、运行在MCU上的服务程序。这个协议定义了命令集(如擦除、写入、读取、跳转等)、数据包格式、校验和以及密码保护机制。
密码机制是BSL安全性的核心,也是新手最容易出错的地方。其原理是:Bootloader在允许执行任何修改性操作(如擦除、写入)前,必须验证主机发送的密码。这个密码并非一个用户自定义的字符串,而是从MCU内存特定位置读取的一组数据。
- 对于MSP430(FRAM/Flash):密码是中断向量表所在扇区(通常为地址
0xFFE0开始的32字节)的内容。这32字节原本存储的是中断服务程序的入口地址。Bootloader会读取这32字节作为密码。如果这个区域是空白的(全为0xFF),则使用默认密码(32个0xFF)。如果这个区域已有数据(即已编程过应用程序),则必须提供与之完全匹配的密码才能解锁。输入错误密码会触发芯片的整片擦除(Mass Erase)!这是一个重要的保护机制,防止未授权访问,但也意味着操作需格外谨慎。 - 对于MSP432P4:密码是地址
0x0开始的256字节内容。逻辑与MSP430类似。 - 对于CC13xx/CC26xx:密码机制更为复杂,与CCFG(芯片配置)区域关联,通常通过设置
IMAGE_VALID等标志位来控制启动流程,而非简单的字节匹配。
理解这个机制至关重要:Bootloader的“密码”本质上是芯片内存的“指纹”。在第一次对空白芯片编程时,因为指纹区域是空的(0xFF),所以使用默认密码即可。如果芯片里已经有程序,你想通过BSL更新它,就必须先读取(如果可能)或计算出这个“指纹”作为密码。这通常意味着你需要拥有旧固件的映像文件,并从中提取出密码字节。
2.3 支持的固件映像格式
UniFlash的Bootloader编程功能支持三种常见的固件映像格式,这些格式通常由IDE(如Code Composer Studio, IAR Embedded Workbench)在编译链接后生成:
- TI-TXT格式 (.txt):一种基于ASCII文本的格式,每行以
@开头指定地址,后面跟着一串十六进制的数据。这是TI工具链(如CCS)默认生成的用于BSL的格式,可读性好。 - Intel HEX格式 (.hex):一种行业标准的ASCII文本十六进制文件格式,由一系列代表内存地址和数据的记录组成。通用性最强,被许多编程器支持。
- 二进制格式 (.bin):纯粹的二进制数据映像,不包含地址信息。在使用时需要额外指定烧录的起始地址。
在UniFlash的GUI中,你可以直接浏览并选择这些文件。对于自动化脚本,也需要正确指定文件格式。
3. 实战准备:环境搭建与映像处理
3.1 UniFlash安装与设备连接
首先,从TI官网下载并安装最新版本的UniFlash。安装过程简单,一路“Next”即可。安装完成后,确保你的硬件连接正确:
- 硬件连接:使用一根USB转串口(UART)线(如FTDI芯片的线缆),将线的TX、RX、GND分别连接到目标MCU开发板上对应的UART接收(MCU_RX)、发送(MCU_TX)和地引脚。务必注意交叉连接:编程器的TX接MCU的RX,编程器的RX接MCU的TX。
- 供电与启动模式:确保目标板已供电。对于大多数TI MCU,进入Bootloader模式需要满足特定的上电时序或引脚状态(如特定的Boot引脚拉高/拉低)。请务必查阅具体型号的数据手册和Bootloader用户指南,确认如何让芯片上电后停留在BSL模式,而不是直接跳转到用户应用程序。一个常见的方法是,在给MCU上电前,将UART的TX引脚(即MCU的RX引脚)拉低,然后上电,再释放。
- 识别COM端口:将USB转串口线插入电脑,在Windows设备管理器的“端口(COM和LPT)”下找到对应的COM口号(如COM3)。记下这个号码,在UniFlash中需要配置。
3.2 生成与准备Bootloader兼容的映像
不是任何编译输出的文件都能直接用于BSL编程。你需要确保生成的映像文件符合Bootloader的要求。
在Code Composer Studio (CCS)中的关键配置:
- 链接器命令文件 (.cmd):确保你的工程链接器命令文件正确地将代码和数据段分配到了Flash的用户应用程序区域,而不是Bootloader自身占用的区域。Bootloader通常占用Flash最开头或最后面的特定扇区。
- 输出格式:在CCS工程属性的
Build -> Steps -> Post-build steps中,可以添加命令来将输出的.out文件转换为.txt或.hex文件。例如,使用TI的hex430.exe或ofd.exe和hex.exe工具。更简单的方法是,在Build -> ARM Hex Utility或MSP430 Hex Utility配置中,直接使能并选择输出格式为Intel Hex或TI-TXT。 - 处理CCFG(针对CC13xx/CC26xx):这是CC13xx/CC26xx系列的一个特殊点。SDK例程默认会包含一个
ccfg.c文件,用于配置芯片的时钟、引脚、引导行为等。这个文件会生成一个CCFG段,并试图将其编程到固定的地址(如0x57FA8)。但是,UniFlash在通过Bootloader编程时,会忽略映像文件中的CCFG段,并使用它自己的一套默认配置。如果直接将包含CCFG的映像烧录进去,可能会导致CCFG区域被意外写入,影响Bootloader的正常工作。- 推荐方法:在CCS的工程视图中,右键点击
ccfg.c文件,选择Properties -> Build -> Exclude from build,将其从编译中排除。这样生成的映像就不会包含CCFG段。 - 备用方法:如果不排除,也可以手动编辑生成的
.txt或.hex文件,删除文件中对应CCFG地址(如0x57FA8)的数据行。但这比较繁琐且容易出错。
- 推荐方法:在CCS的工程视图中,右键点击
准备密码文件:对于MSP430/MSP432P4,如果你使用默认密码(空白芯片或已知芯片全为0xFF),可以创建一个文本文件(如password.txt),内容就是32个或256个FF字节。在TI-TXT格式中,这通常表现为一行数据。例如,对于MSP430的32字节密码,password.txt内容可能如下(具体格式取决于生成工具):
@FFE0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF确保你理解所用IDE生成的文件格式,密码的地址和数据必须完全正确。
4. MSP430系列MCU Bootloader编程详解
MSP430系列以其超低功耗闻名,其BSL协议也相对经典。我们以MSP430FR2355(FRAM型MCU)为例,演示完整流程。
4.1 编程固件到目标Bootloader
启动与设备选择: 打开UniFlash,在初始界面的“Select Device”搜索框中输入
MSP430FR2355。在结果列表中,务必选择带有(BOOTLOADER)后缀且旁边标签为Serial的选项,而不是On-Chip。双击选中进入主界面。配置Program(编程)标签页:
- Password File:点击浏览按钮,选择你准备好的
password.txt文件。如果芯片是全新的或你确定使用默认密码,也可以留空,UniFlash会自动使用全0xFF作为密码。 - Firmware Image File:点击浏览按钮,选择你的应用程序映像文件,例如
blink_2355.txt。 - 其他字段:对于简单的应用程序更新,通常只需要配置这两个字段。
Data File等用于更复杂的分段编程,此处可留空。
- Password File:点击浏览按钮,选择你准备好的
配置Settings & Utilities(设置与工具)标签页:
- 切换到该标签页。
- COM Port:这是最关键的一步。在下拉菜单中选择你的USB转串口线对应的COM端口号(例如COM3)。
- Protocol/Baud Rate:通常保持默认即可(如UART, 9600 baud)。某些BSL版本可能支持更高的波特率,但初始通信一般固定为9600。除非你明确修改过Bootloader源码并重新编译,否则不要改动。
- 其他高级选项:如
Invoke BSL(调用BSL)等,在大多数LaunchPad开发板上,硬件设计已经能自动在上电时进入BSL模式。如果使用自定义板卡,可能需要勾选此选项让UniFlash通过控制DTR/RTS信号线来触发MCU复位并进入BSL。
执行编程: 点击左上角的
Load Image按钮。UniFlash底部控制台(Console)会开始输出日志。- 成功场景:如果芯片是空白的,且连接和配置正确,你会看到类似
Password accepted.,Erasing segment...,Programming...,Verify... Passed.的信息,最后显示Operation completed successfully.。 - 失败场景 - 密码错误:如果芯片已有程序,且你使用了错误的密码(或留空使用了默认密码
0xFF,但向量表非空),控制台会显示BSL Password is incorrect!。紧接着,Bootloader会执行整片擦除(Mass Erase)!这是一个保护性擦除。擦除完成后,芯片变为空白状态。此时,你可以再次点击Load Image,因为芯片已空,默认密码0xFF生效,这次编程就会成功。
实操心得:第一次对已编程的板子进行BSL更新时,密码错误导致的整片擦除是预期行为,不要惊慌。擦除后反而简化了流程。关键在于,如果你需要保留芯片内的原有数据,就必须事先从原有固件映像中提取出正确的32字节密码。
- 成功场景:如果芯片是空白的,且连接和配置正确,你会看到类似
4.2 读取Bootloader内存内容
读取内存对于调试、验证编程结果或提取密码(如果你有旧固件但忘了密码)非常有用。
- 获取密码:要读取内存,首先必须用密码解锁Bootloader。如果你不知道密码,且芯片非空,则无法读取。假设我们已知密码或芯片为空(密码为32个
0xFF)。 - 密码格式转换:UniFlash读取内存时要求的密码输入格式比较特殊。它不是直接输入
password.txt文件,而是需要将32字节密码以32位字(4字节)为单位,小端(LSB)格式,每32字节用空格隔开的形式输入。 例如,32个0xFF的密码,转换后为:FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF。你可以写一个小脚本或使用十六进制编辑器来帮助转换。 - 配置Read(读取)区域: 在
Settings & Utilities标签页,找到Read部分。- Password:将上一步转换后的密码字符串粘贴进去。
- Read Image File:指定一个输出文件路径和名称,如
readback.bin。UniFlash会将读取的数据保存到此文件。 - Start Address:输入要读取的内存起始地址,例如
0x8000。 - # of Bytes:输入要读取的字节数,例如
1024。
- 执行读取: 点击
Read按钮。如果密码正确,控制台会显示读取进度,并在完成后提示成功。你可以在指定的输出文件中查看读取的二进制内容。
5. SimpleLink MSP432P4系列MCU Bootloader编程
MSP432P4是基于ARM Cortex-M4F的MCU,其BSL与MSP430类似,但密码长度变为256字节,起始地址为0x0。
5.1 编程操作与MSP430的差异
- 设备选择:搜索并选择
MSP432P4111 (BOOTLOADER)。 - 密码文件:准备一个包含256个
0xFF的password.txt文件。同样,如果留空,UniFlash使用全0xFF作为默认密码。 - 密码错误行为:与MSP430一致,发送错误密码会触发主存储区的整片擦除。
- 操作流程:配置COM端口,选择固件映像,点击
Load Image。其成功与失败的日志行为与MSP430完全一致。
5.2 内存读取的特殊性
读取内存时,密码格式转换规则相同(32位字,小端,每32字节空格分隔),但因为是256字节密码,所以转换后的字符串会非常长(8组32字节,共64个十六进制字符一组,共8组)。务必确保转换准确。 读取配置方式与MSP430相同,在Read部分填入转换后的长密码、输出文件、起始地址和字节数。
6. SimpleLink MSP432E4系列MCU Bootloader编程
MSP432E4是高性能的Cortex-M4/M7 MCU,常用于网络和图形应用。其Bootloader编程流程略有不同,通常分为两步:先编程Bootloader本身,再通过这个Bootloader编程用户应用程序。
6.1 两步编程法详解
第一步:编程UART Bootloader固件
- 选择设备
MSP432E401Y (BOOTLOADER)。 - 在
Program标签页,固件映像选择TI SDK中提供的UART Bootloader示例工程生成的.bin或.txt文件(例如uart_bootloader.bin)。这个文件通常位于SDK安装目录的example文件夹下。 - 关键点:这个步骤不需要密码文件。MSP432E4的BSL在初始空白状态下,可能使用不同的协议或无需密码。
- 配置正确的COM端口,点击
Load Image。这将把一个UART Bootloader程序烧录到芯片中。
- 选择设备
第二步:通过已编程的Bootloader更新用户程序
- 第一步成功后,芯片每次复位都会运行这个UART Bootloader。
- 现在,你需要用这个Bootloader来烧录你的实际应用程序(如一个LED闪烁程序)。
- 重要设置:在
Settings & Utilities标签页,找到UART Bootloader相关设置。你需要取消勾选Apply auto baud rate for speed initialization(应用自动波特率进行速度初始化)。因为第一步烧录的Bootloader可能已经运行在一个固定的波特率下,不需要再次自动检测。 - 回到
Program标签页,选择你的用户应用程序映像文件(如blink.bin)。 - 再次点击
Load Image。此时,UniFlash会与芯片上已运行的UART Bootloader通信,并将新的应用程序烧录到指定的Flash区域。
注意事项:这种两步法在MSP432E4上很常见。第一步烧录的Bootloader可能是一个功能更全、更灵活的Bootloader(支持自动波特率、XMODEM协议等),而芯片出厂预置的ROM BSL可能功能较基础。务必查阅MSP432E4的特定Bootloader指南,确认正确的操作流程和映像文件。
7. SimpleLink CC13xx/CC26xx无线MCU Bootloader编程
CC13xx和CC26xx是TI的无线MCU系列,支持低功耗蓝牙、Zigbee等协议。它们的Bootloader编程与配置(CCFG)紧密相关,是操作中最需要细心的地方。
7.1 CCFG处理:成败的关键
如前所述,CCFG是芯片的配置区域,包含引导行为、时钟、射频等关键设置。UniFlash的Bootloader编程会忽略映像中的CCFG段,并使用其内部默认配置。因此,必须避免将SDK例程默认生成的CCFG段编程进去。
处理方法(在编译前进行,二选一):
- 在工程中排除ccfg.c(推荐):在CCS中,右键点击工程里的
ccfg.c文件 ->Properties->Build->Exclude file from build,勾选Exclude resource from build。重新编译工程,生成的映像文件将不包含CCFG数据。 - 手动编辑输出文件:如果不排除,生成的文件(如
.txt)末尾会有CCFG数据。你需要用文本编辑器打开它,找到对应地址(CC26x2为0x57FA8, CC26x0为0x1FFA8)的数据行,将其删除。这种方法容易出错,不推荐。
7.2 编程操作步骤
- 设备选择:搜索
CC2652R1F,选择CC2652R1F (BOOTLOADER)。 - 多映像支持:CC13xx/CC26xx的Bootloader支持编程多个独立的映像到不同区域(例如,一个应用程序映像,一个协议栈映像)。在
Program标签页,你可以看到多个Image File的浏览框。根据你的项目需求,选择对应的文件。如果只有一个应用程序,只需填写第一个。 - Image Valid配置:这是另一个关键点。在
Settings & Utilities标签页的CCFG部分,找到Image Valid配置。为了让你编程的应用程序能够正常启动,必须将其设置为0x0000:0000。任何非零值都会导致芯片始终从Bootloader启动,而不会跳转到你的应用程序。 - 执行编程:配置COM端口,点击
Load Image。控制台会显示擦除、编程、验证等步骤。成功后会提示操作完成。
7.3 内存读取与Backdoor Invocation
CC13xx/CC26xx的Bootloader支持“后门调用”(Backdoor Invocation),允许在特定条件下(如某个GPIO引脚在上电时被拉低)直接进入Bootloader模式,而无需擦除应用程序。这为读取内存提供了可能。 要在UniFlash中读取内存,同样需要在Settings & Utilities标签页的Read部分配置:
- Password:这里通常不是指字节密码,而是需要通过CCFG配置使能Backdoor功能。在初始编程时,如果你在CCFG中正确配置了Backdoor引脚和电平,后续即可在此处进行读取操作。具体密码字段的使用需参考芯片的TRM(技术参考手册)。
- Read Image File:输出文件。
- Start Address和# of Bytes:起始地址和字节数。 配置完成后点击
Read按钮。
8. SimpleLink CC32xx Wi-Fi MCU Bootloader编程
CC32xx是TI的Wi-Fi系列MCU,其Bootloader编程需要使用特殊的.SLI映像文件格式。
8.1 准备.SLI映像文件
你不能直接将CCS编译出的.bin或.hex文件用于CC32xx的Bootloader编程。必须使用TI提供的Image Creator工具(通常随UniFlash一起安装或作为独立工具提供)来将你的应用程序二进制文件、服务包(Service Pack)和证书等打包成一个.SLI文件。 具体操作流程请参考《CC3120/CC3220 SimpleLink™ Wi-Fi® Embedded Programming User‘s Guide》或《CC313x/CC323x SimpleLink™ Wi-Fi® Embedded Programming User’s Guide》。大致步骤是:在Image Creator工具中,选择设备型号,添加你的应用程序.bin文件,选择服务包文件,配置网络参数(如SSID、密码),然后生成.SLI文件。
8.2 编程操作与硬件限制
- 设备选择:搜索
CC3235S,选择CC3235S (BOOTLOADER)。 - 加载映像:在
Program标签页,选择你通过Image Creator生成的.SLI文件。 - 硬件限制:根据TI文档,UniFlash 5.1.0的Bootloader编程功能仅支持特定版本的LaunchPad开发板(如CC3220S-LAUNCHXL Rev.A, LAUNCHXL-CC3235SF Rev.A)。这是因为Bootloader的调用需要精确的复位时序,而XDS110调试器(集成在LaunchPad上)的特定版本才能产生这个时序。
- 重要提示:如果你的LaunchPad不是Rev.A版本,使用UniFlash进行Bootloader编程可能会遇到时序问题导致失败。TI建议对于非Rev.A版本的LaunchPad,直接使用Image Creator工具来完成编程,而不是UniFlash的Bootloader模式。
- COM端口配置:在
Settings & Utilities标签页,选择XDS110对应的串行COM端口(通常有两个,选择用于UART通信的那个)。 - 执行编程:点击
Load Image。编程过程会将.SLI文件中的应用程序、服务包等全部写入到设备的串行闪存中。
9. 高级技巧、故障排查与实战心得
9.1 命令行与脚本自动化
对于量产或自动化测试,GUI操作效率低下。UniFlash提供了强大的命令行接口。基本语法如下:
dslite.bat --config <target_configuration_file.ccxml> --load <firmware_image.txt> --port COMx对于Bootloader编程,你需要一个特定的配置文件(.ccxml)来指定使用串行模式。你可以通过GUI配置好一个会话,然后使用File -> Save Configuration保存为一个.ucf(UniFlash Configuration File) 文件。在命令行中,可以使用uniflash.exe -config <your_config.ucf> -targetOp reset等命令来执行自动化操作。详细参数请参考UniFlash安装目录下的文档或使用uniflash --help。
9.2 常见问题与解决方案速查表
| 问题现象 | 可能原因 | 排查步骤与解决方案 |
|---|---|---|
| 连接失败 / 无法打开端口 | 1. COM端口号错误。 2. 串口线损坏或连接错误(TX/RX反接)。 3. 目标板未供电或未复位到BSL模式。 4. 其他软件占用了COM端口(如串口助手)。 | 1. 检查设备管理器确认COM口号。 2. 检查接线,确保TX-RX交叉,GND共地。 3. 确认目标板供电正常,并按照数据手册要求设置Boot引脚或上电时序进入BSL模式。 4. 关闭所有可能占用该串口的程序。 |
| “BSL Password is incorrect!” | 1. 目标芯片非空白,且未提供正确密码。 2. 密码文件格式或内容错误。 3. 对于MSP430,密码地址不是 0xFFE0起始的32字节。 | 1. 这是预期行为,芯片会被整片擦除。擦除后,使用默认密码(留空)重试即可。 2. 检查密码文件是否为纯文本,数据是否正确。用十六进制编辑器查看。 3. 确认芯片型号,查阅其BSL指南确认密码地址。 |
| 编程成功但程序不运行 | 1. 应用程序映像的入口地址(中断向量表)不正确。 2. (CC13xx/CC26xx)CCFG中 IMAGE_VALID未设置为0x0000:0000。3. 应用程序本身有bug。 4. Bootloader跳转地址配置错误。 | 1. 检查链接器命令文件,确保代码正确链接到Bootloader之后的区域。 2. 在UniFlash的CCFG设置中确认 Image Valid已清零。3. 尝试用调试器(On-Chip模式)直接烧录并调试应用程序,排除程序本身问题。 4. 查阅Bootloader文档,确认其跳转地址(通常是用户映像区的起始地址)。 |
| UniFlash卡在“Initializing...”或“Pinging...” | 1. 波特率不匹配。 2. 目标MCU未正确进入或保持在BSL模式。 3. 硬件流控制(RTS/CTS)问题。 | 1. 尝试在UniFlash设置中更换波特率(9600, 19200, 38400等)。 2. 检查Boot引脚电平,确保在整个过程中保持进入BSL所需的状态。有时需要持续拉低。 3. 在UniFlash串口设置中尝试禁用硬件流控制。 |
| CC32xx编程失败 | 1. 使用的LaunchPad不是Rev.A版本。 2. 未使用 .SLI格式文件。3. 服务包(Service Pack)版本与设备不匹配。 | 1. 换用Rev.A的LaunchPad,或改用Image Creator工具进行编程。 2. 确保使用Image Creator工具生成 .SLI文件。3. 确认Image Creator中使用的服务包版本与设备Flash中已存在的版本兼容。 |
9.3 实操心得与建议
- 先调试,后Bootloader:在开发阶段,强烈建议先使用JTAG/SWD调试器(On-Chip模式)将应用程序调试稳定。确保程序能正常运行后,再开始测试Bootloader更新流程。这样可以排除应用程序本身的问题。
- 保留Golden Image:在生产或部署中,考虑在Flash的某个独立扇区存放一个“黄金映像”(永远不变、绝对可靠的Bootloader和基础应用程序)。主应用程序区可以用于更新。万一更新失败,可以从黄金映像恢复。
- 密码管理策略:如果产品需要安全的现场更新,不能一直使用默认密码。应在首次生产编程时,由产线工具生成一个随机密码并烧录到密码区域,同时将该密码安全地存储到服务器。后续更新时,服务器下发包含正确密码的更新包。切勿将密码硬编码在应用程序中。
- 通信可靠性:串行更新易受干扰。在Bootloader和上位机程序中都要实现强大的错误校验(如CRC32)、重传机制和超时处理。对于无线产品(CC13xx/CC26xx),OTA更新时更需如此。
- 版本与兼容性:时刻注意UniFlash版本、SDK版本、Bootloader版本(芯片内置ROM BSL版本)以及服务包(CC32xx)之间的兼容性。升级工具链或SDK后,务必重新测试完整的Bootloader编程流程。
Bootloader编程是连接嵌入式产品开发与后期维护的桥梁。掌握UniFlash这个工具,深入理解TI各系列MCU的BSL特性,能够让你在设备管理上获得巨大的灵活性和控制力。从简单的MSP430到复杂的无线CC32xx,其核心逻辑一脉相承:准备正确的映像、理解并处理密码/配置、建立可靠的串行连接。希望这篇融合了官方指南和实战经验的详细解读,能帮助你顺利打通这道关卡,让你开发的设备真正具备“空中升级”的能力。如果在实践中遇到文档未覆盖的古怪问题,不妨去TI的官方E2E支持论坛搜索或提问,那里有全球的工程师和TI专家共同构建的知识宝库。