见过很多初学者对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用户程序,继续不断的擦写那个失效字节,如果不能擦写,则说明加密成功,否则有另一个纠错程序就不讲了,各位可以自行想办法。
关键字:PIC单片机 加密
引用地址:
PIC单片机该怎么加密
推荐阅读最新更新时间:2024-03-16 15:35
pic单片机p18f458A/D中断转换程序
//程序实现 A/D 转换功能,A/D采用中断方式。该程序通过p IC 单片机 p18f458的RA2模拟通道送入一直流 电压 , //当送入的直流电压大于2.5V时,与PORTD口相连的8个 发光二极管 闪动,当直流电压恢复到 //http://www.51hei.com 单片机 网提供此ad转换程序,有问题请联系本站。 //2.5V以下时,发光 二极管 停止闪动,且只有低四个发光。 #include p18f458.h union adres { int y1; unsigned char adre ; }adresult; //定义一个共用体,用于存放A/D转换的结果 unsigned char i; unsigne
[单片机]
PIC单片机开发技巧汇总
美国微芯公司(Microch{p Technology Inc.)开发的CM0S工艺PIC系列8位单片机(RISC微控制器),特别是采用内置第二代Flash存储器(40年存储寿命)的微控制器在快速应用 方面具有独到之处。由于其易用性和高可靠性,该系列微控制器稳居8位单片机全球出货量之首。PIC系列单片机具有指令集简洁、简单易学、速度高、功能强、 功耗低、价格低廉、体积小巧、适用性好及抗干扰能力强等特点,大量应用于汽车电气控制、电机控制、工业控制仪表和仪表、通信、家电、玩具、低功耗的测控应 用等领域,在国内越来越受到广大设计者的欢迎,微芯公司的单片机已经成为目前单片机世界的主流产品。 PIC 8位单片机内已经包含运算器、存储
[单片机]
加密货币价格跌六成,机构示警台积电,AMD遭做空
近期比特币价格跌跌不休,加密货币相关产业也面临高度风险,5月初,美系外资曾示警,认为挖矿获利将受到压缩,下修台积电目标价、维持中立评等。而外媒也报导,若加密货币价格无法回升,挖矿硬件设备可能遭遇产能停摆的窘境,擅长操盘科技股的对冲基金TMT Absolute Return不讳言,正在做空超微半导体(AMD)。 美国财经媒体报导,比特币、以太币等加密货币,近年来带动硬件需求增加,但如今加密货币价格一路暴跌,挖矿设备的需求可能会受到冲击。CoinDesk数据显示,比特币去年12月逼近20000美元,至今已下杀约60%左右。 挪威最大金融集团DNB ASA指出,加密货币遭抛售所造成的风险,除了货币本身外,对销售挖矿设备供应商的威
[半导体设计/制造]
细思极恐 俄罗斯强制所有消息应用留后门
斯诺登曝光的美国“棱镜门”,让很多互联网用户都开始担心自己的隐私安全,同时很多消息应用为了用户隐私,也都开始设置加密服务。不过,当面临恐怖问题时,政府和执法机关以及互联网公司间,该如何把握分寸成了难点。 俄罗斯强制所有消息应用留后门(图片来自IT之家)
据悉,俄罗斯杜马近日将出台一项法案,强制要求所有消息应用内置加密后门,以便相关互联网公司产品的加密通信内容能够让政府情报机关联邦安全局访问。另外,这项法案还要求相关公司必须保留所有用户聊天记录6个月,便于调查取证。
目前俄杜马以277票赞成、148票反对和1票弃权的结果通过来该法案,但还需经过俄罗斯联邦委员会和总统普京的批准才能正式成为法律,不过这在理
[手机便携]
PIC单片机之SPI从机框架
#include pic.h #include string.h #include STDIO.H __CONFIG(0x3F32); //芯片配置字 选择HS模式振荡器,关WDT typedef unsigned char uchar; typedef unsigned int uint; uchar resive=0; uchar resive1=0; uchar send_buf ={'S',0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,0x9,0xA,0xB,0xc,0xD,0xe,0xf}; uchar send_num=0; uchar resive_flag=0; #defi
[单片机]
PIC单片机程序设计的基本格式
为了快速掌握PIC 单片机 源程序的基本结构,这里给出一个典型的程序结构框架。建立源程序时首先用伪指令TITLE提供程序的标题,接着给出整个程序的总说明,并用列表伪指令LIST指定所用单片机型号和文件输出格式,再利用INCLUDE伪指令读入MPASM中提供的定义文件如《P16F84INC》,然后对片内常用资源进行定义,再给出一般程序的基本结构框架。现举例如下。 TITLE“This is……”;程序标题 ;程序说明 LIST P="16F84",F=1NHX8M ; include -config_RC_Qsc &_WDT_0FF… ;资源定义和变量定义 STATUS EQU 03 FS
[电源管理]
如何在PIC单片机上实现发送数据
该程序运行在pIC单片机p18f458上实现发送缓冲器0向接收缓冲器0发送数据的自测试模式,其中接收采用中断方式。 //发送采用查询方式 #include “p18f458.h” intCAN_FLAG; //定义标志寄存器 //**************初始化子程序*************** void initcan() { TRISB=(TRISB|0X08)&0XFB; //设置CANRX/RB3为输入,CANTX/RB2为输出 //设置CAN的波特率为125K,在Fosc=4M时,Tbit=8us,假设BRP=01h //则TQ=[2*(1+BRP)]/Fosc=2*(1+1)/4=1us。 //NOMINA
[单片机]
PIC单片机软件开发技巧
笔者的项目是有关机器人控制的实现。控制部分采用PICl6F7X系列单片机,运用汇编语言编程,运行速度较快,能够达到系统的要求。在这里使用的大多是数字信号的控制,电机的控制只有开和合两种状态。在动作的过程中需要两只手臂、身体、头部、脚部等的协调动作。整个控制系统比较复杂,因而在PIC程序编写和空间分配方面需要注意一些问题。
1 动作标志位的使用
在整个控制中,组合的动作很多,当所有动作定位都通过光电开关控制时,在程序编写上就有一些问题。如要求左手上升到鼓掌位、右手上升到举手位(手初始位置在最下的放下位),光电开关0有效(即为0时是挡住),到达正确位置。用简单的理解可以写成下面的程序:
list P=16c73
[单片机]