AVR单片机解锁方法

合集下载

avr解锁亲自验证可行

avr解锁亲自验证可行

无意中点击了编程熔丝位,芯片锁死(后来知道的)。

找到一种解决方法,分享一下。

刚刚把以前锁死的两块Mega16给解开锁,之前自己也解了很多次就是没解开。

在网上看了一些解锁的方法,都是说在ISP下载功能被禁止时,可以用JTAG下载来改变熔丝位ISPEN=0,让Mega16恢复ISP下载功能。

如果两种下载方式都被锁死的情况下,就只能用高压并行的方式来修改熔丝位。

还有一种很简单的方法就是在Mega16的XTAL1和XTAL2引脚接上一个振荡信号,使单片机能处在工作状态,改变其熔丝位。

Mega16的熔丝位配置错和对单片机的某些误操作很容易使单片机不能正常工作。

一种情况是在配置熔丝位时误将ISPEN或JTAGEN置为1(或没有在复选框中打钩),单片机的ISP和JTAG下载功能没有使
能,使得单片机被锁死。

还有一种情况是配置的时钟源熔丝位CKSEL3/0与单片机本身工作的时钟源不相符,这也是单片机被锁死的原因。

我的两块Mega16都是由于时钟源选择错误导致被锁死,我也是今天刚注意到这个问题的。

我将一块正常运行的51的XTAL2与Mega16的XTAL1连接,将51的XTAL1与Mega16的XTAL2连接,这样被锁死的Mega16就可以正常运行了。

然后,先要在读取其熔丝位的配置,然后我把时钟源CKSEL3/0的熔丝位改成内部RC振荡8MHZ(改成自己单片机适合的熔丝位即可),将改后的配置写入单片机。

最后将与51连接的线断开,重新将下载器与电脑接上,就可以给M16下载程序了。

自制AVR高压并行编程器,可以恢复熔丝位,解锁

自制AVR高压并行编程器,可以恢复熔丝位,解锁
板载12V专业DC-DC升压电路模块,板载大容量主控芯工小巧精美。
支持ATMEL官网罗列的几乎所有ATMEGA系列芯片和ATTINY芯片。编程无64K代码限制,并行编程可随意编程熔丝、FLASH、EEPROM,轻松解锁三合一,AVR高压串行,高压并行,普通ISP,史上功能最强的简易AVR编程器,终极版。
自制avr高压并行编程器可以恢复熔丝位解锁avr熔丝位设置avr熔丝位avr熔丝反熔丝熔丝配置avr编程器熔丝位手机熔丝高压熔丝熔丝开关
自制AVR高压并行编程器,可以恢复熔丝位,解锁
具体制作过程分享如下:
三合一,AVR高压串行,高压并行,普通ISP,史上功能最强的简易AVR编程器,终极版。
自主知识产权,真正的USB通信(非转串口),速度提升,性能稳定。
三合一,AVR高压串行,高压并行,普通ISP,史上功能最强的简易AVR编程器,终极版。
自主知识产权,真正的USB通信(非转串口),速度提升,性能稳定。
板载12V专业DC-DC升压电路模块,板载大容量主控芯片,板载标准ISP下载接口,板载500mA过流保护,板子做工小巧精美。
支持ATMEL官网罗列的几乎所有ATMEGA系列芯片和ATTINY芯片。编程无64K代码限制,并行编程可随意编程熔丝、FLASH、EEPROM,轻松解锁
三合一,AVR高压串行,高压并行,普通ISP,史上功能最强的简易AVR编程器,终极版。
自主知识产权,真正的USB通信(非转串口),速度提升,性能稳定。
板载12V专业DC-DC升压电路模块,板载大容量主控芯片,板载标准ISP下载接口,板载500mA过流保护,板子做工小巧精美。
支持ATMEL官网罗列的几乎所有ATMEGA系列芯片和ATTINY芯片。编程无64K代码限制,并行编程可随意编程熔丝、FLASH、EEPROM,轻松解锁

AVR单片机解密

AVR单片机解密

