AVR單片機(jī)高壓解鎖器全面解析
簡單全能的AVR單片機(jī)高壓解鎖器(制作方法,以MEGA16為例,附電路與C源程序,注:不是高壓編程器)AVR高壓解鎖
概述:
利用常用的AVR單片機(jī)ATmega16制作的高壓解鎖器,可以解開所有芯片鎖死的情況(除非芯片損壞、燒毀)。制作作品經(jīng)實(shí)驗(yàn)驗(yàn)證,解開了山東大學(xué)物理學(xué)院AVR單片機(jī)實(shí)驗(yàn)室所有近40片鎖死的單片機(jī)以及許多同學(xué)鎖死的單片機(jī)。制作方法簡單,保證你一小時之內(nèi)做完。
所需元件極少(如電路圖所示):僅一只三極管、一片7805,三支電阻、一只LED、三個小電容,一片可用的單片機(jī),一個12V電源。
程序與電路連接可方便的移植到其它型號單片機(jī)上(凡支持高壓編程的,都可以)。
希望能對初學(xué)單片機(jī)的同學(xué)有所幫助,特別是我們學(xué)校暑假參加電子設(shè)計比賽的同學(xué)。
制作背景(常見芯片鎖死情況與高壓解鎖介紹):
AVR單片機(jī)是我們學(xué)校同學(xué)經(jīng)常使用的單片機(jī),尤其是中高檔單片機(jī)ATMEGA16。
單片機(jī)在使用的時候,經(jīng)常出現(xiàn)由于配置熔絲位的失誤或電路的失誤而造成單片機(jī)鎖死的情況,鎖死之后,便無法再對單片機(jī)進(jìn)行編程。
常見的鎖死的情況以及常用的解決辦法:
1,時鐘選擇錯誤(可通過有源晶振配合ISP或JTAG下載器、高壓編程器進(jìn)行解鎖)
2,ISP被禁(可通過JTAG下載器、高壓編程器進(jìn)行解鎖)
3,JTAG被禁(可通過ISP下載器、高壓編程器進(jìn)行解鎖)
4,鎖定位加密(可通過單片機(jī)設(shè)定允許的方式進(jìn)行單片機(jī)擦除)
5,以上情況的組合:
1+2(可通過有源晶振配合JTAG、高壓編程器進(jìn)行解鎖)
1+3(可通過有源晶振配合ISP、高壓編程器進(jìn)行解鎖)
1+4(可通過有源晶振配合單片機(jī)設(shè)定允許的方式進(jìn)行單片機(jī)擦除)
2+3(只能通過高壓編程器進(jìn)行解鎖)
2+4(可通過JTAG下載器、高壓編程器進(jìn)行單片機(jī)擦除)
3+4(可通過ISP下載器、高壓編程器進(jìn)行單片機(jī)擦除)
1+2+3(只能通過高壓編程器進(jìn)行解鎖)
1+2+4(可通過有源晶振配合JTAG下載器、高壓編程器進(jìn)行單片機(jī)擦除)
1+3+4(可通過有源晶振配合ISP下載器、高壓編程器進(jìn)行單片機(jī)擦除)
2+3+4(只能通過高壓編程器進(jìn)行單片機(jī)擦除)
1+2+3+4(只能通過高壓編程器進(jìn)行單片機(jī)擦除)
6,其他鎖死情況(可通過某些方法或高壓編程器進(jìn)行解鎖)
可以看出,高壓編程器是解鎖功能最強(qiáng)的、不需要有源晶振配合的解鎖工具。但是,與目前常用的編程下載器相比,高壓編程器有許多缺點(diǎn):
A,編程速度慢
并行編程脈沖寬度需要大于250ns,如果是高壓并行編程器,則燒寫速度不會超過4Mbit/s,如果是高壓串行編程器,則速度更慢。
B, 占用引腳多。
無論高壓并行編程器還是高壓串行編程器,需要占用的目標(biāo)單片機(jī)的引腳數(shù)都在16以上。
C, 需要12V的DC電壓,而且電壓范圍窄(RESET:11.5~12.5V,VCC:4.5~5.5V)
因此,現(xiàn)在很少有人用高壓編程器對單片機(jī)進(jìn)行編程,多數(shù)都用ISP或JTAG編程方式。因而專門的高壓編程器價格也不低,簡易的高壓編程器價格在100以內(nèi),但是只能適用于某一種或兩種單片機(jī)型號,而且需要專門的程序下載軟件及驅(qū)動。
但是因?yàn)樗趯纹瑱C(jī)進(jìn)行解鎖方面的功能,使的高壓編程器并未完全被淘汰。
因而使用高壓編程器時便會感覺很矛盾:
1,編程器的主要功能是給單片機(jī)編程,但是現(xiàn)在ISP或JTAG方式編程速度高、占用引腳少,而且相應(yīng)的軟件也非常完善,單就對單片機(jī)編程而言,完全不會使用高壓編程的方式來對單片機(jī)編程。
2,不使用高壓編程器,很多時候單片機(jī)鎖死后很難解開。但是僅為給單片機(jī)解鎖而專門買個高壓編程器,而且還要配合專門的軟件使用,既不值又麻煩。
通過查閱數(shù)據(jù)手冊中高壓編程的內(nèi)容,利用常用的ATMEGA16單片機(jī),可以設(shè)計制作一個不需要PC端軟件、不附帶編程功能、專門對單片機(jī)解鎖的AVR高壓解鎖器。
制作方法:
下面以對鎖死的MEGA16單片機(jī)進(jìn)行解鎖為例,與大家分享制作方法與源程序。對于其它型號的單片機(jī),只要具有高壓編程接口,只需要查閱數(shù)據(jù)手冊,將對應(yīng)引腳接好即可。
這些引腳都是用于高壓編程的:DATA;RDY_BSY;_OE;_WR;BS1;XA0;XA1;PAGEL;BS2;RST;XTAL1;VCC
電路圖:
注:出于某些考慮,線路直接以連線連接,未使用任何NetLabel。圖中的電容也可省略,一般沒問題。
源程序:
//主單片機(jī)AVCC接VCC,利用AREF引腳控制鎖死的單片機(jī)的VCC(5V電源電壓能達(dá)到4.9V);
//主單片機(jī)的I/0寄存器ADMUX 控制AREF與AVCC的開關(guān);
//三級管(9014)B極電阻100K,C極電阻1K,E極接GND(12.2V電源電壓,能達(dá)到11.9V)
//鎖死的單片機(jī)的RESET與VCC必須幾乎同時加電壓,不能有明顯時間差;
//主單片機(jī)的熔絲位:禁用JTAG(因使用PORTC);1M內(nèi)部時鐘;
//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
//進(jìn)入編程狀態(tài)
#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);
}
//高壓恢復(fù)
void recover_fuse(void)
{
PROG_ENABLE;
RST=0,VCC_ON;//最關(guān)鍵的時序問題
chip_erase(); //擦除
write_fuse(0xE1,0x19); //恢復(fù)熔絲為默認(rèn)(也可自己設(shè)定為其他值)
}
//結(jié)束狀態(tài)
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();
}
功能與使用方法:
功能:
將單片機(jī)鎖定位與存儲器擦除,并且將所有熔絲們都恢復(fù)為出廠默認(rèn)(也可以改為自己想要的值)。
使用方法:
按下按鍵1秒鐘以上時間,若看到LED指示燈亮,說明解鎖成功。若嘗試數(shù)次仍不見LED指示燈亮,說明芯片非鎖死,而是損壞了。
特點(diǎn):
1,不需要PC端軟件,完全脫離電腦工作
2,專門用來恢復(fù)熔絲,解鎖單片機(jī),不附加累贅功能
3,使用方便,整個過程不到1秒時間
4,可通過預(yù)留插針,將高壓編程所需引腳引出,對其它型號單片機(jī)只要把對應(yīng)引腳相連,即可解鎖;
5,制作簡單,成本低廉。
PS:盡管市面上的高壓編程器是用比ATMEGA16低檔的ATMEGA8作為主單片機(jī),但是我們根本不需要專門的單片機(jī)作為主單片機(jī),只要保留程序和電路板,就可以用任一塊未鎖的單片機(jī)來解鎖別的單片機(jī)。并且現(xiàn)在ATMEGA8的價格與ATMEGA16的價格已經(jīng)相差不多。
平時一般不用這個東西,可以放到一邊去,當(dāng)芯片被鎖時才拿出來使用,百試百靈。