AVR筆記3:AVRmega單片機熔絲位的設置詳解及應用舉例
一、正確配置AVR的熔絲位 本文引用地址:http://m.butianyuan.cn/article/201611/322365.htm對AVR熔絲位的配置是比較細致的工作,用戶往往忽視其重要性,或感到不易掌握。下面給出對AVR熔絲位的配置操作時的一些要點和需要注意的相關事項。 (1)在AVR的器件手冊中,對熔絲位使用已編程(Programmed)和未編程(Unprogrammed)定義熔絲位的狀態(tài),“Unprogrammed”表示熔絲狀態(tài)為“1”(禁止);“Programmed”表示熔絲狀態(tài)為“0”(允許)。因此,配置熔絲位的過程實際上是“配置熔絲位成為未編程狀態(tài)“1”或成為已編程狀態(tài)“0””。 (2)在使用通過選擇打鉤“√”方式確定熔絲位狀態(tài)值的編程工具軟件時,請首先仔細閱讀軟件的使用說明,弄清楚“√”表示設置熔絲位狀態(tài)為“0”還是為“1”。 (3)使用CVAVR中的編程下載程序時應特別注意,由于CVAVR編程下載界面初始打開時,大部分熔絲位的初始狀態(tài)定義為“1”,因此不要使用其編程菜單選項中的“all”選項。此時的“all”選項會以熔絲位的初始狀態(tài)定義來配置芯片的熔絲位,而實際上其往往并不是用戶所需要的配置結果。如果要使用 “all”選項,應先使用“read->fuse bits”讀取芯片中熔絲位實際狀態(tài)后,再使用“all” 選項。 (4)新的AVR芯片在使用前,應首先查看它熔絲位的配置情況,再根據實際需要,進行熔絲位的配置,并將各個熔絲位的狀態(tài)記錄備案。 (5)AVR 芯片加密以后僅僅是不能讀取芯片內部Flash和E2PROM中的數據,熔絲位的狀態(tài)仍然可以讀取但不能修改配置。芯片擦除命令是將Flash和 E2PROM中的數據清除,并同時將兩位鎖定位狀態(tài)配置成“11”,處于無鎖定狀態(tài)。但芯片擦除命令并不改變其它熔絲位的狀態(tài)。 (6)正確的操作程序是:在芯片無鎖定狀態(tài)下,下載運行代碼和數據,配置相關的熔絲位,最后配置芯片的鎖定位。芯片被鎖定后,如果發(fā)現熔絲位配置不對,必須使用芯片擦除命令,清除芯片中的數據,并解除鎖定。然后重新下載運行代碼和數據,修改配置相關的熔絲位,最后再次配置芯片的鎖定位。 (7)使用ISP串行方式下載編程時,應配置SPIEN熔絲位為“0”。芯片出廠時SPIEN位的狀態(tài)默認為“0”,表示允許ISP串行方式下載數據。只有該位處于編程狀態(tài)“0”,才可以通過AVR的SPI口進行ISP下載,如果該位被配置為未編程“1”后,ISP串行方式下載數據立即被禁止,此時只能通過并行方式或JTAG編程方式才能將SPIEN的狀態(tài)重新設置為“0”,開放ISP。通常情況下,應保持SPIEN的狀態(tài)為“0”,允許ISP編程不會影響其引腳的I/O功能,只要在硬件電路設計時,注意ISP接口與其并接的器件進行必要的隔離,如使用串接電阻或斷路跳線等。 (8)當你的系統(tǒng)中,不使用JTAG接口下載編程或實時在線仿真調試,且JTAG接口的引腳需要作為I/O口使用時,必須設置熔絲位JTAGEN的狀態(tài)為 “1”。芯片出廠時JTAGEN的狀態(tài)默認為“0”,表示允許JTAG接口,JTAG的外部引腳不能作為I/O口使用。當JTAGEN的狀態(tài)設置為“1” 后,JTAG接口立即被禁止,此時只能通過并行方式或ISP編程方式才能將JTAG重新設置為“0”,開放JTAG。 (9)一般情況下不要設置熔絲位把RESET引腳定義成I/O使用(如設置ATmega8熔絲位RSTDISBL的狀態(tài)為“0”),這樣會造成ISP的下載編程無法進行,因為在進入ISP方式編程時前,需要將RESET引腳拉低,使芯片先進入復位狀態(tài)。 (10)使用內部有RC振蕩器的AVR芯片時,要特別注意熔絲位CKSEL的配置。一般情況下,芯片出廠時CKSEL位的狀態(tài)默認為使用內部1MHz的RC振蕩器作為系統(tǒng)的時鐘源。如果你使用了外部振蕩器作為系統(tǒng)的時鐘源時,不要忘記首先正確配置CKSEL熔絲位,否則你整個系統(tǒng)的定時都會出現問題。而當在你的設計中沒有使用外部振蕩器(或某鐘特定的振蕩源)作為系統(tǒng)的時鐘源時,千萬不要誤操作或錯誤的把CKSEL熔絲位配置成使用外部振蕩器(或其它不同類型的振蕩源)。一旦這種情況產生,使用ISP編程方式則無法對芯片操作了(因為ISP方式需要芯片的系統(tǒng)時鐘工作并產生定時控制信號),芯片看上去“壞了”。此時只有使用取下芯片使用并行編程方式,或使用JTAG方式(如果JTAG為允許時且目標板上留有JTAG接口)來解救了。另一種解救的方式是:嘗試在芯片的晶體引腳上臨時人為的疊加上不同類型的振蕩時鐘信號,一旦ISP可以對芯片操作,立即將CKSEL配置成使用內部1MHz的RC振蕩器作為系統(tǒng)的時鐘源,然后再根據實際情況重新正確配置CKSEL。 (11)使用支持IAP的 AVR芯片時,如果你不使用BOOTLOADER功能,注意不要把熔絲位BOOTRST設置為“0”狀態(tài),它會使芯片在上電時不是從Flash的 0x0000處開始執(zhí)行程序。芯片出廠時BOOTRST位的狀態(tài)默認為“1”。關于BOOTRST的配置以及BOOTLOADER程序的設計與IAP的應用請參考本章相關內容。 二、AVRmega16單片機中重要熔絲位的配置 (1)CLKSEL[3:0]:用于選擇系統(tǒng)的時鐘源。 (2)SPIEN:SPI下載使能位。默認狀態(tài)為允許“0”。 (3)WDTON:WDT定時器始終開啟設置位。默認為“1”,表示禁止WDT始終開啟。 (4)EESAVE:執(zhí)行擦除命令時是否保留EEPROM中的內容,默認狀態(tài)為“1”,表示執(zhí)行片內擦除命令時,EERPOM中的內容和Flash中的內容一同被擦除。 (5)BOOTRST:決定芯片上電時,第一條執(zhí)行指令的所在地址。默認狀態(tài)為“1”,表示啟動時從0x0000開始執(zhí)行。如果BOOTRST設置為“0”,則啟動時從Bootloader區(qū)的(6)起始地址處開始執(zhí)行程序。 (7)BOOTSZ1和BOOTSZ0:確定Bootloader區(qū)的大小及其起始的首地址。默認狀態(tài)為“00”,表示Bootloader區(qū)為1024個字的大小,起始首地址為0x1C00。 三、JTAG口的使用與配置 AVRmega16上,JTAG的4個端口與PC口中的4位使用相同的引腳(TDI/PC5、TDO/PC4、TMS/PC3和TCK/PC2),如果使用JTAG口的功能,一旦設置JTAG接口處于使能狀態(tài),那么PC[5:2]就不能作為通常的I/O口使用了,這就意味著減少了可用的I/O口線。 在AVRmega16中,使用兩個熔絲位(JTAGEN和OCDEN)和MCUCSR寄存器中的JTD位對JTAG進行控制。其中JTD位可以由程序指令進行改變。下表給出3個控制位對JTAG的控制
注:JTD控制位上電復位的初值是“0”,同時為了防止意外開啟或關閉JTAG口,需要使用特定的指令操作時序對JTD進行設置:必須在4個時鐘周期內對JTD位重復2次寫入,才能將JTD標志設置成所希望的值。 |
四、提高系統(tǒng)可靠性的熔絲位配置
(1)BOD功能:對系統(tǒng)電壓進行檢測的功能,一旦系統(tǒng)電壓低于設定的門限電壓后,AVR將自動停止正常運行,進入復位狀態(tài)。
對于5V系統(tǒng),設置BOD電平為4.0V,然后允許BOD檢測。
對于3V系統(tǒng),設置BOD電平為2.7V,然后允許BOD檢測。
(2)延時啟動時間:通過AVR熔絲位配置,最長延時啟動時間達到65ms。
(3)CKOPT熔絲位的使用:在引腳XTAL1和XTAL2上外接由石英晶體并配合片內的OSC振蕩電路構成的振蕩源時,CKOPT的作用是控制片內OSC振蕩電路的振蕩幅度;CKOPT="1"時,振蕩電路為半幅振蕩;CKOPT="0"時,振蕩電路為全幅振蕩;
當系統(tǒng)時鐘頻率較高(>8MHz)或要求抗干擾能力強時,應該設置CKOPT為“0”。當系統(tǒng)時鐘頻率較低(<2MHz)時,可以考慮將CKOPT設置為“1”(出廠默認值),這樣可以減少電流的消耗。
評論