功能介绍
功能介绍
AVR与传统类型的单片机相比,在IC芯片解密技术中除了必须能实现原来的一些基本的功能,其在结构体系、 功能部件、性能和可靠性等多方面有很大的提高和改善。
但使用更好的器件只是为设计实现一个好的系统创造了一个好的基础和可能性,如果还采用和沿袭以前传统 的硬件和软件设计思想和方法的话,是不能用好AVR的,甚至也不能真正的了解AVR的特点和长处。
型号标识解析
型号标识解析
1.型号紧跟的字母,表示电压工作范围。带“V”:1.8-5.5V;若缺省,不带“V”:2.7-5.5V。 例: ATmega48-20AU,不带“V”表示工作电压为2.7-5.5V。 2.后缀的数字部分,表示支持的最高系统时钟。 例: ATmega48-20AU,“20”表示可支持最高为20MHZ的系统时钟。 3.后缀第一(第二)个字母,表示封装。“P”: DIP封装,“A”:TQFP封装,“M”:MLF封装。 例:ATmega48-20AU,“A”表示TQFP封装。 4.后缀最后一 个字母,表示应用级别。“C”:商业级,“I”:工业级(有铅)、“U”工业级(无铅)。 例:ATmega4820AU,“U”表示无铅工业级。ATmega48-20AI,“I”表示有铅工业级。
AVR单片机解密
利用单片机芯片设计上的漏洞或软件缺陷从芯片中提取关键信息的 过程
目录
01 定义
03 型号标识解析
02 功能介绍 04 防止解密方法
基本信息
AVR单片机攻击者借助专用设备或者自制设备,利用单片机芯片设计上的漏洞或软件缺陷,通过多种技术手 段,就可以从芯片中提取关键信息,获取单片机内程序,这就是AVR芯片解密。其实,一般情况下,能破解的AVR 单片机都是小芯片/**(直接说就是模仿其功能而新开发新程序),因此解密难度都是不是很大。

(完整版)单片机解密方法简单介绍(破解)

(完整版)单片机解密方法简单介绍(破解)

单片机解密方法简单介绍下面是单片机解密的常用几种方法,我们做一下简单介绍:1:软解密技术,就是通过软件找出单片机的设计缺陷,将内部OTP/falsh ROM 或eeprom代码读出,但这种方法并不是最理想的,因为他的研究时间太长。

同一系列的单片机都不是颗颗一样。

下面再教你如何破解51单片机。

2:探针技术,和FIB技术解密,是一个很流行的一种方法,但是要一定的成本。

首先将单片机的C onfig.(配置文件)用烧写器保存起来,用在文件做出来后手工补回去之用。

再用硝酸熔去掉封装,在显微镜下用微形探针试探。

得出结果后在显微镜拍成图片用FIB连接或切割加工完成。

也有不用FIB用探针就能用编程器将程序读出。

3:紫外线光技术,是一个非常流行的一种方法,也是最简单的一种时间快、像我们一样只要30至1 20分钟出文件、成本非常低样片成本就行。

首先将单片机的Config.(配置文件)用烧写器保存起来,再用硝酸熔去掉封装,在显微镜下用不透光的物体盖住OTP/falsh ROM 或eeprom处,紫外线照在加密位上10到120分钟,加密位由0变为1就能用编程器将程序读出。

(不过他有个缺陷,不是对每颗OT P/falsh都有效)有了以上的了解解密手段,我们开始从最简的紫外光技术,对付它:EMC单片机用紫外光有那一些问题出现呢?:OTP ROM 的地址(Address:0080H to 008FH) or (Address:0280h to 028FH) 即:EMC的指令的第9位由0变为1。

因为它的加密位在于第9位,所以会影响数据。

说明一下指令格式:"0110 bbb rrrrrrr" 这条指令JBC 0x13,2最头痛,2是B,0X13是R。

如果数据由0变为1后:"0111 bbb rrrrrrr"变成JBS 0x13,2头痛啊,见议在80H到8FH 和280H到28FH多用这条指令。

AVR单片机解锁器的制作以及熔丝配置

AVR单片机解锁器的制作以及熔丝配置

A VR单片机解锁器的制作以及熔丝配置随着A VR单片机日益普及,很多单片机爱好者都试用了这种类型的快速8位单片机。

由于单片机试用ISP下载线下载代码到单片机中,而A VR单片机内部又具有可编程振荡模式选择熔丝位,初学A VR 单片机,对熔丝位的配置有时很不了解,很容易误写熔丝位,结果是单片机锁死无法再次使用。

本人也是刚学A VR单片机也遇到了这种情况,根据自己的经验写下此文希望对初学者用帮助。

首先说说怎么样设置熔丝位。

本人使用串口ISP下载自己制作的串口下载器,试用的是SLISP下载软件(天龙)。

SLISP安装后,确保下载器连接正确,单片机放置正确,点击配置熔丝弹出熔丝配置设置,将最后一个[ ]Int(……………………)勾选上,再将JTAG Interface Enable勾掉,然后点击写入,确定,是,最后点击确定完成熔丝的配置,而界面上的配置熔丝可选可不选。

下面说说A VR单片机锁死后的解锁。

按照下面的电路图正确连接制作时需要注意本电路试用正负电压。

7805和7905的管脚连接方式不一样,正对自己,7805左边输入,中间地,右边输出,7905左边地,中间输入,右边输出。

电阻R为1MΩ,电阻R1为2~6.5KΩ,晶振最好为2~16Mhz,输出为一定频率的方波。

使用方法:电路制作好后,正确和电源连接,将输出A VR解锁器的输出脚和单片机的XTAL1相连再次下载,写入正确的熔丝配置既可解锁,本人经过测试可以解决大部分A VR单片机锁死的情况,同时,有了它可以节约资源避免浪费。

经验之谈:熔丝配置时,点去JTAG后,最好不要勾选选择EXT 选项。

本人在自己的电脑上每次勾选单片机总是锁死。

由于本人也是初学,所以一切只能作为参考!!A VR单片机解锁器的制作以及熔丝配置作者:张仁友2010年2月1日。

自制AVR高压并行编程器,可以恢复熔丝位,解锁

自制AVR高压并行编程器,可以恢复熔丝位,解锁
自主知识产权,真正的USB通信(非转串口),速度提升,性能稳定。
板载12V专业DC-DC升压电路模块,板载大容量主控芯片,板载标准ISP下载接口,板载500mA过流保护,板子做工小巧精美。
支持ATMEL官网罗列的几乎所有ATMEGA系列芯片和ATTINY芯片。编程无64K代码限制,并行编程可随意编程熔丝、FLASH、EEPROM,轻松解锁
自制AVR高压并行编程器,可以恢复熔丝位,解锁
具体制作过程分享如下:
三合一,AVR高压串行,高压并行,普通ISP,史上功能最强的简易AVR编程器,终极版。
自主知识产权,真正的USB通信(非转串口),速度提升,性能稳定。
板载12V专业DC-DC升压电路模块,板载大容量主控芯片,板载标准ISP下载接口,板载500mA过流保护,板子做工小巧精美。
三合一,AVR高压串行,高压并行,普通ISP,史上功能最强的简易AVR编程器,终极版。
自主知识产权,真正的USB通信(非转串口),速度提升,性能稳定。
板载12V专业DC-DC升压电路模块,板载大容量主控芯片,板载标准ISP下载接口,板载500mA过流保护,板子做工小巧精美。
支持ATMEL官网罗列的几乎所有ATMEGA系列芯片和ATTINY芯片。编程无64K代码限制,并行编程DC升压电路模块,板载大容量主控芯片,板载标准ISP下载接口,板载500mA过流保护,板子做工小巧精美。
支持ATMEL官网罗列的几乎所有ATMEGA系列芯片和ATTINY芯片。编程无64K代码限制,并行编程可随意编程熔丝、FLASH、EEPROM,轻松解锁
三合一,AVR高压串行,高压并行,普通ISP,史上功能最强的简易AVR编程器,终极版。
支持ATMEL官网罗列的几乎所有ATMEGA系列芯片和ATTINY芯片。编程无64K代码限制,并行编程可随意编程熔丝、FLASH、EEPROM,轻松解锁三合一,AVR高压串行,高压并行,普通ISP,史上功能最强的简易AVR编程器,终极版。

AVR单片机解锁简单方法分享

AVR单片机解锁简单方法分享

AVR单片机解锁简单方法分享
90%以上的都能解锁成功
方法一:
我按ouravr里面的方法解锁:通过外加有源晶振的办法,让其恢复。

这个方法最可行。

它可以恢复大部分熔丝位搞错的芯片。

方法二:
还有一个办法,如果没有有源晶振的话可以用其他工作正常的单片机的时钟作为外部晶振,只要将工作正常的单片机的XTAL2脚连接熔丝设置错误的单片机的 XTAL1引脚即可。

像我使用AVR910下载线的可直接把AT90S2313的时钟输出连到被设置错的芯片就可恢复了,很方便。

(此方法由彩虹数码提供),刚开始还是不行,无法擦除,后来我把原来的有源晶振取下,再下载,发现可以了,之后我就重新配置了下熔丝位,发现可以了,单片机工作正常。

方法三:[亲测可行]
如果在改熔丝位的时候不小心锁了单片机(下载不了程序),可以用一块AT89s51/52最小系统,上电后,将s52的第30脚(ALE 脚)和avr单片机的第13脚(时钟输入脚-XTAL1)用杜邦线连起来,然后在给avr下载程序,avr单片机就解锁了。

或者用别的时钟都行(峰值电压要够),如 RC网络,波形发生器等。

单片机芯片解密的一般过程

单片机芯片解密的一般过程

单片机芯片解密的一般过程侵入型攻击的第一步是揭去芯片封装(简称开盖有时候称开封,英文为DECAP,decapsulation)。

有两种方法可以达到这一目的:第一种是完全溶解掉芯片封装,暴露金属连线。

第二种是只移掉硅核上面的塑料封装。

第一种方法需要将芯片绑定到测试夹具上,借助绑定台来操作。

第二种方法除了需要具备攻击者一定的知识和必要的技能外,还需要个人的智慧和耐心,但操作起来相对比较方便。

芯片上面的塑料可以用小刀揭开,芯片周围的环氧树脂可以用浓硝酸腐蚀掉。

热的浓硝酸会溶解掉芯片封装而不会影响芯片及连线。

该过程一般在非常干燥的条件下进行,因为水的存在可能会侵蚀已暴露的铝线连接(这就可能造成解密失败)。

接着在超声池里先用丙酮清洗该芯片以除去残余硝酸,然后用清水清洗以除去盐分并干燥。

没有超声池,一般就跳过这一步。

这种情况下,芯片表面会有点脏,但是不太影响紫外光对芯片的操作效果。

最后一步是寻找保护熔丝的位置并将保护熔丝暴露在紫外光下。

一般用一台放大倍数至少100倍的显微镜,从编程电压输入脚的连线跟踪进去,来寻找保护熔丝。

若没有显微镜,则采用将芯片的不同部分暴露到紫外光下并观察结果的方式进行简单的搜索。

操作时应用不透明的纸片覆盖芯片以保护程序存储器不被紫外光擦除。

将保护熔丝暴露在紫外光下5~10分钟就能破坏掉保护位的保护作用,之后,使用简单的编程器就可直接读出程序存储器的内容。

对于使用了防护层来保护EEPROM单元的单片机来说,使用紫外光复位保护电路是不可行的。

对于这种类型的单片机,一般使用微探针技术来读取存储器内容。

在芯片封装打开后,将芯片置于显微镜下就能够很容易的找到从存储器连到电路其它部分的数据总线。

由于某种原因,芯片锁定位在编程模式下并不锁定对存储器的访问。

利用这一缺陷将探针放在数据线的上面就能读。

单片机解密方法简单介绍(破解)

单片机解密方法简单介绍(破解)

单片机解密方法简单介绍下面是单片机解密的常用几种方法,我们做一下简单介绍:1:软解密技术,就是通过软件找出单片机的设计缺陷,将内部OTP/falsh ROM 或eeprom代码读出,但这种方法并不是最理想的,因为他的研究时间太长。

同一系列的单片机都不是颗颗一样。

下面再教你如何破解51单片机。

2:探针技术,和FIB技术解密,是一个很流行的一种方法,但是要一定的成本。

首先将单片机的C onfig.(配置文件)用烧写器保存起来,用在文件做出来后手工补回去之用。

再用硝酸熔去掉封装,在显微镜下用微形探针试探。

得出结果后在显微镜拍成图片用FIB连接或切割加工完成。

也有不用FIB用探针就能用编程器将程序读出。

3:紫外线光技术,是一个非常流行的一种方法,也是最简单的一种时间快、像我们一样只要30至1 20分钟出文件、成本非常低样片成本就行。

首先将单片机的Config.(配置文件)用烧写器保存起来,再用硝酸熔去掉封装,在显微镜下用不透光的物体盖住OTP/falsh ROM 或eeprom处,紫外线照在加密位上10到120分钟,加密位由0变为1就能用编程器将程序读出。

(不过他有个缺陷,不是对每颗OT P/falsh都有效)有了以上的了解解密手段,我们开始从最简的紫外光技术,对付它:EMC单片机用紫外光有那一些问题出现呢?:OTP ROM 的地址(Address:0080H to 008FH) or (Address:0280h to 028FH) 即:EMC的指令的第9位由0变为1。

因为它的加密位在于第9位,所以会影响数据。

说明一下指令格式:"0110 bbb rrrrrrr" 这条指令JBC 0x13,2最头痛,2是B,0X13是R。

如果数据由0变为1后:"0111 bbb rrrrrrr"变成JBS 0x13,2头痛啊,见议在80H到8FH 和280H到28FH多用这条指令。

34、AVR单片机视频教程 红外遥控解码实验

34、AVR单片机视频教程 红外遥控解码实验

编程说明
• 使用AVR开发环境,使用的是内部1M的晶振,所以需要将熔 丝位的时钟频率修改为1M。(一定不要选择错了,否则会导致单 片机不能再烧写程序)。
做完本实验后,请改回外部12M熔丝位
• 外部12M熔丝位设置
车载MP3遥控器
使用时要取下电池门卡糟胶片
数码管显示代码
• 打开实验项目
LCD1602显示代码
• 打开实验项目
数码管显示实验效果
实验效果
谢谢
程序功能
• 利用串口将单片机从一体化红外接收器接收到的红外遥控键 值发送到数码管/(LCD1602),在数码管/(LCD1602)观察接收 到的数据。
• 编程过程中,我们利用单片机的外部中断0口进行检测,一 旦检测到有红外遥控信号出现,则程序进入外部中断处理程序, 在处理数据过程中关闭外部中断,直到接收完数据,再将外部中 断打开。
引导码 连发码

当一个键按下超过36ms,振荡器使芯片激活,将发射一组108ms的编码
脉冲,这108ms发射代码由一个引导码(9ms),一个结果码(4.5ms),低8位
地址码(9ms~18ms),高8位地址码(9ms~18ms),8位数据码(9ms~18ms)和
这8位数据的反码(9ms~18ms)组成。如果键按下超过108ms仍未松开,接下
遥控码特征
• 采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进 制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的“1”, 其波形如图
• 上述“0”和“1”组成的32位二进制码经38kHz的载频进行二次调制以提高发射效率, 达到降低电源功耗的目的。然后再通过红外发射二极管产生红外线向空间发射,如图

单片机芯片解密

单片机芯片解密

单片机芯片解密单片机芯片解密是指对一种未公开的单片机芯片进行逆向工程,从而获得解密的过程和方法。

单片机芯片解密的目的主要是为了得到芯片的内部结构和功能,以便进行后续的修改、仿制或破解。

单片机芯片解密的过程通常分为以下几个步骤:1. 芯片取样:首先需要从目标芯片中取得一块实物样品。

取样可以通过从市场上购买芯片、请求芯片供应商提供或通过其他合法渠道进行。

2. 芯片分析:芯片取样之后,需要对芯片进行物理结构分析。

这包括进行芯片外观观察、尺寸测量和材料成分测试等。

3. 芯片反向工程:在芯片分析的基础上,需要进行芯片的电路结构和功能分析。

这个过程需要通过使用电子显微镜、探针仪、逻辑分析仪等工具来研究芯片的内部电路结构。

4. 芯片解密:在芯片反向工程的基础上,需要对芯片进行具体的解密工作。

这包括解密算法破解、加密芯片的功能分析、解密程序的编写等。

5. 解密结果验证:芯片解密完成后,需要对解密结果进行验证,确保得到的数据或程序与原始芯片相符合。

这可以通过对比验证、仿真测试等方法进行。

单片机芯片解密需要具备一定的电子技术和逆向工程的知识。

对于不同型号的芯片,解密的过程和方法也会有所不同。

微控制器芯片解密是单片机芯片解密的一种,它通常在解密过程中会涉及到微控制器的保护、加密和安全机制。

单片机芯片解密一直是个敏感话题,因为它涉及到知识产权和商业机密。

在某些情况下,芯片供应商可能采取技术手段来保护其芯片的安全性,例如电子保护、物理保护和法律保护等。

总之,单片机芯片解密是一项技术含量较高的工作,它需要对芯片的物理结构和电路设计进行深入研究,以及对解密算法和程序进行分析和破解。

AVR单片机熔丝位解锁

AVR单片机熔丝位解锁

一周报告阅读的文献关于单片机的熔丝位设置错误的解救方法AVR单片机解锁器的制作以及熔丝配置AVR单片机熔丝位汇总研究日志关于AVR单片机在使用的时候,初始使用ISP下载时,需要对AVR单片机的熔丝位进行配置,配置的时候会经常出现错误,这样会造成单片机无法起振,单片机无法工作,就是通常所说的锁死。

当然单片机的内部结构都是好的,如果仅仅是因为单片机的熔丝位锁死就废弃单片机这样会造成极大的浪费,本身每一块的AVR单片机成本比较贵,解锁成为每一个电子工程师必备的基本技能之一。

因此参照网络上面的各种文献,以及图书馆的书,采用一种行之有效并且较为简单的方法来给上锁的单片机解锁。

我现在在实验室采用的是有源晶振解锁的方法!大多数的单片机锁死,是因为在给下图所示的熔丝位配置时出错,最常见的是晶振位出错(位置在熔丝低位),CKSEL0,CKSEL1,CKSEL2,CKSEL3,这几位是设置初始时候使用内部RC震荡还是外部晶振来提供时钟脉冲的。

解决方法如下:再市场上面买一个大于2M的有源晶振,四个引脚。

如下图所示:各个引脚及对应的封装都可以秦楚看见。

下面介绍解锁使用的电路,引脚8输出,1引脚无连接,14引脚为+5DC电源,7接地(引脚的标号及时跟前面的两幅图中一样)。

这样将输出的引脚8和单片机的XTAL1相连接,ATmega16为13引脚(单片机封装上面的13引脚);ATmega128为24引脚(同样为封装上面的引脚号)。

连接好电路之后,就是使用ISP下载软件读取熔丝位,然后修改。

下面给出错误的熔丝位设置(错误的熔丝位设置)。

下面的图为修改后真确的熔丝位设置:徐伟2012年6月22日。

AVR单片机Bootloader程序

AVR单片机Bootloader程序

1.程序逻辑BootLoader的升级协议是基于128字节数据块的Xmodem通信协议,采用CRC16校验。

Xmodem 协议的帧格式Byte1Byte2Byte3Byte4~Byte131Byte132~Byte133控制字符包序号包序号反码128字节数据校验和升级协议具体流程:序程redaoLtooB机片单RVA下位机发送升级请求密码,等待上位机的升级密码boot96,5秒的时间内若上位机没有发送升级密码,下位机进入用户程序。

上位机有升级指令发送时,下位机间断发送’C’等待上位机接收并开始发送数据,若数据连续三次校验错误那么进入用户程序,成功发送后进入用户程序执行刚写入的程序。

2.平台及程序结构基于ATmega328PB 单片机,20M 晶振,AtmelStudio平台。

包括下图四个文件。

3.程序代码3.1.Bootloader.h 头文件#include <avr/io.h>#include <avr/wdt.h>#include <avr/boot.h>#include <avr/pgmspace.h>#ifndef BOOTLOADER_H_#defineBOOTLOADER_H_#ifndef F_CPU #define F_CPU20000000UL //20M 时钟频率#endif#define BAUDRATE 4800//串口波特率#define BAUDREG ((unsigned int)((F_CPU *10)/(16UL *BAUDRATE)-5)/10)//超时次数#define TimeOutCnt25//发送'C'的最大次数#define TimeOutCntC 10//同步时间间隔(ms)#define timeclk 200//同步密码长度#define CONNECTCNT 6//Boot 区起始地址#define BootStart 0x3C00UL //由具体硬件设置#define RS4850#ifRS485AVR单片机BootLoader程序#define RS485PORT xxxxx #define RS485TXEn xxxxx#define RS485Enable()PORTREG(RS485PORT)|=(1<<RS485TXEn)#define RS485Disable()PORTREG(RS485PORT)&=~(1<<RS485TXEn)#endif //同步密码unsigned char KEY []={'b','o','o','t','9','6',0x0E ,0x1C ,0x39,0x14,0x28,0x57,0xAA };//用户程序起始地址#define PROG_START 0x0000#define BUFFERSIZE 128#define BUFSIZE BUFFERSIZE//接收缓冲区unsigned char buf [BUFSIZE ];unsigned char bufptr ,pagptr ;unsigned char ch ,cl ;//Flash 地址unsigned int FlashAddr ;//提示信息const char msg1[20]="Waiting for password";const char msg2[8]="Time out";const char msg3[23]="Waiting to receive file";const char msg4[17]="Upgrade successed";const char msg5[14]="Upgrade failed";//Xmoden 控制字符#define XMODEM_NUL 0x00#define XMODEM_SOH 0x01#define XMODEM_STX 0x02#define XMODEM_EOT0x04#define XMODEM_ACK 0x06#define XMODEM_NAK0x15#define XMODEM_CAN 0x18#define XMODEM_EOF0x1A #define XMODEM_RWC 0x43//'C'#define DataInCom()((UCSR0A)&(1<<RXC0))#define ReadCom()UDR0#endif /*BOOTLOADER_H_*/AVR单片机BootLoader程序3.2.Bootloader.c 文件#include <avr/io.h>#include <compat/ina90.h>#include <avr/interrupt.h>#include <avr/sleep.h>#include <util/delay.h>#include <avr/pgmspace.h>#include <stdlib.h>#include "BootLoader.h"#include "usart.h"sram global ;//全局变量结构体//使用定时器1:产生以毫秒为单位的时间void TimerInit (){OCR1A =(unsigned int )(timeclk *(F_CPU /(1024*1000.0f )));//200msTCCR1A =0;//普通端口TCCR1B =(1<<WGM12)|(1<<CS12)|(1<<CS10);//CTC1024分频}//更新一个Flash 页void write_one_page (unsigned char *buf ){boot_page_erase (FlashAddr );//擦除FLASH 指定页boot_spm_busy_wait ();for (pagptr =0;pagptr <SPM_PAGESIZE ;pagptr +=2)//SPM_PAGESIZE 128{boot_page_fill (pagptr ,buf [pagptr ]+(buf [pagptr +1]<<8));//填充BootLoader 缓冲页}boot_page_write (FlashAddr );//缓冲写入FLASH 指定页boot_spm_busy_wait ();}//跳转到用户程序void quit (){boot_rww_enable ();//RWW 区读使能(*((void (*)(void ))PROG_START ))();//用户程序起始地址PROG_START 0x0000}int main (void ){AVR单片机BootLoader程序unsigned char cnt ;unsigned char packNO ;unsigned char crch ,crcl ;unsigned int crc ;unsigned char li ;_CLI ();//关中断USART_Init ();_delay_ms (1000);TimerInit ();//定时器初始化,CTC 普通端口USART_Transmit ((unsigned char *)msg1,20);//Waiting for passwordcnt =TimeOutCnt ;//超时次数255s 1s 发送一个等待密码cl =0;while (1){if (TIFR1&(1<<OCF1A ))//自动重载{TIFR1|=(1<<OCF1A );if (cl ==CONNECTCNT )//密码长度6break ;cnt --;if (cnt ==0){USART_Transmit ((unsigned char *)msg2,8);//Time outquit ();}if (cnt %5==0)USART_Transmit ((unsigned char *)msg1,20);//Waiting for password}if (DataInCom ()){if (ReadCom ()==KEY [cl ])//接收密码cl ++;elsecl =0;}}USART_Transmit ((unsigned char *)msg3,23);//Waiting to receive file cnt =TimeOutCntC ;//发送'C'超时次数10while (1){AVR单片机BootLoader程序if (TIFR1&(1<<OCF1A )){TIFR1|=(1<<OCF1A );WriteCom (XMODEM_RWC );//发送'C'cnt --;if (cnt ==0){USART_Transmit ((unsigned char *)msg2,8);//Time out quit ();}}if (DataInCom ()){if (ReadCom ()==XMODEM_SOH )//接收数据SOH 0x01break ;}}TCCR1B =0;packNO =0;cnt =0;FlashAddr =0x0000;do {packNO ++;bufptr =0;ch =WaitCom ();cl =~WaitCom ();if ((packNO ==ch )&&(packNO ==cl )){WriteCom (XMODEM_ACK );for (li =0;li <BUFFERSIZE ;li ++)//接收128个字节数据buf [bufptr ++]=WaitCom ();crch =WaitCom ();crcl =WaitCom ();crc =crc16(buf ,BUFFERSIZE );//CRC 校验ch =crc /256;cl =crc %256;if ((crch ==ch )&&(crcl ==cl ))//如果校验符合{if (FlashAddr <BootStart ){write_one_page (buf );//写flash 写一页FlashAddr +=SPM_PAGESIZE ;AVR单片机BootLoader程序}WriteCom (XMODEM_ACK );//发送ACKcnt =0;}else {WriteCom (XMODEM_NAK );//发送NAK cnt ++;}}else {WriteCom (XMODEM_NAK );//发送NAKcnt ++;}if (cnt >3)//无应答次数break ;}while (WaitCom ()!=XMODEM_EOT );//等待全部接收XMODEM_EOT 0x04WriteCom (XMODEM_ACK );_delay_ms (50);if (cnt ==0){USART_Transmit ((unsigned char *)msg4,17);//升级成功Upgrade successedquit ();}else {USART_Transmit ((unsigned char *)msg5,14);//Upgrade failed while (1);//应该是升级失败不让进入用户程序避免程序错乱带来不必要的麻烦}quit ();//跳转到用户程序return 0;}3.3.usart.h 头文件#ifndef USART_H_#define USART_H_#define RS485_RX PORTD &=~((1<<PORTD2)|(1<<PORTD3))//Receiving #define RS485_TXPORTD |=(1<<PORTD2)|(1<<PORTD3)//Transmitting#define RS485_HIGHZ PORTD |=(1<<PORTD3);PORTD &=~(1<<PORTD2)//High-Z void USART_Init (void );//串口初始化AVR单片机BootLoader程序unsigned char WaitCom ();//接收单字节void WriteCom (unsigned char dat );//发送单字节void USART_Transmit (unsigned char *data ,char num );//发送函数unsigned int crc16(unsigned char *buf ,unsigned char n );//CRC 校验//#define IDEL 0x00//#define ID_ACCORD 0X01//#define COMMAND 0x02//#define READ_COMMAND 0x03//#define WRITE_COMMAND 0x04#define TRANSMITTING 0x10//#define DATA_READY 0x08//#define KEY_MODE 0x07//按键模式//#define GetFreq_MODE 0x80//测试模式//#define BOOTLAODER_MODE 0xf0//Booterloader 升级#define USARTBUFNUM GPIOR1//串口字节个数typedef struct {unsigned char ptr ;unsigned char state ;unsigned char command ;unsigned char savestate ;//保存状态unsigned char *usartbuf ;unsigned char comBuffer [150];}sram ;extern sram global ;//全局变量结构体#endif /*USART_H_*/art.c 文件#include <avr/io.h>#include <compat/ina90.h>#include <avr/interrupt.h>#include <avr/sleep.h>#include <util/delay.h>#include <avr/wdt.h>#include "usart.h"//#include "wdtg.h"SIGNAL (USART0_RX_vect ){}AVR单片机BootLoader程序SIGNAL (USART0_UDRE_vect ){}SIGNAL (USART0_TX_vect ){}void USART_Init (void ){DDRD |=(1<<DDD1)|(1<<DDD2)|(1<<DDD3);//485芯片控制引脚输出PORTD |=(1<<PORTD2)|(1<<PORTD3);//184芯片引脚控制输出高TX PORTD |=(1<<PORTD1)|(1<<PORTD0);//TX 输出高,RX 上拉输入//UBRR0=143;//4800UBRR0=259;//1434800(11059200/16/4800-1)UCSR0B =(1<<RXEN0);//串口0接收使能UCSR0C =(1<<UCSZ01)|(1<<UCSZ00);RS485_RX ;}unsigned char WaitCom (){while (!(UCSR0A &(1<<RXC0)));return UDR0;}void WriteCom (unsigned char dat ){RS485_TX ;/*发送状态*/UCSR0B =(1<<TXEN0);/*发送使能*/UDR0=dat ;while (!(UCSR0A &(1<<TXC0)));UCSR0A |=(1<<TXC0);RS485_RX ;/*接收状态*/UCSR0B =(1<<RXEN0);/*接收使能*/}void USART_Transmit (unsigned char *data ,char num ){char i ;RS485_TX ;/*发送状态*/UCSR0B =(1<<TXEN0);/*发送使能*/for (i =0;i <num ;i ++){while (!(UCSR0A &(1<<UDRE0)));/*等待数据寄存器为空*/AVR单片机BootLoader程序UDR0=*data ;data ++;}UCSR0B =(1<<TXEN0);/*发送使能*/while ((UCSR0A &(1<<TXC0))==0);/*等待发送结束*/UCSR0A |=(1<<TXC0);/*发送结束标志位清零*/RS485_RX ;/*接收状态*/UCSR0B =(1<<RXEN0);/*接收使能*/}//CRC 校验unsigned int crc16(unsigned char *buf ,unsigned char n ){unsigned char j ;unsigned char i ;unsigned int crc ,t ;crc =0;for (j =n ;j >0;j --){crc =(crc ^(((unsigned int )*buf )<<8));for (i =8;i >0;i --){t =crc <<1;if (crc &0x8000)t =t ^0x1021;crc =t ;}buf ++;}//ch =crc /256;//cl =crc %256;return crc ;}AVR单片机BootLoader程序。

