1. 程式人生 > >AVR下載燒寫的複雜熔絲設定尿性

AVR下載燒寫的複雜熔絲設定尿性

為什麼AVR16總是下不程序序,我用的是AVR Studio下載的,熔絲位SPIEN變成灰色的了,而且勾不上。

提問者採納
熔絲被你點成外部晶振了,找個訊號發生器把1MHZ 5V的訊號與16接晶振的任意一腳連線,同時用下載器編輯熔絲,記得點成內部的,如果還是不行把訊號電壓提高。


轉載自: http://www.cnblogs.com/zhang747725388/archive/2012/08/17/2643397.html

    熔絲位是ATMEL公司AVR微控制器比較獨到的特徵。在每一種型號的AVR微控制器內部都有一些特定含義的熔絲位,其特性表現為多次擦寫的E²PROM。使用者通過配置(程式設計)這些熔絲位,可以固定地設定AVR的一些特性,引數以及I/O配置等,當然也包括對片內執行程式碼的鎖定(加密)。

    使用者使用並行程式設計方式、ISP程式設計方式、JTAG程式設計方式都可以對AVR的熔絲位進行配置,但不同的程式設計工具軟體提供對熔絲位的配置方式(指人機介面)也是不同的。有的是通過直接填寫熔絲位位值(如:CVAVR、PonyProg2000和SLISP等),有的是通過列出表格選擇(如AVR STUDIO、BASCOM-AVR)。前者程式介面比較簡單,但是需要使用者在仔細查詢操作,會引起一些意想不到的後果,如造成晶片無法正常執行,無法再次定入ISP程式設計模式等。建議使用者對AVR的熔絲位進行配置時,選擇使用者表格選擇方式介面的程式設計軟體,如BASCOM-AVR。不過版主使用的是前者PonyProg2000。 對AVR熔絲位的配置操作是比較細緻的工作,使用者往往忽視其重要性,或感到不易掌握。看到這麼多的人對AVR的熔絲位不會使用和誤操作,結合本人的使用實踐,給出以下方面的意見和參考。 下面給出對AVR熔絲位的配置操作時的一些要點和需要注意的相關事項以及相應的拯救方法。

     (一)設定方法 1.1.1 正確配置AVR熔絲位 對AVR熔絲位的配置是比較細緻的工作,使用者往往忽視其重要性,或感到不易掌握。下面給出對AVR熔絲位的配置操作時的一些要點和需要注意的相關事項。有關ATmega128熔絲位的具體定義和功能請檢視本書相關章節,在附錄中將給出一個完整的彙總表。

(1)在AVR的器件手冊中,對熔絲位使用已程式設計(Programmed)和未程式設計(Unprogrammed)定義熔絲位的狀態,“Unprogrammed”表示熔絲狀態為“1”(禁止);“Programmed”表示熔絲狀態為“0”(允許)。因此,配置熔絲位的過程實際上是“配置熔絲位成為未程式設計狀態“1”或成為已程式設計狀態“0””。

(2)在使用通過選擇打鉤“√”方式確定熔絲位狀態值的程式設計工具軟體時,請首先仔細閱讀軟體的使用說明,弄清楚“√”表示設定熔絲位狀態為“0”還是為“1”。

(3)使用CVAVR中的程式設計下載程式時應特別注意,由於CVAVR程式設計下載介面初始開啟時,大部分熔絲位的初始狀態定義為“1”,因此不要使用其程式設計選單選項中的“all”選項。此時的“all”選項會以熔絲位的初始狀態定義來配置晶片的熔絲位,而實際上其往往並不是使用者所需要的配置結果。如果要使用“all”選項,應先使用“read->fuse bits”讀取晶片中熔絲位實際狀態後,再使用“all” 選項。

(4)新的AVR晶片在使用前,應首先檢視它熔絲位的配置情況,再根據實際需要,進行熔絲位的配置,並將各個熔絲位的狀態記錄備案。

