独闷闷网

 找回密码
 立即注册
搜索
查看: 1071|回复: 1
收起左侧

[原创] 如何在批量生产中利用烧录器把重要数据存入单片机ROM中?已解答。

[复制链接]
发表于 2015-5-22 08:13:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 jianhong_wu 于 2015-5-22 08:20 编辑

问:
如何在批量生产中利用烧录器把重要数据存入单片机ROM中?

坚鸿-深圳:
(1)优点和缺点。
     优点:对比EEPROM,把重要数据存入单片机ROM中的好处是几乎不会丢失,不容易被复制破解。
     缺点:操作稍微有点麻烦,而且只能在烧录时更改,平时不能在程序工作时更改。
(2)前提条件。
     第一个条件:必须借助专业的烧录器和配套软件。如果想用记事本打开.hex格式文件,直接在里面手工修改是不可能批量生产的。因为.hex格式代码,每一行最后一个字节都是该行的校验字节,如果我们手工修改某个数据,则该行最后一个校验字节也要根据算法进行变化,操作起来就太麻烦了,所以必须借助专用烧录器配套的软件。
     第二个条件:必须用一种办法找到改数据所在的.hex文件的位置,如果误改到.hex文件其它数据,后果不堪设想。
(3)具体方法分享:
     以PIC16F648A单片机为例子
     第一步:在C源代码中定义一个常量数组,该数据中填入容易识别,容易寻找的数字,比如:
  1. const unsigned char jishenhao[]=  
  2. {
  3. 0x11,
  4. 0x22,
  5. 0x33,
  6. 0x44,
  7. 0x55,
  8. 0x66,
  9. 0x77,
  10. 0x88,
  11. 0x99,
  12. 0xAA,
  13. };
复制代码

     第二步:把此C源代码编译后生成.hex格式文件,打开“海口鑫工电子有限公司”的MiniPro烧录器配套软件,选好对应的芯片型号后,调入此.hex格式文件,在烧录器软件窗口上能观察到十六进制的机器码,逐行寻找相邻的0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xAA,这些数据,结果发现某一行附近出现了3411,3422,3433,3444,3455,3466,3477,3488,3499,34AA,这些数据,凭感觉,这就是对应我们.c源代码常量数组的代码,但是为什么每个数据的前面多带了"34"这个前缀,凭我猜测,我估计这是机器码专用关键字,可能是用来表示后面的数字是常量的意思,因此我们千万不要更改到“34”这个关键字,否则后果不堪设想。
     第三步:寻找到常量数组在机器码文件的位置后,记住此常量数组在某一行左边的地址。根据此行首地址,可推出该行某个数据的具体地址,方便我们后续在烧录软件中更改此数据。如图:
烧录软件3.png
     第四步:在“操作”的下拉菜单中点击“自动编号设定”。
烧录器4.png
     第五步:在弹出的“芯片序列号设置”窗口中,分别选择“默认增量”和“CODE Memory”。如图:
烧录软件5.png
     第六步:在“芯片序列号设置”窗口中,设置"编号地址"。比如要更改0x11这个数据,通过机器码窗口可以推测此地址是0000C9。如果仅仅更改0x11这个字节的数据,由于每个字节前面多加了“34”这个前缀,所以“编号长度”选择“02”代表2个字节,如果是更改0x11,0x22这两个字节“编号长度”选择“04”代表附加2个“34”后共4个字节.下图是把0x11这个数据更改成0x62,方法是必须在“编号初始值”写入“3462”,"34"是前缀绝对不能省。然后点击“保存设置”就先保存了当前设置。
烧录6.png
      第七步:再调出“芯片序列号设置”窗口,点击“测试”,发现机器码区域的3411变成了3462,再次点击“测试”,模拟实际在批量烧录芯片时,发现此编号自动累加,实现了每烧录一个芯片的编号都是唯一的作用。
烧录软件7.png
      第八步:需要特别注意一个问题。此操作只能更改一个字节,也就是每次连续操作最大次数是255次,每255次后必须把第一个字节重新清零。因为如果超过255次继续操作,会由于进位而更改到前缀关键字“34”,后果不堪设想。那么,如果想存入的独立编号范围更大一些怎么办?在前面第六步的时候,在“编号长度”和"编号初始值"的选项中,可以把更改一个字节11的地址数据,改为更改两个字节11和22的地址数据,也就是3411,3422。当每次第一个字节到达255(0xff)时,先把第一个字节清零,然后把第二个字节手工输入不同的数据,继续进行下一次255此烧录。“编号长度”和"编号初始值"必须对应,不能搞错,否则可能会一不小心就更改了附近相邻的机器码(灾难性的后果!),读者可以自己测试几次看看它们的规律,我也是自己摸索出来的。




乐于分享,勇于质疑!
发表于 2015-5-22 08:32:43 | 显示全部楼层
这个方法比较好哟,特别是在烧录一些生产编号的时候特别有用。
乐于分享,勇于质疑!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|独闷闷网 ( 粤ICP备12007667号-2 )

GMT+8, 2019-9-22 17:53 , Processed in 0.130721 second(s), 20 queries .

快速回复 返回顶部 返回列表