概述:
利用常用的AVR單片機ATmega16制作的高壓解鎖器,可以解開所有芯片鎖死的情況(除非芯片損壞、燒毀)。制作作品經實驗驗證,解開了山東大學物理學院AVR單片機實驗室所有近40片鎖死的單片機以及許多同學鎖死的單片機。制作方法簡單,保證你一小時之內做完。
所需元件極少(如電路圖所示):僅一只三極管、一片7805,三支電阻、一只LED、三個小電容,一片可用的單片機,一個12V電源。
程序與電路連接可方便的移植到其它型號單片機上(凡支持高壓編程的,都可以)。
希望能對初學單片機的同學有所幫助,特別是我們學校暑假參加電子設計比賽的同學。
制作背景(常見芯片鎖死情況與高壓解鎖介紹):
AVR單片機是我們學校同學經常使用的單片機,尤其是中高檔單片機ATMEGA16。
單片機在使用的時候,經常出現由于配置熔絲位的失誤或電路的失誤而造成單片機鎖死的情況,鎖死之后,便無法再對單片機進行編程。
常見的鎖死的情況以及常用的解決辦法:
1,時鐘選擇錯誤(可通過有源晶振配合ISP或JTAG下載器、高壓編程器進行解鎖)
2,ISP被禁(可通過JTAG下載器、高壓編程器進行解鎖)
3,JTAG被禁(可通過ISP下載器、高壓編程器進行解鎖)
4,鎖定位加密(可通過單片機設定允許的方式進行單片機擦除)
5,以上情況的組合:
1+2(可通過有源晶振配合JTAG、高壓編程器進行解鎖)
1+3(可通過有源晶振配合ISP、高壓編程器進行解鎖)
1+4(可通過有源晶振配合單片機設定允許的方式進行單片機擦除)
2+3(只能通過高壓編程器進行解鎖)
2+4(可通過JTAG下載器、高壓編程器進行單片機擦除)
3+4(可通過ISP下載器、高壓編程器進行單片機擦除)
1+2+3(只能通過高壓編程器進行解鎖)
1+2+4(可通過有源晶振配合JTAG下載器、高壓編程器進行單片機擦除)
1+3+4(可通過有源晶振配合ISP下載器、高壓編程器進行單片機擦除)
2+3+4(只能通過高壓編程器進行單片機擦除)
1+2+3+4(只能通過高壓編程器進行單片機擦除)
6,其他鎖死情況(可通過某些方法或高壓編程器進行解鎖)
可以看出,高壓編程器是解鎖功能最強的、不需要有源晶振配合的解鎖工具。但是,與目前常用的編程下載器相比,高壓編程器有許多缺點:
A,編程速度慢
并行編程脈沖寬度需要大于250ns,如果是高壓并行編程器,則燒寫速度不會超過4Mbit/s,如果是高壓串行編程器,則速度更慢。
B, 占用引腳多。
無論高壓并行編程器還是高壓串行編程器,需要占用的目標單片機的引腳數都在16以上。
C, 需要12V的DC電壓,而且電壓范圍窄(RESET:11.5~12.5V,VCC:4.5~5.5V)
因此,現在很少有人用高壓編程器對單片機進行編程,多數都用ISP或JTAG編程方式。因而專門的高壓編程器價格也不低,簡易的高壓編程器價格在100以內,但是只能適用于某一種或兩種單片機型號,而且需要專門的程序下載軟件及驅動。
但是因為它在對單片機進行解鎖方面的功能,使的高壓編程器并未完全被淘汰。
因而使用高壓編程器時便會感覺很矛盾:
1,編程器的主要功能是給單片機編程,但是現在ISP或JTAG方式編程速度高、占用引腳少,而且相應的軟件也非常完善,單就對單片機編程而言,完全不會使用高壓編程的方式來對單片機編程。
2,不使用高壓編程器,很多時候單片機鎖死后很難解開。但是僅為給單片機解鎖而專門買個高壓編程器,而且還要配合專門的軟件使用,既不值又麻煩。
通過查閱數據手冊中高壓編程的內容,利用常用的ATMEGA16單片機,可以設計制作一個不需要PC端軟件、不附帶編程功能、專門對單片機解鎖的AVR高壓解鎖器。
制作方法:
下面以對鎖死的MEGA16單片機進行解鎖為例,與大家分享制作方法與源程序。對于其它型號的單片機,只要具有高壓編程接口,只需要查閱數據手冊,將對應引腳接好即可。
這些引腳都是用于高壓編程的:DATA;RDY_BSY;_OE;_WR;BS1;XA0;XA1;PAGEL;BS2;RST;XTAL1;VCC
電路圖:
注:出于某些考慮,線路直接以連線連接,未使用任何NetLabel。圖中的電容也可省略,一般沒問題。
源程序:
//主單片機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內部時鐘;
//Chip: ATmega16
//char is unsigned: Yes
//CodeVision AVR
#include
#include
//引腳定義
#define DATAPORTA//鎖死芯片的PORTB
#define RDY_BSYPINC.4//鎖死芯片的PD1
#define _OEPORTC.3//鎖死芯片的PD2始終為1
#define _WRPORTC.2//鎖死芯片的PD3
#define BS1PORTC.1//鎖死芯片的PD4
#define XA0PORTC.0//鎖死芯片的PD5
#define XA1PORTD.7//鎖死芯片的PD6
#define PAGELPORTD.6//鎖死芯片的PD7
#define BS2PORTB.0//鎖死芯片的PA0
#define RSTPORTD.2//9014的B極電阻
#define XTAL1PORTC.6//XTAL1
#define LEDPORTB.1//LED
#define DDR_LEDDDRB.1//
#define VCC_ONADMUX=0x40//鎖死芯片的VCC
#define VCC_OFFADMUX=0x00
//進入編程狀態
#define PROG_ENABLEBS1=0;XA0=0;XA1=0;PAGEL=0;
//初始化
void initial(void)
{
DDRB=0xFF;
DDRC=0xFF;DDRC.4=0;PORTC.4=1;
DDRD=0xFF;
DDRA=0xFF;
_OE=1;
_WR=1;
XA0=1;
XA1=1;
PAGEL=0;
BS2=0;
BS1=0;
RST=1;
XTAL1=0;
LED=0;
VCC_OFF;
DATA=0x00;
}
//芯片擦除
void chip_erase(void)
{
XA1=1;XA0=0;
BS1=0;
DATA=0x80;
XTAL1=1;XTAL1=0;
_WR=0;_WR=1;
while(RDY_BSY==0);
}
//重寫熔絲位
void write_fuse(char LB,char HB)
{
XA1=1;XA0=0;
BS1=0;
DATA=0x40;
XTAL1=1;XTAL1=0;
XA1=0;XA0=1;
DATA=LB;//熔絲低位
XTAL1=1;XTAL1=0;
BS1=0;BS2=0;
_WR=0;_WR=1;
while(RDY_BSY==0);
XA1=1;XA0=0;
BS1=0;
DATA=0x40;
XTAL1=1;XTAL1=0;
XA1=0;XA0=1;
DATA=HB;//熔絲高位
XTAL1=1;XTAL1=0;
BS1=1;BS2=0;
_WR=0;_WR=1;
while(RDY_BSY==0);
}
//高壓恢復
void recover_fuse(void)
{
PROG_ENABLE;
RST=0,VCC_ON;//最關鍵的時序問題
chip_erase(); //擦除
write_fuse(0xE1,0x19); //恢復熔絲為默認(也可自己設定為其他值)
}
//結束狀態
void finish(void)
{
DDRB=0x00;PORTB=0x00;
DDRC=0x00;PORTC=0x00;
DDRD=0x00;PORTD=0x00;
DDRA=0x00;PORTA=0x00;
DDR_LED=1;LED=1;
VCC_OFF;
}
void main(void)
{
initial();
delay_ms(200);
recover_fuse();
finish();
}
功能與使用方法:
功能:
將單片機鎖定位與存儲器擦除,并且將所有熔絲們都恢復為出廠默認(也可以改為自己想要的值)。
使用方法:
按下按鍵1秒鐘以上時間,若看到LED指示燈亮,說明解鎖成功。若嘗試數次仍不見LED指示燈亮,說明芯片非鎖死,而是損壞了。
特點:
1,不需要PC端軟件,完全脫離電腦工作
2,專門用來恢復熔絲,解鎖單片機,不附加累贅功能
3,使用方便,整個過程不到1秒時間
4,可通過預留插針,將高壓編程所需引腳引出,對其它型號單片機只要把對應引腳相連,即可解鎖;
5,制作簡單,成本低廉。
PS:盡管市面上的高壓編程器是用比ATMEGA16低檔的ATMEGA8作為主單片機,但是我們根本不需要專門的單片機作為主單片機,只要保留程序和電路板,就可以用任一塊未鎖的單片機來解鎖別的單片機。并且現在ATMEGA8的價格與ATMEGA16的價格已經相差不多。
平時一般不用這個東西,可以放到一邊去,當芯片被鎖時才拿出來使用,百試百靈。
來源;21ic
評論
查看更多