(5)AVR晶片加密以後僅僅是不能讀取晶片內部Flash和E2PROM中的資料,熔絲位的狀態仍然可以讀取但不能修改配置。晶片擦除命令是將Flash和E2PROM中的資料清除,並同時將兩位鎖定位狀態配置成“11”,處於無鎖定狀態。但晶片擦除命令並不改變其它熔絲位的狀態。

(6)正確的操作程式是:在晶片無鎖定狀態下,下載執行程式碼和資料,配置相關的熔絲位,最後配置晶片的鎖定位。晶片被鎖定後,如果發現熔絲位配置不對,必須使用晶片擦除命令,清除晶片中的資料,並解除鎖定。然後重新下載執行程式碼和資料,修改配置相關的熔絲位,最後再次配置晶片的鎖定位。

(7)使用ISP序列方式下載程式設計時,應配置SPIEN熔絲位為“0”。晶片出廠時SPIEN位的狀態預設為“0”,表示允許ISP序列方式下載資料。只有該位處於程式設計狀態“0”,才可以通過AVR的SPI口進行ISP下載,如果該位被配置為未程式設計“1”後,ISP序列方式下載資料立即被禁止,此時只能通過並行方式或JTAG程式設計方式才能將SPIEN的狀態重新設定為“0”,開放ISP。通常情況下,應保持SPIEN的狀態為“0”,允許ISP程式設計不會影響其引腳的I/O功能,只要在硬體電路設計時,注意ISP介面與其並接的器件進行必要的隔離,如使用串接電阻或斷路跳線等。

(8)當你的系統中,不使用JTAG介面下載程式設計或實時線上模擬除錯,且JTAG介面的引腳需要作為I/O口使用時,必須設定熔絲位JTAGEN的狀態為“1”。晶片出廠時JTAGEN的狀態預設為“0”,表示允許JTAG介面,JTAG的外部引腳不能作為I/O口使用。當JTAGEN的狀態設定為“1”後,JTAG介面立即被禁止,此時只能通過並行方式或ISP程式設計方式才能將JTAG重新設定為“0”,開放JTAG。

(9)一般情況下不要設定熔絲位把RESET引腳定義成I/O使用(如設定ATmega8熔絲位RSTDISBL的狀態為“0”),這樣會造成ISP的下載程式設計無法進行,因為在進入ISP方式程式設計時前,需要將RESET引腳拉低,使晶片先進入復位狀態。

(10)使用內部有RC振盪器的AVR晶片時,要特別注意熔絲位CKSEL的配置。一般情況下,晶片出廠時CKSEL位的狀態預設為使用內部1MHz的RC振盪器作為系統的時鐘源。如果你使用了外部振盪器作為系統的時鐘源時,不要忘記首先正確配置CKSEL熔絲位,否則你整個系統的定時都會出現問題。而當在你的設計中沒有使用外部振盪器(或某鍾特定的振盪源)作為系統的時鐘源時,千萬不要誤操作或錯誤的把CKSEL熔絲位配置成使用外部振盪器(或其它不同型別的振盪源)。一旦這種情況產生,使用ISP程式設計方式則無法對晶片操作了(因為ISP方式需要晶片的系統時鐘工作併產生定時控制訊號),晶片看上去“壞了”。此時只有使用取下晶片使用並行程式設計方式,或使用JTAG方式(如果JTAG為允許時且目標板上留有JTAG介面)來解救了。另一種解救的方式是:嘗試在晶片的晶體引腳上臨時人為的疊加上不同型別的振盪時鐘訊號,一旦ISP可以對晶片操作,立即將CKSEL配置成使用內部1MHz的RC振盪器作為系統的時鐘源,然後再根據實際情況重新正確配置CKSEL。