单片机解密(破解)方法和对策研究

单片机解密(破解)方法和对策研究

单片机解密的常用方法及应对策略本文介绍了单片机内部密码破解的常用方法,重点说明了侵入型攻击/物理攻击方法的详细步骤,最后,从我们沪生电子解密经历出发,提出了对付破解的几点建议,希望对国内产品知识的保护作出贡献。

关键词:单片机、MCU、IC、破解、解密;侵入型攻击/物理攻击;单片机解密;单片机破解、防止单片机解密、防止单片机破解1引言单片机(MCU)一般都有内部EEPROM/FLASH供用户存放程序和工作数据。

为了防止未经授权访问或拷贝单片机的机内程序,大部分单片机都带有加密锁定位或者加密字节,以保护片内程序。

如果在编程时加密锁定位被使能(锁定),就无法用普通编程器直接读取单片机内的程序,这就是所谓单片机加密或者说锁定功能。

事实上,这样的保护措施很脆弱,很容易被破解。

单片机攻击者借助专用设备或者自制设备,利用单片机芯片设计上的漏洞或软件缺陷,通过多种技术手段,就可以从芯片中提取关键信息,获取单片机内程序。

因此,作为电子产品的设计工程师非常有必要了解当前单片机攻击的最新技术,做到知己知彼,心中有数,才能有效防止自己花费大量金钱和时间辛辛苦苦设计出来的产品被人家一夜之间仿冒的事情发生。

