Board logo

标题: [求助]请问用codewarrior编译调试工具是否可以对mcu加密? [打印本页]

作者: 天涯倦客    时间: 2007-4-16 11:09     标题: [求助]请问用codewarrior编译调试工具是否可以对mcu加密?

我用的是16位的mcu,型号为DT128,因为现在要小批量,没有购买专用的烧录工具.我记得以前用8位机的时候prog08sz可以从上位机软件直接加密.
作者: strongchen    时间: 2007-4-16 11:15

当然可以。只要在其FLASH加密地址处定义一个常数(注意不是加密寄存器地址),给它赋一个初值,使芯片处于加密状态即可。
作者: 天涯倦客    时间: 2007-4-16 12:20

哦,谢谢!
作者: 天涯倦客    时间: 2007-4-17 16:29

今天试验了下,好像没有成功,我是这样做的
在PRM文件中
ROM_FF0F = READ_ONLY 0xFF0E TO 0xFF0F;
SECUR_ROM INTO ROM_FF0F;
然后在文件中写初值
#pragma CODE_SEG SECUR_ROM
const uchar secur_byte[2]={0x00,0x00};
#pragma CODE_SEG DEFAULT
然后通过sci接口把FSEC传上来,得到的值是0xfe,还是处于未加密状态.
写了几次后,单片机好像写出错,不知道和这有没有关系,但是传回来的值显示是未加密状态.
请问加密后单片机能否再写?读肯定是不行了.谢谢
作者: strongchen    时间: 2007-4-17 16:38

应该用
#pragma CONST_SEG SECUR_ROM
作者: 天涯倦客    时间: 2007-4-18 15:47

今天试了下,把CODE_SEG改成CONST_SEG,结果是一样的,加密不了.FSEC传回来的结果是0xfe.
作者: 天涯倦客    时间: 2007-4-18 15:48

今天试了下,把CODE_SEG改成CONST_SEG,结果是一样的,加密不了.FSEC传回来的结果是0xfe.
作者: strongchen    时间: 2007-4-18 15:57

“SECUR_ROM INTO ROM_FF0F;”这一句是否放在“PLACEMENT”后面?做一个简单的project,然后打包上传看一下吧。
作者: 天涯倦客    时间: 2007-4-18 16:03

是放在PLACEMENT后面,等下我打包上传.
作者: 天涯倦客    时间: 2007-4-18 16:42

http://bbs.chinaecnet.com/uploadImages/test_securD64.rar
打包好了,请帮忙看看,谢谢!
作者: strongchen    时间: 2007-4-18 17:09

因为你的程序中没有用到secur_byte这个常量,所以编译器把它优化掉了,没有生成代码,加个volatile声明即可,如下:

#pragma CONST_SEG SECUR_ROM
volatile const uchar secur_byte[2]={0x00,0x00};
#pragma CONST_SEG DEFAULT_ROM
作者: 天涯倦客    时间: 2007-4-18 18:57

版主,我有用到啊,我也是怕被优化掉了,所以在程序中特意加了两句:
x=secur_byte[0];
y=secur_byte[1];
其中x,y是全局变量,应该不会优化掉啊,我明天到公司加个volatile声明试试看.
作者: 天涯倦客    时间: 2007-4-18 19:09

刚才编译了,在map文件中好像真的被优化掉了,明天到公司写到芯片中看看实际的结果,谢谢!
作者: 天涯倦客    时间: 2007-4-19 09:11

今天来公司试验了,加密终于成功了,但是用这种方式的加密好像有问题,我通过这种方式加密后就不能通过codewarrior再写进去了.请问是这样的吗?
如果是这样,那实在是不方便,以后我要改写程序怎么办呢?
作者: strongchen    时间: 2007-4-19 09:41

用CodeWarrior调试界面里的unsecure把它解密,即全部擦除就可以再用了。
作者: 天涯倦客    时间: 2007-4-19 09:45

版主终于在线了,我上次有unsecure一次,好像芯片不能再用了,请问有可能会出现这个问题吗,我先试试把.
作者: strongchen    时间: 2007-4-19 09:48

不会的,unsecure只是把芯片擦空,不会损坏芯片的。
作者: 天涯倦客    时间: 2007-4-19 09:52

谢谢!已经成功了
作者: achao86926    时间: 2009-11-17 11:10

请问#pragma DATA_SEG 与#pragma CONST_SEG有什么区别呢?
我在codewarrior的帮助文档中发现又一句话,当没有#pragma CONST_SEG在源程序中时候,#pragma DATA_SEG 才会将变量分配在制定区域。
作者: chiusir    时间: 2009-11-20 19:41

本帖最后由 chiusir 于 2009-11-20 19:43 编辑
因为你的程序中没有用到secur_byte这个常量,所以编译器把它优化掉了,没有生成代码,加个volatile声明即可,如下:

#pragma CONST_SEG SECUR_ROM   
volatile const uchar secur_byte[2]={0x00,0x00};
#pragma CO ...
strongchen 发表于 2007-4-18 17:09
有位朋友的方法很不错:
一句话实现对FLASH加密:
const byte nvopt_user@0xFFBF=0XF0;//FLASH加密




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0