This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于MSP430 BSL下载的问题

Other Parts Discussed in Thread: MSP430F2132

 最近在研究使用BSL方式给MSP430F2132下载程序,看到利尔达发行的资料上有这样的一段说明"注意:必须提供正确的密码文件,否则有可能会擦除芯片内部的数据,尤其特别注意 F2XX 系列的 DCO 调整配置字节。"  对于这句话我有下面三个疑问:
  1.使用BSL之前必须提供正确的密码是针对所有的型号的单片机吗?
  2.网上查资料得知BSL密码是中断向量中所对应的的数据,查看MSP430F2132的相关头文件看到这   样一句话“Z(CODE)INTVEC=FFC0-FFDF” 这里面的C0-DF是否就是BSL密码呢?
  3.如果是需要系统密码文件,密码文件该如何生成呢?
  请大神帮忙指点一下迷津,不胜感激!!!

  • 1、JTAG是利用边界扫描技术,在430内部有逻辑接口给JTAG使用,内部有若干个寄存器连接到了430内部数据地址总线上,所以可以访问到430的所有资源,包括全地址FLASH、RAM及各种寄存器。可以用于对430的仿真和编程,主要连接线有TMS、TCK、TDI、TDO,430还需要另两条线路RST、TEST来启动JTAG命令序列。

     2、SBW是SPY-BI-WIRE,可以简称为两线制JTAG,主要有SBWTCK(连接到JTAG接口的7脚TCK)与SBWTDIO(连接到JTAG接口的1脚TDO/TDI),该接口主要用于小于28脚的2系列单片机,因为28脚以内单片机的JTAG一般与IO口复用,为了给用于留有更多的IO资源,才推出SBW接口。SBW同JTAG一样可以访问到430内部的所有资源。
     注:目前MSP430F5XX系列中也有SBW接口,原理同2系列的SBW。

     3、BSL是TI在430出厂时预先固化到MCU内部的一段代码,该代码用户不可读写,这有点类似与DSP的bootloader,但又与bootloader有明显的区别,BSL只能用于对MCU内部的FLASH访问,不能对其他的资源访问,所以只能用作编程器接口。BSL通过UART协议与编程器连接通信。编程器可以发送不同的通信命令来对MCU的存储器做不同的操作,可以把这种方式称为BSL接口。
     BSL代码的启动有些特殊,一般430复位启动时PC指针指向FFFE复位向量,但可以通过特殊的启动方式可以使MCU在启动时让PC指向BSL内部固化的程序。这种特殊的启动方式一般是由RST引脚与TEST(或TCK)引脚做一个稍复杂的启动逻辑后产生。BSL启动后,就可以通过预先定义好的UART协议命令对MCU进行读写访问了。

    _______________________________________________________________________________________

    官方的开发板通常是使用的是SBW的方式,BSL实际上就是在应用编程的方式实现的。你上面说注意的内容,应该急速担心擦除了芯片内的固定下来的存储数据。

    1,如果使用BSL有可能是采用了密码形式的方式,因为BSL程序实际上就是单片机的系统文件了,只不过通过这段代码可以实现对另外一个区域代码的更新。不同型号的应该是密码不同的

    2,bsl的中,如果对flash读写需要一个密码文件,这个密码文件由32个字节的中断向量组成。不知道你那个算不算是。还需要请使用过该功能的高手来解答。我一般用SBW。

    3,

    ————————————————————————给你找了个相关的资料————————————————————————————

    MSP430单片机常见加密总结

    1、为什么要加密,如何加密?
    当您的产品推向市场的时候,您的竞争对手就开始盯上它了,如果您的产品硬件很容易被模仿,而且您使用的MSP430单片机没有被加密的话,那么您辛辛苦苦的劳动成功就很容易成为您竞争对手的产品了,使用JTAG调试工具FET虽然可以将程序下载到芯片内部,但只有使用专业编程器能够防止程序被窃取。

    2、JTAG、BSL、BOOTLOADER、熔丝的区别和关系是什么?
    JTAG接口能够访问MSP430单片机内部所有资源,通过JTAG可以对芯片进行程序下载、代码调试、内存修改等等,通过JTAG还能烧断加密熔丝,熔丝一旦被烧断,JTAG接口绝大部分功能失效,就再也不能通过它进行编程了。

    BSL接口是利用芯片内部驻留的bootloader程序实现的自编程,通过特定的时序使得CPU进入bootloader代码断,然后利用每个MSP430芯片内部都有的Timer A构成一个软件串口来与上位机通讯,这样可以将代码下载到芯片内部。实现BSL除了JTAG接口的一些引脚外,还需要用到两个TA0功能引脚,因此在设计产品时如果需要加密,则应该考虑将这两个引脚也连出来。

    注意:A 、要烧断熔丝(加密)必须使用JTAG接口;B、烧断熔丝后只能通过BSL或者用户代码来实现编程更新。

    3、BSL的验证密码是怎么回事?
    BSL也能读出芯片内部的代码,这样可以实现编程后的校验等功能。通过BSL擦除所有Flash信息时不需要验证密码,但是要进一步操作,就得输入32字节密码进行验证。BSL的协议规定这32字节密码为芯片FLASH区域的最高32字节,也就是程序的16个中断向量,如果您拥有这段程序的最后32字节,就能通过BSL将芯片内部所有代码读取出来。

    4、为什么要使用高级加密?
    32字节的密码看似几乎完全没可能使用穷举法来实现,但是各位别忘了,msp430的16个中断向量未必每一个都用到了,没用到的中断向量为0xffff,如果您的程序只用到了复位向量,那么者只需尝试最多32768次(中断向量为偶数,所以除以2)就能将其,另外,如果芯片本身Flash容量较小,比如4K字节,那么者只需尝试最多2K次就能将其。这对自动操作的计算机来说几乎是一瞬间的事情。那么如果用到的中断向量越多,就越难,最好的办法就是将所有未用到的中断向量全部填充为随机数据,这就是“高级加密”。

    5、关于TI-TXT文件
    TI-TXT文件是TI公司为MSP430单片机定义的一种编程代码格式,其内容为纯文本格式,使用任何文本编辑器都能对其进行阅读,下面是一个这类文件的例子:

    @FEFE
    B2 40 80 5A 20 01 F2 40 9D 00 90 00 F2 40 2E 00
    40 00 F2 D0 80 00 01 00 F2 43 33 00 C2 43 95 00
    C2 43 9A 00 F2 D0 20 00 53 00 F2 40 1F 00 52 00
    F2 43 91 00 F2 43 92 00 F2 43 93 00 F2 43 94 00
    F2 43 95 00 F2 43 96 00 F2 43 97 00 F2 43 98 00
    F2 43 99 00 F2 43 9A 00 32 D0 D0 00 FD 3F 31 40
    00 03 B0 12 A2 FF 0C 93 18 24 3C 40 00 02 0E 43
    30 12 00 00 B0 12 FF 3C 40 00 02 3E 40 FE FE
    30 12 00 00 B0 12 A6 FF 21 52 3C 40 00 02 3E 40
    FE FE 30 12 00 00 B0 12 A6 FF B0 12 FE FE 30 40
    A0 FF FF 3F 1C 43 30 41 0A 12 1D 41 04 00 0F 4C
    0A 4D 1D 83 0A 93 05 24 EF 4E 00 00 1F 53 1E 53
    F7 3F 3A 41 30 41 0A 12 1D 41 04 00 0F 4C 0A 4D
    1D 83 0A 93 04 24 CF 4E 00 00 1F 53 F8 3F 3A 41
    30 41 
    @FFFE
    5C FF 
    q


    第一行的@FEFE表示从地址0xFEFE开始,有如下代码。每行为16字节,每个字节使用16进制数表示,每两个字节之间用一个空格格开。内容末尾的@FFFE就是程序的复位向量了,表示程序的入口地址为0xFF5C。最后用一个小写的q字符加换行结束,当然也可以把中断向量的那两行放到最前面去,比如下面这段代码的含义跟上面的是一样的,同样符合规则。

    @FFFE
    5C FF 
    @FEFE
    B2 40 80 5A 20 01 F2 40 9D 00 90 00 F2 40 2E 00
    40 00 F2 D0 80 00 01 00 F2 43 33 00 C2 43 95 00
    C2 43 9A 00 F2 D0 20 00 53 00 F2 40 1F 00 52 00
    F2 43 91 00 F2 43 92 00 F2 43 93 00 F2 43 94 00
    F2 43 95 00 F2 43 96 00 F2 43 97 00 F2 43 98 00
    F2 43 99 00 F2 43 9A 00 32 D0 D0 00 FD 3F 31 40
    00 03 B0 12 A2 FF 0C 93 18 24 3C 40 00 02 0E 43
    30 12 00 00 B0 12 FF 3C 40 00 02 3E 40 FE FE
    30 12 00 00 B0 12 A6 FF 21 52 3C 40 00 02 3E 40
    FE FE 30 12 00 00 B0 12 A6 FF B0 12 FE FE 30 40
    A0 FF FF 3F 1C 43 30 41 0A 12 1D 41 04 00 0F 4C
    0A 4D 1D 83 0A 93 05 24 EF 4E 00 00 1F 53 1E 53
    F7 3F 3A 41 30 41 0A 12 1D 41 04 00 0F 4C 0A 4D
    1D 83 0A 93 04 24 CF 4E 00 00 1F 53 F8 3F 3A 41
    30 41 
    q


    手动修改TI-TXT文件来实现高级加密:

    下面是使用到中断向量较少的一段代码的中断向量:
    @FFE0
    10 FF A0 FF 
    @FFFE
    5C FF

    它与下面这段代码意义是一样的:
    @FFE0
    10 FF A0 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 5C FF

    这里我们把未用到中断向量改成随机数据,就实现高级加密了,不过注意不要把有效的中断向量也改了哦。
    @FFE0
    10 FF A0 FF A5 5A 37 21 F3 44 E0 77 9A 00 22 33
    44 55 66 77 88 99 AA BB CC DD EE 3E E3 0F 5C FF
    __________________
    提问的时候请说明芯片型号,开发环境,以及具体的故障描述。


  • 中断向量表的这个是BSLSKEY,是enable BSL的

    你看SLAU319

    32bit BSL的密码在FFE0h to FFFFh区域,是你自己定义的

    看TI的官方文档吧,会比较全

  • 感谢您的回答,根据您的指导,我在SLAU319这份资料中看到了关于BSL密码的说明“密码本身由 16 个位于 FFFE0h 至 FFFFh 地址(256 位)内的中断矢量组成,第一个字节从地址 FFE0h 开 始。 整体擦除之后,,所有密码位为逻对于未编程器件,辑高电平 (1)。 ”但是还有一点不明白,这个中断矢量该如何去查看呢,是在编译后的文件中查看,还是在某个文件中查看呢,我是新手,麻烦您再指点一下,十分感谢!!!

  • 感谢您的回答,根据您的指导,我在SLAU319这份资料中看到了关于BSL密码的说明“密码本身由 16 个位于 FFFE0h 至 FFFFh 地址(256 位)内的中断矢量组成,第一个字节从地址 FFE0h 开 始。 整体擦除之后,,所有密码位为逻对于未编程器件,辑高电平 (1)。 ”但是还有一点不明白,这个中断矢量该如何去查看呢,是在编译后的文件中查看,还是在某个文件中查看呢,我是新手,麻烦您再指点一下,十分感谢!!!