2单片机攻击技术目前,攻击单片机主要有四种技术,分别是:(1)软件攻击该技术通常使用处理器通信接口并利用协议、加密算法或这些算法中的安全漏洞来进行攻击。

软件攻击取得成功的一个典型事例是对早期ATMELAT89C系列单片机的攻击。

攻击者利用了该系列单片机擦除操作时序设计上的漏洞,使用自编程序在擦除加密锁定位后,停止下一步擦除片内程序存储器数据的操作,从而使加过密的单片机变成没加密的单片机,然后利用编程器读出片内程序。

目前在其他加密方法的基础上,可以研究出一些设备,配合一定的软件,来做软件攻击。

近期国内出现了了一种51单片机解密设备(成都一位高手搞出来的),这种解密器主要针对SyncMos. Winbond,在生产工艺上的漏洞,利用某些编程器定位插字节,通过一定的方法查找芯片中是否有连续空位,也就是说查找芯片中连续的FF FF字节,插入的字节能够执行把片内的程序送到片外的指令,然后用解密的设备进行截获,这样芯片内部的程序就被解密完成了。

AVR单片机的熔丝与解锁

AVR单片机的熔丝与解锁

AVR 单片机的熔丝与解锁
AVR 单片机的熔丝位配置是AVR 单片机初学者很容易出错的地方,其实只要注意一些事项,还是能够尽量避免单片机被锁死,即使单片机被锁死,也可以使用一些方法解锁,本文讲述我在刚开始接触AVR 单片机时熔
丝位配置出现的一些问题。