(11)使用支援IAP的AVR晶片時,如果你不使用BOOTLOADER功能,注意不要把熔絲位BOOTRST設定為“0”狀態,它會使晶片在上電時不是從Flash的0x0000處開始執行程式。晶片出廠時BOOTRST位的狀態預設為“1”。關於BOOTRST的配置以及BOOTLOADER程式的設計與IAP的應用請參考本章相關內容。

     1.1.2 ATmega128中重要熔絲位的配置 上一小節介紹了配置AVR熔絲位的要點和注意事項,本小節把在一般情況下使用ATmega128時,幾個重要的熔絲位配置情況進行說明。

(1)熔絲位M103C。M103C的配置將設定ATmega128是以ATmega103相容方式工作執行還是以ATmega128本身的方式工作執行。ATmega128在出廠時M103C預設狀態為“0”,即預設以ATmega103相容方式工作。當用戶系統設計使晶片以ATmega128方式工作時,應首先將M103C的狀態配置為“1”。

(2)CLKSEL0..3。CLKSEL0、CLKSEL1、CLKSEL2、CLKSEL3用於選擇系統的時鐘源。有五種不同型別的時鐘源可供選擇(每種型別還有細的劃分)。晶片出廠時的預設情況為CLKSEL3..0和SUT1..0分別是“0001”和“10”。即使用內部1MHz RC振盪器,使用最長的啟動延時。這保證了無論外部振盪電路是否工作,都可以進行最初的ISP下載。對於CLKSEL3..0熔絲位的改寫需要十分慎重,因為一旦改寫錯誤,會造成晶片無法啟動,見上一小節第10點說明。

(3)JTAGEN。如果不使用JTAG介面,應將JTAGEN的狀態設定為“1”,即禁止JTAG,JTAG引腳用於I/O口。

(4)SPIEN。SPI方式下載資料和程式允許,預設狀態為允許“0”。一般保留其狀態。

(5)WDTON。看門狗的定時器始終開啟。WDTON預設為“1”,即禁止看門狗的定時器始終開啟。如果該位設定為“0”後,看門狗的定時器就會始終開啟,不能被內部程式控制了,這是為了防止當程式跑飛時,未知程式碼通過寫暫存器將看門狗定時器關斷而設計的(儘管關斷看門狗定時器需要特殊的方式,但它保證了更高的可靠行)。

(6)EESAVE。執行擦除命令時是否保留E2PROM中的內容,預設狀態為“1”,表示E2PROM中的內容同Flash中的內容一同擦除。如果該位設定為“0”,對程式進行下載前的擦除命令只會對FLASH程式碼區有效,而對E2PROM區無效。這對於希望在系統更新程式時,需要保留E2PROM中資料的情況下是十分有用的。

(7)BOOTRST。決定晶片上電起動時,第一條執行指令的地址。預設狀態為“1”,表示起動時從0x0000開始執行。如果BOOTRST設定為“0”,則起動時從BOOTLOADER區的起始地址處開始執行程式。BOOTLOADER區的大小由BOOTSZ1和BOOTSZ0決定,因此其首地址也隨之變化。

(8)BOOTSZ1和BOOTSZ0:這兩位確定了BOOTLOADER區的大小以及其起始的首地址。預設的狀態為“00”,表示BOOTLOADER區為4096字,起始首地址為0xF000。

(9)推薦使用者使用ISP方式配置熔絲位。配置工具選用BASCOM-AVR (網上下載試用版,它對ISP下載無限制),和STK200/STK300相容的下載電纜(見第四章內容)。

注:不同AVR的熔絲也不同,使用前必須仔細檢視晶片手冊。 要重視手冊學習,不僅是掌握如何使用,也是從根本上認識和掌握原理和結構。對於硬體工程師來將,資料手冊是真正的“經書”,其它都是“修練經驗”。不熟讀“經書”,你無法修煉成“仙”的。這也是《M128》、《M8》的目的之一!

    (二)AVR熔絲位拯救方法詳細攻略

  1.1.3 AVR晶片的ISP全攻略 當然你在配置熔絲位時要小心從事,防止晶片鎖死。有不少網友屢屢遭此不幸。其實你在熔絲位配置時,只要方法正確,一般是不會出錯的。如果當你改動了AVR的熔絲位配置,重新加電後,想再用ISP下載,提示:“進入程式設計模式失敗”等,極有可能是你搞錯了熔絲位,導致晶片不知道使用何種外部主頻而無法正常工作(僅限於使用內部RC振盪的情況)。不過,不用太擔心,其實拯救的辦法還是有很多的,操作起來也是很容易的,具體解決方法為:

