當前位置:編程學習大全網 - 編程語言 - 如何燒錄 arduino 的 bootloader?

如何燒錄 arduino 的 bootloader?

為了恢復Arduino的功能,必須得重新給ATMega328P單片機裏燒寫bootloader(其實Arduino就是在AVR單片機中預置了壹個bootloader程序,這樣再配合Arduino開發環境就是所謂的Arduino了,但Arduino這個詞本身只留給官方使用)。當然在淘寶上也能買到已經燒寫好的AVR單片機,只是自己手上已經有了AVR單片機,就沒必要去花那冤枉錢了。

於是馬上打開萬能的百度,輸入關鍵字“Arduino bootloader”果然,壹大堆亂七八糟相關的問題就出來了,經過壹輪的篩選,發現許多說的也並不是很清晰,不過讓我明白了個大概:壹個普通的AVR單片機確實能燒寫bootloader之後作為Arduino使用。那麽問題來了,如何把bootloader燒錄到AVR單片機中去了?這的確是個問題,反正對於不懂AVR開發的我來說是個問題。不過還好之前在淘寶上買了壹個USBASP下載器,跟之前擦除bootloader壹樣,也要用到progisp軟件(因為此時的ATMega328P只是壹個普通的AVR單片機,用Arduino開發軟件是燒寫不進去的)。

既然要燒錄bootloader,那麽什麽是bootloader呢?正如妳所想,bootloader當然是壹個程序,既然要燒錄到單片機中去,應該是壹個.HEX之類的文件。但是,bootloader文件從哪來呢?繼續百度。。。找到了,在Arduino軟件安裝目錄中的hardware\arduino中。此文件夾下的“boards.txt”文件很重要,是很重要,其他的或許都可以在百度上找到,但因為這個文件折騰了我大半個晚上,百度上也沒有明確的說明。打開文件,找到自己對應的Arduino版本,因為我的是“Arduino Uno”,於是鎖定“uno.name=Arduino Uno”區域的說明,因為看上去很亂,壹定要仔細去看。找到“uno.bootloader.low_fuses=0xff"指編程熔絲低位為FF,”uno.bootloader.high_fuses=0xde“指編程熔絲高位為DE,”uno.bootloader.extended_fuses=0x05“指擴展位為05。這三個值非常重要,是決定妳燒錄bootloader成功的關鍵。至於這三個值具體是什麽意思,我也不是很不清楚,但AVR單片機的燒錄時需要設置熔絲位,而且不能亂設置,這也是AVR跟51單片機的不同之處。

用progisp軟件把這三個熔絲位的值寫入到AVR單片機中,然後繼續瀏覽”boards.txt“文件往下看,找到”uno.bootloade旦長測短爻的詫痊超花r.path=optiboot“這就是說要燒錄的bootloader文件在bootloaders\option文件夾中,“uno.bootloader.file=optiboot_atmega328.hex”文件名就是optiboot_atmega328.hex,這就是接下來需要燒錄到AVR單片機中的程序。用progisp軟件調入此文件,然後直接寫入到AVR單片機中就行了,壹個支持Arduino的AVR就做好了。。。

其實這個問題本身不難,但對於沒接觸過AVR的人來說,還是要花許多時間的,中間也會存在許許多多各種各樣的問題。至於progisp的使用方法很簡單,百度上的教程也很多,還有手上必須有壹塊可以燒錄AVR單片機的下載器。我當時就是忽略了那三個熔絲位的值,所以反反復復也沒有成功,百度上面也沒有對”boards.txt“文件做詳細的解釋。沒設置熔絲位程序是可以正常的燒錄進去,但Arduino是不能用的,所以必須要按照官網給出的說明操作。我當時大多數時間主要花在兩個問題上,壹個是.HEX文件具體位置,因為Arduino有不同的版本,所以.HEX文件也不同,還有壹個就是熔絲位上。

  • 上一篇:圓周率完整版(從古至今的歷史、應用和研究)
  • 下一篇:想個百貨公司的宗旨
  • copyright 2024編程學習大全網