&#8203;&#8203;
1、AVR 单片机的熔丝位是比较独到的特征,可以控制系统的时钟,JTAG 调试、看门狗、芯片加密等等。

图1 是progisp 软件,对于初学者来说,对熔丝位不熟悉,可以先将2 处的编程熔丝对勾去掉,这样&#8203;在编程的时候,就不会对熔丝位进行编程,单片机出厂的默认设置就可以使用。

点击1 处进入熔丝位配置界面。

图1&#65279;
图2 为位配置方式,这里的每一位都不能随意点击,尤其是熔丝低位控制时钟的地方,一般来说,直接对位进行配置并不安全,一定要确定是自己想要的熔丝配置才可以,如果不小心动了其中的熔丝位,可以通过读出或者默认,恢复熔丝配置,这样下载程序之后,比较安全。

AVR单片机解密之后烧写芯片注意事项

AVR单片机解密之后烧写芯片注意事项

致芯科技AVR单片机解密之后烧写芯片注意事项AVR单片机内部有多组与器件配置和运行环境相关的的熔丝位,这些熔丝位非常重要,用户可以通过设定和配置熔丝位使AVR单片机局部不同的特性,以更加适合实际应用。

但是由于需要对熔丝位进行配置,给初学者带来一些不太好理解的地方,对于单片机解密以后,在烧录程序的时候,也要对熔丝位配置,如果配置不对了,可能不工作或功能发生变化。

