这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 物联网技术 » [分享]C2000芯片的加锁和解锁

共1条 1/1 1 跳转至

[分享]C2000芯片的加锁和解锁

助工
2020-03-02 13:30:39     打赏

由于部分企业需要对芯片内部的程序进行加密处理,C2000提供了两种加密方式:一种是在工程中添加DSP28***_CSMPasswords.asm,一种是直接在CCS的on-chip flash中修改密码。这里以F28335为例,详细描述两种方式的操作方法:

添加CSM加密文件的方法

该方法是直接使用controlSUITE中提供的DSP28***_CSMPasswords.asm文件,将此文件加入工程中,修改其中的密码,与其他文件一起编译烧写即可。文件内容如下:

.sect "csmpasswds"

 .int 0xFFFF ;PWL0 (LSW of 128-bit password)

 .int 0xFFFF ;PWL1

 .int 0xFFFF ;PWL2

 .int 0xFFFF ;PWL3

 .int 0xFFFF ;PWL4

 .int 0xFFFF ;PWL5

 .int 0xFFFF ;PWL6

 .int 0xFFFF ;PWL7 (MSW of 128-bit password

 

 .sect "csm_rsvd"

 .loop (3F7FF5h - 3F7F80h + 1)

 .int 0x0000

 .endloop

 

对应的CMD文件中地址分配情况:

MEMORY

 { 

CSM_RSVD : origin = 0x3F7F80, length = 0x000076

CSM_PWL : origin = 0x3F7FF8, length = 0x000008

}

SECTIONS

 {

csmpasswds : > CSM_PWL PAGE = 0

csm_rsvd : > CSM_RSVD PAGE = 0

}

按照上面的方法编译好后,你的程序已经加密好了,最后编译生成.out文件一起写入Flash中。

 

On – chip flash加密法

这个方法比较简单,烧写完毕.out文件后,在debug界面点击Tools - On-Chip Flash,在弹出的窗口中下拉找到Code Security Password的Key 1~7位置填入你要加密的密码,然后点击Program Password再点击lock就加密了,相当于对密码区写入你上面.asm文件中的内容。

 

关于解密:

同样以F28335为例:

1、配置芯片的GPIO 84~87引脚的电平状态为1100(也有说只针对key4~key7加密,即只加密高64位密码,则可以不用修改boot模式,直接连接JTAG解密,但本人没有验证过),使芯片进入Branch to check boot mode模式(详情可参考芯片Datasheet第106页,6.1.9 Boot ROM )。如果是TI购买的F28335 controlCARD(以R2.2版本为例),那么把controlCARD上SW2开关的1~4分别配置为1100即可。

 

2、打开CCS,连接芯片和PC,上电。配置target configuration(View - Target Configuration),配置完成后Test Connection一下,测试成功后进入下一步。(本来以为直接点击debug就可以了,但实验了几次发现一定要做一下这个步骤才行,否则没办法进入debug模式)

 

3、点击小虫子图标进入debug模式,进入之后如果显示没有连接JTAG的话先点击Connect Target连接JTAG,然后点击Tools - On Chip Flash,在On Chip Flash中的Code Security Password – Key 0~7中输入正确的密码,然后点击Unlock。这样就解锁了,系统会提示:

C28xx: GEL Output:

ADC Calibration not complete, check if device is unlocked and recalibrate.C28xx: Flash Programmer: Warning: The configured device (TMS320F28335), does not match the detected device (). Flash Programming operations could be affected. Please consider modifying your target configuration file.

C28xx: Starting device unlocking...

C28xx: Device unlocked. To clear the programmed password, please erase Sector A of Flash memory.

解锁成功后你就可以正常使用芯片进行烧写flash了。

 

4、如果你希望不更换程序但需要彻底解锁芯片(以后启动都不需要输入密码解锁),那么按照上述系统提示的“To clear the programmed password, please erase Sector A of Flash memory.”操作。接着刚才的步骤,跳到On Chip Flash中的Erase Sector Selection,选择Sector A(默认是全选的),然后点击“Erase Flash”。这样就去掉密码了,系统会提示:

C28xx: Erasing Flash memory...

C28xx: GEL Output:

ADC Calibration not complete, check if device is unlocked and recalibrate.C28xx: Operation completed successfully.

 

或者也可以把Code Security Password - Key0~7全部改为F,默认就是不加密状态。

以上就完成了芯片的解锁和清除密码操作了。

 

加密注意事项:

将128-bit全部设为1意味着不加密,即所谓的”unsecure”。

将128-bit全部设为0意味着永久加密,此时芯片不可被解密,即无法再操作flash,也无法读取其中的程序和数据。一般情况下,不要进行此设置。

DSP烧写过程中如果密码区被写入密码、烧写过程中受到干扰、电源不稳定、时钟不稳定等等原因都会导致芯片锁死。以上情况即为意外上锁,即你不知道密码的情况下,几乎是没有办法解锁的,只能考虑更换芯片。

 

PS:

最新的28004x、2837x等芯片中增加了双代码安全模块(DCSM),该功能支持将芯片中的memory划为两个独立区域,并设置各自独立的的128位CSM密码。该功能可以阻止未授权人员访问加密内容,进而有效防止您的代码被重复或逆向编译;与此同时,需要维护与升级的代码可以存储于另一个独立区域内,并授权给相关人员使用。详细的可以参考这篇FAE分享的blog:

https://e2echina.ti.com/blogs_/b/the_process/archive/2018/10/22/dcsm?tisearch=e2e-quicksearch&keymatch=DCSM





关键词: C2000     芯片     加锁     加密    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]