MSP430 代码加密(Code Protection)与现场更新的实现

一:实际需求

某个检测设备用到MSP430F5529,希望对代码进行加密,不容易被别人看到源码,同时也需要具备现场软件更新能力。

二:实现原理

MSP430有多种方式下载程序,例如通过CCS软件+MSPFET调试器(SBW),或通过UART口,或通过MSP430的USB口更新程序。

其中MSPFET调试器是在CCS环境编译、链接、下载的,是可以接触到源码的,所以,要进行代码加密,第一步要进行源码和执行文件(BIN、TI-txt)的分离,(TI有个自己的特殊执行文件格式TI-txt),也就是让现场的人只接触到可执行文件,通过MSP430的bootloader将执行文件通过串口或者usb口将执行文件烧录进msp430,从而实现加密的情况下的现场更新。

另外说下msp430系列的加密区别,见下图。

其中利用密码访问的最方便,只需要设置密码,每次jtag访问的时候输入对应的密码就可以更新程序。大多数MSP430器件都有一个电子保险丝(e-Fuse),通过设置密码,可以锁定JTAG/SBW接口。加密并使能后,将无法再通过JTAG或SBW来访问器件。在这种情况下,只能通过设置密码保护的引导加载程序来访问器件。可以利用BSL来重新访问器件并清除JTAG签名,但这样需要输入正确的BSL密码或者批量擦除器件。

如果我们只是实现加密和更新功能,其实可以不用记得密码!只需要每次擦除器件,然后引导下载新的执行文件就行!

补充说明下,密码是和中断向量有关的一段地址区间,如果用了很少的中断,那密码会比较简单,需要手动改的复杂些,不然容易被破解。另外如果只是加密也无需后续更新,可以通过禁用BSL实现。

三:实现过程

我是MSP430F5529芯片,是具备USB口的,同时也是具备e-Fuse的,所以我是通过USB口进行现场升级程序的,硬件上大概是如下设计。PUR的按键是固件升级按钮,当按着按钮再插入USB的时候会支持软件更新。

关于如何使能e-Fuse,无法再通过JTAG或SBW来访问器件,TI有个Uniflash软件,里面可以一键加密。

加密了之后,硬件也具备了USB口,这时候就是怎么现场更新了。TI的提供了软件如下图,但是好像官方不在支持更新了,也可以下载到这个软件的源码,但是我用VS就是编译不过。。。

另辟蹊径,发现有个Python方式,其中有个带UI的界面的如下图,另外还可以通过敲命令实现。

我选择了敲命令的方式,具体步骤如下:

1、安装python 2.6 安装 Scripts

首先官网上下载安装包:https://www.python.org/downloads/windows/,目前最高只有 Python2.6.6 版本了可下载了。下载安装成功后,将安装路径添加到系统环境变量中。

2、但是发现没有Scripts 目录,下载 ez_setup.py 进行安装,将压缩包放置到python安装路径并解压,终端cd到解压后的路径,执行 python2 ez_setup.py,报错:urllib2.HTTPError: HTTP Error 403: SSL is required。

3、手动下载 distribute-0.6.28.tar.gz,解压

4、切换到 distribute/ 目录中,执行 python2 setup.py install,至此 Script 安装完成。

添加环境变量

5、分别安装pyserial 和pywinusb(解压,cd到路径python setup.py install )

6、最后安装python-msp430-tools-0.9.2

————————————————

配置好环境后,如何下载TI-txt文件

  1. 按win+R 调出CMD窗口
  2. 切换到保密盘路径 比如G: 回车
  3. 输入dir 看路径下的文件,通过cd XX进入放置txt文件夹
  4. 执行 python -m msp430.bsl5.hid -e   “XXXXXXXXXX.txt”  清除并下载
  5. 打印programming ok 即为成功

最后补充说明下,为了能够更新过一次之后再能通过USB口更新程序,新程序里面需要保留对USB口的调用,我是利用USB实现的虚拟串口上报调试信息,MSP430的USB口记得是5种用法,有单独的说明文档,有机会再更新。

  • 25
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值