打印

AVR高压解锁程序

[复制链接]
1256|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wdmhzh|  楼主 | 2013-12-16 00:25 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
最近一直怀疑MAGE16被锁,终于找到一大神的解锁教程:
/************ 相关说明 *****************/
//主单片机AVCC接VCC,利用AREF引脚控制锁死的单片机的VCC(5V电源电压能达到4.9V);
//主单片机的I/0寄存器ADMUX 控制AREF与AVCC的开关;
//三级管(9014)B极电阻100K,C极电阻1K,E极接GND(12.2V电源电压,能达到11.9V)
//锁死的单片机的RESET与VCC必须几乎同时加电压,不能有明显时间差;
//主单片机的熔丝位:禁用JTAG(因使用PORTC);1M内部时钟;
/************ C 源程序 ********************/
//Chip: ATmega16
//char is unsigned: Yes
//CodeVision AVR
#include <iom16v.h>
#include<macros.h>
// #include <delay.h>
#define uint unsigned int
#define uchar unsigned char
//引脚定义
#define DATA             PORTA         //锁死芯片的PORTB
/*#define RDY_BSY       PINC.4         //锁死芯片的PD1
#define _OE                PORTC.3      //锁死芯片的PD2始终为1
#define _WR               PORTC.2      //锁死芯片的PD3
#define BS1                PORTC.1      //锁死芯片的PD4
#define XA0               PORTC.0      //锁死芯片的PD5
#define XA1               PORTD.7      //锁死芯片的PD6
#define PAGEL           PORTD.6     //锁死芯片的PD7
#define BS2                PORTB.0      //锁死芯片的PA0
#define RST               PORTD.2      //9014的B极电阻
#define XTAL1           PORTC.6      //XTAL1
#define LED               PORTB.1      //LED
#define DDR_LED      DDRB.1        //*/
#define VCC_ON        ADMUX=0x40    //锁死芯片的VCC
#define VCC_OFF      ADMUX=0x00
//进入编程状态
//#define PROG_ENABLE  PORTC=PORTC&~BIT(1);PORTC=PORTC&~BIT(0);PORTD=PORTD&~BIT(7);PORTD=PORTD&~BIT(6);//XA1=0;PAGEL=0;

void yanshi_1ms(uint s)//avr 12兆晶振
  {
    uchar m;
  uint n;
    for(m=0;m<s;m++)
      for(n=1994;n>0;n--);
}

