见过许多初学者对PIC16系列单片机的ID码的读和写犯模糊。说实话,这方面的材料也不怎样全。有些教材或许会触及ID区域的介绍,但是往往是一代而过。这对初学者来说是比较简略犯错的当地。今日有空,对相关的问题作了一些收拾,共享给咱们。或许有些当地说的不行稳当,欢迎咱们多多讨论。
1.什么是ID区域?
ID区域是独立于EEPROM,FLASH,RAM的区域。程序设计人员能够使用该区域寄存软件的版本号,编写日期,烧录日期,产品标识等信息。不过该区域很小PIC16系列只能寄存4个字节。
2.ID码怎样烧录到ID区域里边去?
能够使用PICC自带的宏命令IDLOC(X)来完成。具体操作如下:
……………………………….//头文件 其它宏界说
__IDLOC(76F4); //留意:前面是两个下划线。括号里边最多能够有2个字节
void main()
{
……………………………..//程序主体
}
编译今后再用烧录东西烧到单片机中即可。这儿要提示一下,IDLOC(X)里边最多有2个字节的16进制数,超越部分会无效。比方你写个987FE3,E3会丢掉。别的得说一下这两个16进制数在ID区域是怎样放的。咱们现已知道IDLOC(X)里边能又个字节,而ID区域能放4个字节。以X=76F4为例,它们是这样放的07060F04。也便是说,在每个16进制数前加1个0。假如你写的不是2个字节的16进制数,比方是1个字节的78。编译器会在前面补0,那就成了0078。写到ID区域的便是00000708
3.ID码怎样读出来?
能够经过烧录东西跟编译器合作读出来。我用的是PICC跟ICD2。连好线,单片机上电今后,在编程形式下,经过履行Read Target Device操作,然后在Configure菜单下的Id memory
选项能够看到方才编程的时分设置的ID码。
其实,大都PIC都没有仅有ID,有人经过烧断PIC读出总线来完成,但设备需求克己。
只要是市场上很多出售的芯片,解密都不是什么麻烦事,只能尽量用新类型或许冷僻的类型。
有人用MCU内部的EEPROM这么搞过,但不是这么简略的这么搞,关于大批量出产来说,还需求一些技巧才干比较好的处理这个问题。
1、设置一个自检程序,经过特别操作(我有一个克己工装,能够把MCU的各个相关IO强行固定在某个逻辑电平上,软件判别逻辑组合,有必要契合一个特定组合才干进入特别操作发动代码,UART承受工装的通讯数据,通讯数据传入EEPROM要被擦写的次数和方位等)。
2、进入自检后,MCU张狂的擦写EEPROM中设定的某个方位(恰当进步一点VCC电压以加速失效),最多擦写200万次后中止操作,一般MCU自带的EEPROM擦写次数都不到100万次,EEPROM某个字节在0XAA和0X55之间不断的被循环擦写。
3、这个擦写的时刻仍是比较长的,一般要数十分钟以上,我一般放在产品通电老化阶段进行这个自检程序(产品一般要在老化房4~6个小时分通电老化时刻,自检程序兼容这个时刻履行,防止发生新的工时丢失)
4、擦写过程中在RAM中记载EEPROM该字节失效时的操作次数,并存入到EEPROM其他字节中。
5、产品正常出售中,履行APP用户程序,继续不断的擦写那个失效字节,假如不能擦写,则阐明加密成功,不然有另一个纠错程序就不讲了,各位能够自行想办法。