1。進入JTAG模式修改SPIEN熔絲位 需要使用JTAGICE偵錯程式,不過一般情況下除錯模式也進不去,JTAGEN(值為1)鎖死了。

2。並行程式設計器恢復 需要你有USB或COM1口製作的並行HVPROG程式設計器,STK200/STK300

3。通過外加有源晶振 需要你有外部有源振盪晶體(石英或晶振1-4M) 這個方法最簡單,速度最快(強烈推薦)

4。使用通用程式設計器將晶片恢復到出廠狀態 這個方法,需要你有市場上的通用程式設計器,可以修改三個熔絲位暫存器資料。

5。寄回給晶片服務商,讓他們幫忙將晶片恢復 這是最省事,但是最費時間,最無可奈何的方法。 先介紹一下基本恢復理論 ISP(In System Programmability) 在系統程式設計,簡稱為 序列下載 IAP(In Application Programing) 在應用程式設計,BootLoader也是類似的意思

1. ISP雖然利用了SPI介面(例外:M64/M128為UASRT0介面,Tiny13等沒有SPI介面)的引腳,但只在復位時起作用,而且下載完成後合格的下載器會自動斷開埠的連線,對正常工作時沒有影響的( 在產品應用中,下載器一定是不會一直粘在上面的)。

2. 雖然高壓並行下載能修復任何熔絲位,但對於貼片封裝來說是很不現實的,所以新增ISP10標準插座介面後就是最常用的ISP下載方式了

3. 雖然IAP是一種新的升級方法,但IAP程式本身也是要先用高壓並行下載或ISP來燒進晶片裡面才行

4. Tiny13等少管腳AVR晶片因為管腳實在太少了,有ISP,但沒有[高壓並行程式設計]而特製了[高壓序列程式設計] 所以,產品上一般都留有ISP10標準介面插座,或更省位置的ISP6標準插座----留6個焊盤就行了

     ISP的工作前提 1. 晶片沒有物理損壞

2. 晶片的SPIEN熔絲位=0 使能ISP功能

3. 晶片的RSTDISBL熔絲位=1 RESET引腳有效 (假如晶片有這個熔絲位)

4. 線路正常--接錯線? 短路?

5. ISP下載器正常-------特別要考慮 連線的接觸不良問題

6. 電源正常 (一) 並行程式設計器恢復,最早的程式設計方法, 功能最強大,通常需要12V~24V的高壓,以示區別,下面稱為 高壓並行程式設計。製作方式也有:

1.USB或COM1口製作的並行HVPROG程式設計器,軟體例如USBASP的ISP上位機軟體AVR_fighter.exe(zhb2000)和USBAVRISP(ZHIFENG),但需要AVR MCU連線較多的引腳 (一般20腳);

2.並行程式設計器STK200/STK300,序列程式設計器軟體PonyProg2000. 但需要電腦留有LPT印表機介面,AVR MCU留有ISP6-10標準燒寫口。

1.以我們常用的小馬PonyProg2000序列程式設計器下載軟體為例,在Command選單中選Security and Configuration Bits,(或者點Security and Configuration Bits按鈕)在接著出現的熔絲位配置視窗的下面,有幾個按鈕,千萬不要亂按。正確的方法是先按“Read”按鈕,讀出原來晶片中熔絲位的配置,然後再以此為基礎,按你的需要進行區域性修改,確定無誤後再按“Write”按鈕,就OK了。一般不會出現鎖死的問題。如果萬一由於操作不當,出現鎖死也不必驚慌。

