1. 如何燒錄 arino 的 bootloader
為了恢復Arino的功能,必須得重新給ATMega328P單片機里燒寫bootloader(其實Arino就是在AVR單片機中胡答預置了一個bootloader程序,這樣再配合Arino開發環境就是所謂的Arino了,但Arino這個詞本身只留給官方使用)。當然在淘寶上也能買到已經燒寫好的AVR單片機,只是自己手上已經有了AVR單片機,就沒必要去花那冤枉錢了。
於是馬上打開萬能的網路,輸入關鍵字「Arino bootloader」果然,一大堆亂七八糟相關的問題就出來了,經過一輪的篩選,發現許多說的也並不是很清晰,不過讓我明白了個大概:一個普通的AVR單片機確實能燒寫bootloader之後作為Arino使用。那麼問題來了,如何把bootloader燒錄到AVR單片機中去了?這的確是個問題,反正對於不懂AVR開發的我來說是個問題。不過還好之前在淘寶上買了一個USBASP下載器,跟之前擦除bootloader一樣,也要用到progisp軟體(因為此時的ATMega328P只是一枯埋個普通的AVR單片機,用Arino開發軟體是燒寫不進去的)。
既然要燒沒做螞錄bootloader,那麼什麼是bootloader呢?正如你所想,bootloader當然是一個程序,既然要燒錄到單片機中去,應該是一個.HEX之類的文件。但是,bootloader文件從哪來呢?繼續網路。。。找到了,在Arino軟體安裝目錄中的hardwarearino中。此文件夾下的「boards.txt」文件很重要,是很重要,其他的或許都可以在網路上找到,但因為這個文件折騰了我大半個晚上,網路上也沒有明確的說明。打開文件,找到自己對應的Arino版本,因為我的是「Arino Uno」,於是鎖定「uno.name=Arino 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文件在bootloadersoption文件夾中,「uno.bootloader.file=optiboot_atmega328.hex」文件名就是optiboot_atmega328.hex,這就是接下來需要燒錄到AVR單片機中的程序。用progisp軟體調入此文件,然後直接寫入到AVR單片機中就行了,一個支持Arino的AVR就做好了。。。
其實這個問題本身不難,但對於沒接觸過AVR的人來說,還是要花許多時間的,中間也會存在許許多多各種各樣的問題。至於progisp的使用方法很簡單,網路上的教程也很多,還有手上必須有一塊可以燒錄AVR單片機的下載器。我當時就是忽略了那三個熔絲位的值,所以反反復復也沒有成功,網路上面也沒有對」boards.txt「文件做詳細的解釋。沒設置熔絲位程序是可以正常的燒錄進去,但Arino是不能用的,所以必須要按照官網給出的說明操作。我當時大多數時間主要花在兩個問題上,一個是.HEX文件具體位置,因為Arino有不同的版本,所以.HEX文件也不同,還有一個就是熔絲位上。
2. AVR單片機如何合並bootloader程序和Flash程序為一個HEX文件,我想同時燒寫進單片機。用什麼方法
把bootloader和Flash都轉換為BIN文件格式,然後把Bootloader放在flash文件後面第120K開汪纖攔始的位置。然後困胡把這合並的文豎讓件少寫進單片機。
3. 單片機為什麼能直接燒錄程序
單片機能直接燒錄程序是因為單片機中已經存在了一個燒寫程序。
啟動單片機時首先運行這程序,程序判斷埠狀態,如果符合「要燒寫ROM」的狀態存在,就從某個埠(串口、SPI等等)讀取數據,然後寫入到單片機的ROM中。如果沒有「要燒寫ROM」的狀態,就轉到用戶的程序開始執行。
單擊片燒錄原理總結:
ICP:使用SWD介面進行燒錄,如J-Link燒錄器和J-Flash軟體配合使用。
ISP:使用引導程序(Bootload)加上外圍UART/USB等介面進行燒錄。
IAP:軟體自身實現在線電擦除和編程的方法,不使用任何工具。程序通常分成兩塊,分別為引導程序和應用程序。
4. AVR單片機MEGA328上的BOOTLOAD是用來干什麼的有什麼作用
可以理解為mega328內有兩個存儲區,一個是bootloader區,一個是你正常運行的程序區。 bootloader是用來監控或是下載用的,比如Arino UNO中的mega328就燒錄了相應的bootloader,之後,可直接用相應的arino IDE 一體化的編譯下載,很方便