【轉--tech】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的應用請參考本章相關內容。

二、mega8熔絲位:1:未編程(不選中)0:編程(選中)
***************************************
熔絲位 說明 缺省設置
***************************************
RSTDISBL: 復位或I/O功能選擇 1 1:復位功能;0:I/O功能(PC6)
WDTON: 看門狗開關 1 1:看門狗打開(通過WDTCR允許);0:看門狗禁止
SPIEN: SPI下載允許 0 1:SPI下載禁止;0:SPI下載允許(注:當使用SPI編程時,該項不可用)
EEAVE: 燒錄時EEPROM數據保留 1 1:不保留;0:保留
BODEN: BOD功能控制 1 1:BOD功能禁止;0:BOD功能允許
BODLEVEL: BOD電平選擇 1 1:2.7V電平;0:4.0V電平
BOOTRST: 復位入口選擇 1 1:程序從0x0000地址開始執行;0:程序從引導區確定的入口地址開始執行
***************************************
BOOTSZ1/0: 引導程序大小及入口 00 
00:1024Word/0xc00;
01:512Word/0xe00;
10:256Word/0xf00;
11:128Word/0xf80
***************************************
BLB02/01: 程序區指令位選擇 11
11:SPM和LPM指令都允許執行
10:SPM指令禁止寫程序區
01:引導區LPM指令禁止讀取程序區內容;如果中斷向量定義在引導區,則禁止該中斷在程序區執行。
00:SPM指令禁止寫程序區;引導區LPM指令禁止讀取程序區內容;如果中斷向量定義在引導區,則禁止該中斷在程序區執行。
***************************************
BLB12/11: 引導區指令位選擇 11
11:SPM和LPM指令都允許執行
10:SPM指令禁止寫引導區
01:程序區LPM指令禁止讀取引導區內容;如果中斷向量定義在程序區,則禁止該中斷在引導區執行。
00:SPM指令禁止寫引導區;程序區LPM指令禁止讀取引導區內容;如果中斷向量定義在程序區,則禁止該中斷在引導區執行。
***************************************
LB2/1: 程序區加密位選擇 11 
11:未加密
10:程序和EEPROM編程功能禁止,熔絲位鎖定
00:程序和EEPROM編程及校驗功能禁止,熔絲位鎖定
(注:先編程其他熔絲位,再編程加密位)
***************************************
CKSEL3/0: 時鐘源選擇 0001
CKOPT: 晶振選擇 1
SUT1/0: 復位啓動時間選擇 10
***************************************
CKSEL3/0=0000:外部時鐘,CKOPT=0:允許芯片內部XTAL1管腳對GND接一個36PF電容;CKOPT=1:禁止該電容
----------------
CKSEL3/0=0001-0100:已經校準的內部RC振盪,CKOPT總爲1
0001:1.0M
0010:2.0M
0011:4.0M
0100:8.0M
----------------
CKSEL3/0=0101-1000:外部RC振盪,CKOPT=0:允許芯片內部XTAL1管腳對GND接一個36PF電容;CKOPT=1:禁止該電容
0101:<0.9M
0110:0.9-3.0M
0111:3.0-8.0M
1000:8.0-12.0M
----------------
CKSEL3/0=1001:外部低頻晶振,CKOPT=0:允許芯片內部XTAL1/XTAL2管腳對GND各接一個36PF電容;CKOPT=1:禁止該電容
----------------
CKSEL3/0=1010-1111:外部晶振,陶瓷振盪子,CKOPT=0:高幅度振盪輸出;CKOPT=1:低幅度振盪輸出
101X:0.4-0.9M
110X:0.9-3.0M
111X:3.0-8.0M
***************************************
SUT1/0: 復位啓動時間選擇
當選擇不同晶振時,SUT有所不同。

三、時鐘選擇一覽表
時鐘源 啓動延時 熔絲
外部時鐘 6 CK + 0 ms CKSEL="0000" SUT="00"
外部時鐘 6 CK + 4.1 ms CKSEL="0000" SUT="01"
外部時鐘 6 CK + 65 ms CKSEL="0000" SUT="10"
內部RC振盪1MHZ 6 CK + 0 ms CKSEL="0001" SUT="00"
內部RC振盪1MHZ 6 CK + 4.1 ms CKSEL="0001" SUT="01"
內部RC振盪1MHZ 6 CK + 65 ms CKSEL="0001" SUT="10"
內部RC振盪2MHZ 6 CK + 0 ms CKSEL="0010" SUT="00"
內部RC振盪2MHZ 6 CK + 4.1 ms CKSEL="0010" SUT="01"
內部RC振盪2MHZ 6 CK + 65 ms CKSEL="0010" SUT="10"
內部RC振盪4MHZ 6 CK + 0 ms CKSEL="0011" SUT="00"
內部RC振盪4MHZ 6 CK + 4.1 ms 

發佈了15 篇原創文章 · 獲贊 9 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章