所有在烧录解密后的文件的时候一定要对熔丝位进行配置,由于支持AVR的工具非常多,而不同的工具的软件的界面不同,所以在做AVR单片机解密前最好告诉解密公司自己使用的是什么工具,让芯片解密公司按照自己的工具的界面做配置图,这样就方便了解密以后去烧写程序,不过自己也可以用解密公司提供的样片去读熔丝位配置,有的工具直接读芯片就可以,有的是读配置等等,然后将读出的配置保存。

如果是刚出厂的单片机,默认的是使用内部1MHZ的RC振荡作为系统时钟,而且JTAG口处于允许方式。

对于AVR熔丝位要起码要明确以下几点。

1、AVR熔丝可以多次编程,不是一次性的OTP熔丝。

2、熔丝位的配置可以通过并行方式、ISP方式和JTAG串行方式实现。

3、AVR芯片加密锁定后(LB2/LB1=1/0,0/0)不能通过任何方式读取芯片内部FLASH和EEPROM 中的数据,但熔丝位的状态任然可以读取,只是不能修改配置。

4、芯片擦除命令是将FLASH和EEPROM中的数据清除,并同时将两位锁定位状态配置成无锁定状态(LB2/LB1=1/1),但芯片擦除命令并不改变其他熔丝位的状态。

