MSP430 BSL DEBUG

目标

中秋节在家,想起来MSP430系列的芯片ISP模式还没有使用过,好奇其工具链的配套的完善程度和具体的使用流程,就打算用手上的MSP430F2272来尝试一下。
理想中,使用ISP的好处:

  1. 一个完整的产品不应该以JTAG为下载方式,就连自己的Pet Projects做完了以后,如果有设计或者使用外壳的情况,用JTAG下载也是极为不方便的,需要拆解外壳连接调试器。
  2. MSP430F2272的JTAG与ARM Cortex-M家族的SWD不同,需要至少8个PIN:

    Vref, GND, TEST, NRST, TCK, TMS, TDI, TDO
    如果采用标准的2.54mm座子则非常占用电路板体积

常见的SoC厂商,都会在SoC的ROM(第一级引导程序)中加入ISP模式,可以通过一些简单接口就能完成固件的烧写,比如我们最近设计的芯片的ROM中就是以I2C为接口提供ISP的。所以MSP430也一定会有类似的功能。

BSL

简单的搜索后得知,TI的给自己的MSP430起了一个不太一样的名字:BSL,二者都是一个意思,名字不同而已。
查找F2272 UG得到了一个用户指引教程SLAU319 查表就知道F2272支持UART下载。

工具

经过调查,BSL的工具大概有几个:

  1. MSP-FET,非常早期的GUI工具
  2. MSP-FLASHER, 命令行模式的工具
  3. MSP-GANG, 应该时面向批量编程的
  4. UniFlash, 应该时TI想要打造的通用Flash下载程序

本来打算就用UniFlash就足够了,支持F2272, 支持第三方串口模块,但是没想到后面遇到了几个坑,最后把上面几个工具都下载并尝试了一番..但是最后还是用UniFlash成功了。

吐槽一下其他几个工具:
MSP-FLASHER, 命令行中允许执行 -i TIUSB | COMn | .., 连接上串口后执行 -i COM2后程序还是会自动尝试寻找USBFET, 没有不行..

MSP-GANG,打开了以后使用串口模式,永远只和COM1通信,COM2被你吃了么..

UniFlash

打开UniFlash界面后,发现了两个问题:

  1. 烧写的文件用的时.txt或者.hex, CCS默认的格式时ELF(.out)
  2. ISP模式并不是只用UART就可以了,需要串口模块DTR和RTS:
    也就是DTR<--->NRST, RTS<--->TEST

第二个问题好办,把串口模块的DTR和RTS接出来就好,CP2102芯片是支持UART硬件流控的,第一问题,应该会有两种解决方案:用某种工具转换(TI或者第三方的), 或者在工程中可能提供了编译链接后可以选择类似GNU下objcopy这样的功能,打开CCS寻找,还真有:



在output format中还有很多种格式选择,UniFlash也没有具体提到需要哪种具体格式的,因为没有什么时间慢慢看文档研究了,凭感觉试了两种,最后发现TI-TXT格式可行(TI全家桶么)

生成好.txt后UniFlash中配置串口和波特率,点击“Load Image”提示失败,内容大概是目标设备无响应,检查了连线,按照提示反复掉电上电都没有作用。最后还是花了点时间最后弄明白了,MSP430F2272中BSL用的串口,和片内外设中提供的UART,并不一样!
F2272中用的是P1.1和P2.2


而P1.1和P2.2的具体功能是

飞线后,仍然提示失败,但是错误内容不一样了,日志内容也明显是有通信和握手了,说明软件和芯片已经能正常通信了。最后重新掉电上电后再次尝试,提示成功!

总结

总体来说,TI BSL相比于JTAG,在节约PIN脚上优势并不显著,仍然需要:GND,NRST,TEST,BSL-Tx, BSL-Rx五个,比前面提到的JTAG少了三个引脚,而且整体易用度上也比不上STM32的ISP和PiPico的DFU,不过依然可以搭载一个外部的USB-UART桥来完成相对完整的ISP功能,避免了在作品完成后每次需要更新固件都需要拆外壳,拆设备的尴尬。