//初始化
void initial( )
{
   DDRB=0xFF;
   DDRC=0xFF;DDRC=DDRC&~BIT(4);PORTC=PORTC|BIT(4);//DDRC.4=0;PORTC.4=1;
   DDRD=0xFF;
   DDRA=0xFF;
   PORTC=PORTC|BIT(3);//_OE=1;
   PORTC=PORTC|BIT(2);//_WR=1;
   PORTC=PORTC|BIT(0);//XA0=1;
   PORTD=PORTD|BIT(7);//XA1=1;
   PORTD=PORTD&~BIT(6);//PAGEL=0;
   PORTB=PORTB&~BIT(0);//BS2=0;
   PORTC=PORTC&~BIT(1);//BS1=0;
   PORTD=PORTD|BIT(2);//RST=1;
   PORTC=PORTC&~BIT(6);//XTAL1=0;
   PORTB=PORTB&~BIT(1);//LED=0;
   VCC_OFF;
   DATA=0x00;
}
//芯片擦除
void chip_erase( )
{
   PORTD=PORTD|BIT(7);PORTC=PORTC&~BIT(0);//XA1=1;XA0=0;
   PORTC=PORTC&~BIT(1);//BS1=0;
   DATA=0x80;
   PORTC=PORTC|BIT(6);PORTC=PORTC&~BIT(6);//XTAL1=1;XTAL1=0;
   PORTC=PORTC&~BIT(2);PORTC=PORTC|BIT(2);//_WR=0;_WR=1;
   while((PINC&BIT(4))==0);//RDY_BSY==0
}
//重写熔丝位
  void write_fuse(char LB,char HB)
   {
    PORTD=PORTD|BIT(7);PORTC=PORTC&~BIT(0);//XA1=1;XA0=0;
    PORTC=PORTC&~BIT(1);//BS1=0;
    DATA=0x40;
    PORTC=PORTC|BIT(6);PORTC=PORTC&~BIT(6);//XTAL1=1;XTAL1=0;
    PORTD=PORTD&~BIT(7);PORTC=PORTC|BIT(0);//XA1=0;XA0=1;
    DATA=LB;      //熔丝低位
   PORTC=PORTC|BIT(6);PORTC=PORTC&~BIT(6);//XTAL1=1;XTAL1=0;
    PORTC=PORTC&~BIT(1);PORTB=PORTB&~BIT(0);//BS1=0;BS2=0;
    PORTC=PORTC&~BIT(2);PORTC=PORTC|BIT(2);//_WR=0;_WR=1;
    while((PINC&BIT(4))==0);//RDY_BSY==0
   
    PORTD=PORTD|BIT(7);PORTC=PORTC&~BIT(0);//XA1=1;XA0=0;
     PORTC=PORTC&~BIT(1);//BS1=0;
    DATA=0x40;
    PORTC=PORTC|BIT(6);PORTC=PORTC&~BIT(6);//XTAL1=1;XTAL1=0;
    PORTD=PORTD&~BIT(7);PORTC=PORTC|BIT(0);//XA1=0;XA0=1;
    DATA=HB;     //熔丝高位
   PORTC=PORTC|BIT(6);PORTC=PORTC&~BIT(6);//XTAL1=1;XTAL1=0;
    PORTC=PORTC|BIT(1);PORTB=PORTB&~BIT(0);//BS1=1;BS2=0;
   PORTC=PORTC&~BIT(2);PORTC=PORTC|BIT(2);// _WR=0;_WR=1;
    while((PINC&BIT(4))==0);//RDY_BSY==0
   }
//高压恢复
  void recover_fuse( )
{
   //PROG_ENABLE;
PORTC=PORTC&~BIT(1);PORTC=PORTC&~BIT(0);
PORTD=PORTD&~BIT(7);PORTD=PORTD&~BIT(6);

   PORTD=PORTD&~BIT(2);VCC_ON;//RST=0;     //最关键的时序问题
  chip_erase(); //擦除
  write_fuse(0xE1,0x19); //恢复熔丝为默认(也可自己设定为其他值)
}
//结束状态
  void finish( )
{
    DDRB=0x00;PORTB=0x00;
    DDRC=0x00;PORTC=0x00;
    DDRD=0x00;PORTD=0x00;
    DDRA=0x00;PORTA=0x00;
   DDRB=DDRB|BIT(1);PORTB=PORTB|BIT(1);// DDR_LED=1;LED=1;
    VCC_OFF;
}
void main( )
{
    initial();
    yanshi_1ms(200);
    recover_fuse();
    finish();
}

上面是我用ICCAVR做的修改替换。电路图如上:
“功能与使用方法:
功能:
    将单片机锁定位与存储器擦除,并且将所有熔丝们都恢复为出厂默认(也可以改为自己想要的值)。
使用方法:
    按下按键1秒钟以上时间,若看到LED指示灯亮,说明解锁成功。若尝试数次仍不见LED指示灯亮,说明芯片非锁死,而是损坏了。
特点:
1,  不需要PC端软件,完全脱离电脑工作
2,  专门用来恢复熔丝,解锁单片机,不附加累赘功能
3,  使用方便,整个过程不到1秒时间
4,  可通过预留插针,将高压编程所需引脚引出,对其它型号单片机只要把对应引脚相连,即可解锁;
5,  制作简单,成本低廉。”
详情请转:http://www.amobbs.com/thread-5302484-1-1.html

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

54

主题

130

帖子

2

粉丝