5、下载编程的正确步骤是:在芯片无锁定状态下对芯片下载运行代码和数据,配置相关熔丝位,最后配置芯片的加密位置。

6、芯片被加密锁定后,如果发现熔丝位及配置不对,则必须使用芯片擦除命令,清除芯片中的数据,解密加密锁定,然后重新下载运行代码和数据,修改配置相关的熔丝位,最后再次配置芯片的加密锁定位。

7、需要非常明确的指出一点的是SPIEN位,很多客户曾经电话咨询过,说是我们提供的单片机用ISP连接不上,而自己买来的可以,熔丝为的SPIEN就是配置ISP的,如果SPIEN为1,ISP是允许状态,如果是0则为禁止状态,如果是禁止状态当然是无法ISP连接口芯片的。

单片机密码开锁程序流程

单片机密码开锁程序流程

单片机密码开锁程序流程下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。

文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor. I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!1. 初始化初始化单片机的相关硬件,如 I/O 端口、定时器等。

AVR BootLoader详解

AVR BootLoader详解

AVR BootLoader详解(转)ATmega128具备引导加载支持的用户程序自编程功能(In-System P rogramming by On-chipBoot Program),它提供了一个真正的由MCU 本身自动下载和更新(采用读/写同时"Read-While-Write"进行的方式)程序代码的系统程序自编程更新的机制。