2.除了用並行程式設計器恢復的方法以外,對於沒有並行程式設計器的朋友,還可以用外接有源振盪器的方法解鎖,方法是用一個1MHz的振盪訊號接到ATmega16L的 13腳XTAL1,接通微控制器的電源,正常的話你會看到原來微控制器中的程式已經可以正常運行了。說明外接振盪器已經使微控制器恢復工作了。這下來就好辦了,仍然用PonyProg2000,點Security and Configuration Bits按鈕,進入熔絲位配置視窗,這時你會看到所有的熔絲位都沒打√,連灰色的SPIEN前面那個模糊不清的√也沒了,不過沒關係Don’t worry,你只要按照下圖中ATmega16L出廠時熔絲位的設定打√,然後按“Write”按鈕,如果螢幕輕輕的閃一下,OK,恭喜你已經好了,再按“Read”按鈕,你會看到除了你打√的地方以外,SPIEN前面那個模糊不清的√也出來了。鎖死的晶片已經解鎖了。

要注意的是外接的訊號幅度不可太大,以免損毀晶片,我開始用一個51微控制器的震盪訊號接過來,結果不行,可能是驅動能力不夠。後來換了一個訊號發生器輸出的1MHz的訊號,就成功了。也可以用NE555晶片搭個振盪器做訊號源。 (二)外加有源晶振

執行時鐘 ISP時鐘(必須低於執行時鐘的1/4) 4096Hz <1024Hz //很變態的用法,外接32.768KHz晶體+CKDIV8 ,不過AVRISP還是提供了603Hz這個速度了 //另一簡易解決辦法是 下載時在32.768KHz晶體並聯一個1MHz晶體,雙龍的下載線就配有一個8MHz的石英晶體 32768Hz <8192Hz 128KHz < 32KHz //內部RC128KHz 1.0MHz <250KHz //預設值(包括8MHz+CKDIV8),所以AVRISP的ISP速度多為230KHz 8.0MHz <2000KHz 16.0MHz <4000KHz 執行時鐘不等於震盪器的頻率,因為部分AVR晶片有系統時鐘預分頻器,可以對震盪器進行1~256分頻

CKDIV8熔絲位決定CLKPS位的初始值。 若CKDIV8未程式設計,CLKPS位復位為“0000”;若CKDIV8 已程式設計,CLKPS 位復位為“0011”,給出啟動時分頻因子為8 AVRISP可提供的ISP時鐘 921.6KHz,230.4KHz, 57.6KHz,28.8KHz,4.0KHz, 603Hz STK500可提供的ISP時鐘 1.845MHz,460.8KHz,115.2KHz,57.6KHz,4.0KHz,1206Hz 時鐘設定 ISP方案 內部RC 選擇合適的ISP速度 外部RC 接上合適的電阻和電容,選擇合適的ISP速度。------補救: 外部時鐘源接到XTAL1 外部RC 根本就沒有什麼意義,頻率精度/穩定度不高,成本也沒有降低,所以新的AVR晶片已經沒有這個選項了。

 

 

 

各位網友要注意的是錯誤設定後補救方法 外部晶體 接上合適的晶體,選擇合適的ISP速度。 ------補救: 外部時鐘源接到XTAL1 外部時鐘 接上合適的時鐘源,選擇合適的ISP速度。 ------補救: 外部時鐘源接到XTAL1 外部時鐘源可以是 外部(4MHz)有源晶體輸出,其他MCU的XTAL2腳,各種方波振盪電路(NE555)輸出等 大部分AVR晶片的ISP埠是 SCK,MOSI,MISO,RESET 而M64/M128的ISP埠是 SCK, PDI, PDO,RESET</font> 而且M64/M128出廠預設相容M103----熔絲位M103C=0,很多新特性不能使用,程式也可能不能正常執行 ----因為C編譯器通常預設自動把SP指向SRAM的末端,M103=0x0FFFH, M64/M128=0x10FFH,必然出錯! AVR的所有熔絲位均是: 1 未程式設計,多為不起作用的意思。 0 程式設計,多為 起作用的意思。 基於可程式設計工藝的都是這樣: PROM/EEPROM/FLASH都是出廠時和擦除後變為全1(0xFF)的,要程式設計才能變成0。 反過來就是了,跟CE/OE/INT都是[低電平有效]一樣,都是很常見。 在ISP模式下永遠不能訪問(修改)SPIEN位,這是AVR晶片的硬體保護 有獨立RESET腳的M16/M32/M64/M128等,在ISP模式下根本就就不會令ISP無效,無論如何修改熔絲位,都能恢復正常。 M8/M48/M88/M168/Tiny系列有RSTDISBL熔絲位可以令導致RESET失效而令ISP無法工作外,其他情況都能恢復正常。

 

 

 

