關於bootloader
* 通常情況下MCU燒寫程序都需要通過專門的編程器進行。
* 假使每次復位時MCU不是從程序存儲器起始位置開始讀取命令,而是預先加載一段指令,實現一些設置和功能,再開始執行代碼。這樣可以極大的方便MCU編程與使用,而這些預先寫入的程序代碼就是bootloader。
* Arduino通過預先寫入的bootloader,當用戶通過串口給Arduino板下載程序時,Arduino板首先會復位一次,這樣就進入了bootloader。 接着向Arduino板發送特定的下載指令,bootloader識別到這些指令後就會開始接收待更新的程序代碼,並寫入到內部flash中;如果沒有進行下載,bootloader沒有識別到下載指令,那麼它就會跳轉到程序區正常工作。
* 總結上述內容,可以理解爲:Arduino之所以能用一根usb線就愉快下載程序的原因就是bootloader。
問題來了:
有些情況下我們需要自己搭建Arduino最小系統板,或者將其嵌入到自己的PCB項目裏。這些只要你想都很容易,但是:新出廠的ATmega328p等等MCU裏是沒有bootloader的,怎麼辦?這時就需要自己燒寫。
燒寫bootloader
• 硬件接口
燒寫bootloader本質上只是使用編程器燒寫一段特殊的程序到MCU中,因此其方法與使用編程器燒寫程序是一樣的,這個方法在不同廠商、不同種類的單片機上都是不同的。
對於一般的Arduino開發板使用的AVR單片機來說,燒寫程序是通過ICSP(in-circuit serial programmming)硬件接口來實現的。
如圖所示,Arduino UNO Rev3上有兩個ICSP接口,
分別對應其中ATmega32u4(左上,用於usb轉串口)
和ATmega328p(右下,用於正常執行指令)。
`對於一般的Arduino開發板,只需要對主處理器燒寫bootloader即可。
如:ATmega328p、ATmega1280、ATmega2560等MCU。`
ICSP接口有6個引腳,其定義如下表所示,
MISO
對應引腳1。
(1) MISO | VCC |
---|---|
SCK | MOSI |
Reset | GND |
引腳可以分爲三個部分:
• SPI接口 `MISO` `MOSI` `SCK`
• 電源 `VCC` `GND`
• 復位 `Reset `
有些Arduino開發板中不僅引出了ICSP接口,同時其中的SPI接口部分的引腳也可以複用作爲普通IO使用,包含在了普通的IO口排座中。部分開發板如Pro MINI等則沒有專門設置ICSP接口排針,但所有引腳均引出。下表是部分Arduino開發板上IO口與SPI引腳的對應關係。
Arduino MCU | MOSI | MISO | SCK |
---|---|---|---|
ATmega328p | 11 | 12 | 13 |
mega1280/mega2560 | 51 | 50 | 52 |
Intel Curie | 11 | 12 | 13 |
•燒寫過程
燒寫bootloader可以使用多種編程器。
Arduino IDE的Tools -> Programmer下顯示了所有支持的編程器列表:
在此小編推薦大家使用`Arduino as ISP`方式,此方式較爲簡單而且成功率高。
Arduino as ISP簡單來說就是將一塊Arduino開發板作爲編程器:給它用
普通方式下載一段專門的程序
,將其變爲一個ISP下載器。
準備好編程器後,將其相應引腳與待燒寫bootloader的開發板對應引腳相連
,並通過Arduino IDE來進行bootloader燒寫
。
步驟如下:
• 1、製作編程器板
打開IDE,Files -> Examples -> ArduinoISP -> ArduinoISP
接入作爲編程器的Arduino開發板並下載此程序,我們稱其爲編程器板。
• 2、編程器板與待燒寫板連接
對應連接關係如下表所示:
編程器板 | 待燒寫板 |
---|---|
MISO/ 12 | MISO / ICSP-1 |
Vcc / 5V | Vcc / ICSP-2 |
SCK / 13 | SCK / ICSP-3 |
MOSI / 11 | MOSI / ICSP-4 |
10 | Reset / ICSP-5 |
GND | GND / ICSP-6 |
實際連接電路示例如下:
• 3、使用Arduino IDE進行bootloader燒寫
按照步驟2連接好電路後,打開IDE,執行如下步驟:
* 點擊Tools -> Boards選擇待燒寫板的類型;
* 在Tools -> Programmer中選擇Arduino as ISP;
* 點擊Tools -> Burn Bootloader;
自測實拍
寫了這麼多,到底好不好用呢,小楊今天就用自己的畫的PCB試試效果。步驟如上文所述。效果如下:
以上就是通過已有的Arduino開發板對部分AVR單片機進行bootloader燒寫的一種方法。當然方法很多,各有優缺點大家根據自己的喜好和需要進行選擇。不足之處還請大家批評指正。
希望文章內容對您稍有幫助。
如果喜歡文章內容,記得點贊關注我們哦。
感謝一直關注着禾灮成長進步的朋友們。你們的信任、支持和鼓勵,鞭策着我們一路走到了今天。
感謝所有的合作伙伴,我們相互促進,共同見證了彼此的成長。
感謝所有曾經在禾灮彼此倚靠、相互鼓勵、攜手同心、砥礪同行的兄弟姐妹。這裏承載了我們的青春與熱血。
禾灮,感謝有你。
未來,我們將一如既往,砥礪前行。
禾灮·小楊
2018.07.17