利用AVR的这个功能,可以实现在应用编程(IAP)以及实现系统程序的远程自动更新的应用。

IAP的本质就是,MCU可以灵活地运行一个常驻Flash的引导加载程序(Boot Loader Program),实现对用户应用程序的在线自编程更新。

引导加载程序的设计可以使用任何的可用的数据接口和相关的协议读取代码,或者从程序存储器中读取代码,然后将代码写入(编程)到Flash存储器中。

引导加载程序有能力读写整个Flas h存储器,包括引导加载程序所在的引导加载区本身。

引导加载程序还可以对自身进行更新修改,甚至可以将自身删除,使系统的自编程能力消失。

引导加载程序区的大小可以由芯片的熔丝位设置,该段程序区还提供两组锁定位,以便用户选择对该段程序区的不同级别的保护。

本节将给出一个实际的的Boot Loader程序,它可以配合Window s中的超级终端程序,采用Xmodem传输协议,通过RS232接口下载更新用户的应用程序。

5.2.1基本设计思想1. Boot Loader程序的设计要点Boot Loader程序的设计是实现IAP的关键,它必须能过通过一个通信接口,采用某种协议正确的接收数据,再将完整的数据写入到用户程序区中。

本例Boot Loader程序的设计要点有:(1)采用ATmega128的US AR T口实现与PC之间的简易RS232三线通信;(2)采用Xmodem通信协议完成与PC机之间的数据交换;(3)用户程序更新完成后自动转入用户程序执行;(4) Boot Loader程序采用C语言内嵌AVR汇编方式编写,阅读理解方便,可移植性强,代码小于1K字。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

AVR单片机的熔丝位控制着其时钟、JTAG使能、FLASH操作、工作模式等等。

一旦配置错误,
会导致不可预见的结果,导致单片机下不进去
程序。

最常见的就是时钟配置错误,尤其
初学者比较容易犯这一类错误。

AVR单片机如果是系统时钟相关熔丝位配置错了,那可以使用有源晶振、信号发生器等强时钟源给“振开”,其实最简单的方法是利用51单片机的ALE脚进行“急救”。

以前没试过,今天我故意将时钟配置错误(在AVR STUDIO中将熔丝位设置成外部高速晶振,快启动,然后故意把外部晶振给拿掉),重启后果然出事儿了。

再想下程序下不进去了(嘿嘿,这正合我意),为了解救这个ATMEGA16,我找来了一个AT89S52。

注意不能用STC的哦,有的STC51单片机把ALE脚给禁止了。

接下来就是最紧张的时刻了,我将两块板子共地,然后将AT89S52的ALE脚(第30脚)接到ATMEGA16的XTAL1脚(第13脚)。

上电,用示波器看到A LE脚有时钟信号输出。

果断再次下载ATMEGA16的程序。

果然好使了!!!!!
如果大家以后遇到此类现象,不妨使用这个方法试试。

如果是系统时钟相关熔丝位配置错误,那么这个招绝对管用。

别的熔丝位设错了倒是没尝试过。

不过大家尽量配置正确就是啦~~~~~
做设计时不小心锁了一块芯片ATMEGA16,真的很抑闷,网上查了一下资料,真的五花八门,今天自己用有源晶振在自己的作品上动手术,几分钟就把自己的芯片解锁了,收获很多,以后终于随心所欲地编写熔丝了,反正我能解锁!
实践才是检验真理的硬道理!
实际中我没有断开我原来的外部晶振!
解锁图:
解锁步骤:
一:按上面电路接好线,为了避免焊接后又脱焊的麻烦,所以建议用杜邦线接好。

二:用ISP下载线设置好正确的熔丝位,即可烧写熔丝,呵呵,大功告成,芯片又可以恢复使用了。

后话:AVR单片机被锁,不能写入程序,是因为错误地烧写时钟方式熔丝位造成的,选择的时钟方式与实际不同,造成单片机没有时钟信号输入,即不工作了,这样烧写程序当然error啦!。

相关文档
最新文档