一般來說,只要滿足ISP的工作前提,再把XTAL1接到一個4MHz有源晶體的輸出,基本是萬試萬靈的。 通過外加有源晶振的辦法,讓其恢復, 這個方法最可行。它可以恢復大部分熔絲位搞錯的晶片。(重點推薦) 接法如下

打點的口子對應1號腳依次逆時針1 NC2 GND3 CLK4 VCC 1腳不接,2腳接地,3腳接輸出,4腳接電源。恢復方法:

接上上圖的有源晶振,重新通電,可以看到晶片又重新正常工作了,這時就能用ISP或JTAG下載線修改錯誤的熔絲位了。修改完成後,斷電,將有源晶振拆走,看看是否已經恢復正常。

    還有一個辦法,如果沒有有源晶振的話可以用其他工作正常的微控制器的時鐘作為外部晶振,只要將工作正常的微控制器的XTAL2腳連線熔絲設定錯誤的微控制器的XTAL1引腳即可。像我使用AVR910下載線的可直接把AT90S2313的時鐘輸出連到被設定錯的晶片就可恢復了,很方便。

     不要忘記,並行高壓程式設計的時鐘訊號也是從XTAL1匯入方波訊號的。 如果有源晶振的方法不行(除了ISPEN=0,RSTDISBL=0情況外),恐怕高壓程式設計也未必能奏效。 其他一些功能操作對ISP熔絲位的影響

1. JTAG的影響(M16,M32,M128等): JTAG能訪問 SPIEN 和 JTAGEN,要是不小心同時改成SPIEN=1,JTAGEN=1,將會導致MCU鎖死,需要高壓並行程式設計才能恢復。

2. DebugWIRE的影響:(M48,M88,M168,T2313等,資料手冊裡面的資料不是很詳細) 由於DebugWIRE使用RESET腳來通訊,所以跟ISP有所衝突 可以通過ISP或並行高壓程式設計來使能DebugWIRE功能[即DWEN=0],使能DebugWIRE功能後,ISP功能失效。 可以通過DebugWIRE來關閉DebugWIRE功能[即DWEN=1],關閉DebugWIRE功能後,如果RSTDISBL=1,SPIEN=0,ISP功能有效。 比較特殊的是 DebugWIRE除錯中,斷點的使用會降低Flash 資料記憶時間 DebugWIRE除錯用的器件不能發給最終客戶。

3.JTAG MKII同時具備JTAG/DeubgWIRE/ISP三種功能,可以輕鬆實現DebugWIRE/ISP的切換。 (軟體需要升級到1.09版以後 即對應AVRstudio 4.12以後版本) <a href=http://218.16.124.196/bbs/bbs_content.jsp?bbs_sn=551225&bbs_page_no=1&sub_kind_id=1205&bbs_id=1000>最新版本 JTAG MK2使用說明中文pdf(20051125) 設計使用debugWIRE 的系統時,必須進行下面的檢查: • dW/(RESET) 的上拉電阻不得小於10kΩ。debugWIRE 並不需要上拉電阻 • 將 RESET 引腳與 VCC 直接連線將無法工作 • 使用debugWIRE 時必須斷開與RESET 引腳連線的電容 • 必須斷開所有的外部復位源