2018年1月18日 星期四

Arduino (AVR) Fuse 的影響





Arduino (AVR) Fuse 的影響.md


最近在工作上碰到一個奇怪的現象,就是整合的arduino板上的USB Driver(ATmega16U2)明明可以正常燒錄,接上PC也可以找的到Arduino裝置,但是在燒錄的時候卻出現:

最剛開始以為其他電路的問題,後來拿原廠的Arduino board交叉比對,鉤示波器來檢查16U2的石英震盪器發現到在燒錄的時候,原廠的石英震盪器的速度比整合版的速度還要快很多,所以造成燒錄的時序不同,導致在確認裝置的時候,剛好是在RESET訊號啟動的時候,所以造成此問題。

後來才想到可能是IC內部Fuse的問題,用avrdude工具將其值讀出來才發現,原來CKDIV8的設定是啟動的,將設定值修正後,整合板即可正常燒錄。

Fuse的產生可以參考:

Arduino\hardware\arduino\avr\boards.txt

如果是別種的AVR晶片可以使用:

Engbedded Atmel AVR® Fuse Calculator

可以更改表格內的選項,下方的值則會自動產生。

此外,還有一個參數是Lock bit常見的應用如下:

詳細的說明如下:

Lock BitBit No
Reserve7
Reserve6
BLB125
BLB114
BLB023
BLB012
LB21
LB10
BLB12BLB11SPM寫到bootloader區Applcation區讀取bootloader區資料
11沒有限制沒有限制
10限制沒有限制
00限制限制
01沒有限制限制
BLB02BLB01SPM寫到Applcation區bootloader區讀取Applcation區資料
11沒有限制沒有限制
10限制沒有限制
00限制限制
01沒有限制限制
LB2LB1Fuse bit,Flash與EEPROM寫入Boot lock,Flash與EEPROM驗證
11沒有鎖定限制沒有鎖定限制
10鎖定限制沒有鎖定限制
00鎖定限制鎖定限制
01沒有鎖定限制鎖定限制

可以依照自己的需求對IC作設定。