PIC单片机该怎么加密

见过很多初学者对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用户程序,继续不断的擦写那个失效字节,如果不能擦写,则说明加密成功,否则有另一个纠错程序就不讲了,各位可以自行想办法。

时间: 2024-10-10 22:36:14

PIC单片机该怎么加密的相关文章

PIC单片机汇编语言学习(一)

1.汇编语言的语句格式: 标号 操作码(指令助记符) 操作数 ;注释(label) (opcode) (operand) (comment) 2.常用伪指令 a.EQU——符号名赋值伪指令 格式:符号名 EQU nn b.ORG——程序起始地址定义伪指令 格式:ORG nnnn c.END——程序结束伪指令 格式:END d.LIST——列表选项伪指令 格式:LIST [可选项,可选项,......] e.INCLUDE:调入外部程序文件伪指令 格式:INCLUDE "文件名" 2.分

PIC单片机之PWM PWM原理

1,什么是PWM      什么是PWM,专业点说脉宽调制,通俗点说 就是不断的输出高低电平. 比如 单片机 40ms的时间 输出高电平然后60ms的时间 输出低电平接着一直不断周期性的交替输出高低电平 这就是典型的PWM波.高电平输出的时间40ms就是传说中的脉宽,40ms+60ms=100ms 便是PWM的周期.假定我们把周期定为100ms.我们可以根据我们的需要 把高电平的时间加大或者减小,比如 高电平输出时间加大为80ms.那么低电平的时间就变为20ms. 也可以 高电平输出时间减小为2

PIC单片机基础1

1.PIC单片机总线结构--哈佛结构:即指令和数据空间是完全分开的,所以与常见的微控制器不同的一点是,程序和数据总线可以采用不同的宽度.以PIC16F684单片机为例,数据总线是8位的,但指令总线位数是14位. 2.在PIC单片机中,我们将RAM存储器称作文件寄存器(F寄存器). 3.PIC中程序寄存器和数据存储器分开,两者总线不同: 以PIC16F684单片机为例: 1)程序存储器构成:具有一个13位程序计数器,物理上具有2Kx14(0000H-07FFH)存储空间.复位后初始地址为0000H

单片机通信的加密和解密

通信,有时候为了保证截获方即使得到了数据包,也不知道内容,所以加密传输即可:但有时候不需要知道数据包的内容,只要知道知道数据包能干嘛即可,比如发指令,此种情况单单对数据包进行加密就不够了. 基础知识: 1.单片机适用的数据加密算法有TEA,经过TEA加密的数据字节数和加密前的一样,只是数据不一样了 2.CRC:一个数据包,根据CRC算法的不同,可以得到不同长度的CRC值:CRC一方面保证数据不会被篡改,另一方面能检测传输过程是否出现错误 假定A为发送方,B为接收方 加密模型1: A:发送:请求临

关于PIC单片机18系列超低功耗软件编程的关键点

最近做了个PIC超低功耗的项目,对功耗要求非常高.之前也看到网上一些文章,写得很好,但实现测试下来还是不行的. 这里总结一下,给同行分享一下,软件编程上要注意以下几点, 1,不用的模块要关闭 这里的模块,不光是enable位,而是PMD 2,不用的IO口要置成输出 这里和网上其它文章说的输入不一样,实测下来我这边是输出待机电流更低 3,内部稳压一定要关闭 这里千万要注意:一定要选择通过"controlled by REGSLP bit",否则单片机SLEEP后就死了,再也不能烧写了,这

51,AVR,MSP430,PIC单片机的区别与联系

51单片机目前比较流行的是ATMEL公司的89S51,带Flash ROM编程的单片机,可以多次重复编程, AVR系列单片机也是ATMEL公司生产的一种8位单片机,采用RISC精简指令集,速度快,功耗低,并集成A/D转换,PWM,SPI,USART,IIC等资源,大大简化外围电路的设计,AVR单片机属于8位单片机的高端产品. MSP430是美国TI公司生产的,采用RISC指令集,除了资源丰富,其主要特点是超低功耗,但是多数都内存不大. PIC系列单片机MicroChip公司生产,也是RISC指令

我对单片机的理解

单片机,single chip microcomputer,单芯片微型计算机.总体来说,他就是一个芯片.但是他是一个特殊的芯片,因为他不是实现单独的逻辑功能.他是将一个整体的计算机系统集成到这个芯片上.这个计算机系统包括运算器,控制器,存储器,输入设备和输出设备. 其实单片机的学习,和计算机的学习差别不是太大.包括运算器,控制器,存储器,以及输入输出设备的学习. 运算器 运算器由运算部件--算术逻辑单元(alu).累加器.计算器等部件组成. 控制器 学习的难点在于涉及到指令方面的操作.控制器由程

【单片机】【PIC16F1937】之定时器

这篇文章是谈谈关于1937的定时器的,刚开始被晶振频率.时钟频率.振荡周期.振荡频率.指令周期.指令频率等等的名词绕晕了.先来解决这个问题. 晶振频率是代表振荡器的频率,说的是晶振这个器件的频率,因为一个单片机有内部外部晶振,比如你选择了内部晶振,那么这个晶振的频率就是你单片机的时钟频率, 振荡频率和晶振频率说的是一回事.振荡周期是1/(晶振频率),T = 1/f 嘛.指令周期这个根据单片机的不同会不同,8位的PIC单片机(PIC10/12/16/18系列)是4个时钟周期为一个指令周期.16位的

Matlab与单片机的串行通信及数据处理

http://hi.baidu.com/20066203/blog/item/891edf52f73278040df3e360.html 摘要:结合单片机和Matlab两者优点,基于事件驱动中断通信机制,提出一种Matlab环境下PC机与单片机实时串行通信及数据处理方法:完成单片机数据采集系统与PC机RS-232/RS-485串行通信及其通信数据分析处理.文件存储.FIR滤波及图形显示:简化系统开发流程,提高开发效率.该方法已成功应用于一个PIC16F876单片机应用系统实例之中. 关键词:PI