關(guān)于bootloader
- 通常情況下MCU燒寫程序都需要通過專門的編程器進(jìn)行。
- 假使每次復(fù)位時(shí)MCU不是從程序存儲(chǔ)器起始位置開始讀取命令察滑,而是預(yù)先加載一段指令,實(shí)現(xiàn)一些設(shè)置和功能修肠,再開始執(zhí)行代碼贺辰。這樣可以極大的方便MCU編程與使用,而這些預(yù)先寫入的程序代碼就是bootloader嵌施。
Arduino通過預(yù)先寫入的bootloader饲化,當(dāng)用戶通過串口給Arduino板下載程序時(shí),Arduino板首先會(huì)復(fù)位一次吗伤,這樣就進(jìn)入了bootloader吃靠。 接著向Arduino板發(fā)送特定的下載指令,bootloader識別到這些指令后就會(huì)開始接收待更新的程序代碼足淆,并寫入到內(nèi)部flash中巢块;如果沒有進(jìn)行下載,bootloader沒有識別到下載指令巧号,那么它就會(huì)跳轉(zhuǎn)到程序區(qū)正常工作族奢。
- 總結(jié)上述內(nèi)容,可以理解為:
Arduino之所以能用一根usb線就愉快下載程序的原因就是bootloader丹鸿。
問題來了:
有些情況下我們需要自己搭建Arduino最小系統(tǒng)板越走,或者將其嵌入到自己的PCB項(xiàng)目里。這些只要你想都很容易卜高,但是:新出廠的ATmega328p等等MCU里是沒有bootloader的弥姻,怎么辦?這時(shí)就需要自己燒寫掺涛。
燒寫bootloader
? 硬件接口
燒寫bootloader本質(zhì)上只是使用編程器燒寫一段特殊的程序到MCU中庭敦,因此其方法與使用編程器燒寫程序是一樣的,這個(gè)方法在不同廠商薪缆、不同種類的單片機(jī)上都是不同的秧廉。
對于一般的Arduino開發(fā)板使用的AVR單片機(jī)來說,燒寫程序是通過ICSP(in-circuit serial programmming)硬件接口來實(shí)現(xiàn)的拣帽。
如圖所示疼电,Arduino UNO Rev3上有兩個(gè)ICSP接口,
分別對應(yīng)其中ATmega32u4(左上减拭,用于usb轉(zhuǎn)串口)
和ATmega328p(右下蔽豺,用于正常執(zhí)行指令)。
`對于一般的Arduino開發(fā)板拧粪,只需要對主處理器燒寫bootloader即可修陡。
如:ATmega328p沧侥、ATmega1280、ATmega2560等MCU魄鸦。`
ICSP接口有6個(gè)引腳宴杀,其定義如下表所示,
MISO
對應(yīng)引腳1拾因。
(1) MISO | VCC |
---|---|
SCK | MOSI |
Reset | GND |
引腳可以分為三個(gè)部分:
? SPI接口 `MISO` `MOSI` `SCK`
? 電源 `VCC` `GND`
? 復(fù)位 `Reset `
有些Arduino開發(fā)板中不僅引出了ICSP接口旺罢,同時(shí)其中的SPI接口部分的引腳也可以復(fù)用作為普通IO使用,包含在了普通的IO口排座中绢记。部分開發(fā)板如Pro MINI等則沒有專門設(shè)置ICSP接口排針扁达,但所有引腳均引出。下表是部分Arduino開發(fā)板上IO口與SPI引腳的對應(yīng)關(guān)系蠢熄。
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開發(fā)板作為編程器:給它用
普通方式下載一段專門的程序
惠遏,將其變?yōu)橐粋€(gè)ISP下載器。
準(zhǔn)備好編程器后骏啰,將其相應(yīng)引腳與待燒寫bootloader的開發(fā)板對應(yīng)引腳相連
节吮,并通過Arduino IDE來進(jìn)行bootloader燒寫
。
步驟如下:
? 1判耕、制作編程器板
打開IDE,Files -> Examples -> ArduinoISP -> ArduinoISP
接入作為編程器的Arduino開發(fā)板并下載此程序透绩,我們稱其為編程器板。
制作編程器板需下載的對應(yīng)程序
? 2壁熄、編程器板與待燒寫板連接
對應(yīng)連接關(guān)系如下表所示:
編程器板 | 待燒寫板 |
---|---|
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 |
實(shí)際連接電路示例如下:
編程器與ICSP接口連接電路示意
編程器與引腳直接連接電路示意
? 3帚豪、使用Arduino IDE進(jìn)行bootloader燒寫
按照步驟2連接好電路后,打開IDE草丧,執(zhí)行如下步驟:
- 點(diǎn)擊Tools -> Boards選擇待燒寫板的類型狸臣;
- 在Tools -> Programmer中選擇Arduino as ISP;
點(diǎn)擊Tools -> Burn Bootloader昌执;
選擇待燒寫板的類型
使用Arduino IDE進(jìn)行bootloader燒寫
燒錄Bootloader
自測實(shí)拍
寫了這么多烛亦,到底好不好用呢,小楊今天就用自己的畫的PCB試試效果懂拾。步驟如上文所述煤禽。效果如下:
用UNO作為編程器,與自己畫的待燒寫PCB連接
Bootloader燒錄成功后D13燈會(huì)同時(shí)閃爍
測試下載成功
以上就是通過已有的Arduino開發(fā)板對部分AVR單片機(jī)進(jìn)行bootloader燒寫的一種方法岖赋。當(dāng)然方法很多檬果,各有優(yōu)缺點(diǎn)大家根據(jù)自己的喜好和需要進(jìn)行選擇。不足之處還請大家批評指正。
希望文章內(nèi)容對您稍有幫助选脊。
如果喜歡文章內(nèi)容衷畦,記得點(diǎn)贊關(guān)注我們哦。
感謝一直關(guān)注著禾灮成長進(jìn)步的朋友們知牌。你們的信任、支持和鼓勵(lì)斤程,鞭策著我們一路走到了今天角寸。
感謝所有的合作伙伴,我們相互促進(jìn)忿墅,共同見證了彼此的成長扁藕。
感謝所有曾經(jīng)在禾灮彼此倚靠、相互鼓勵(lì)疚脐、攜手同心亿柑、砥礪同行的兄弟姐妹。這里承載了我們的青春與熱血棍弄。
禾灮望薄,感謝有你。
未來呼畸,我們將一如既往痕支,砥礪前行。
禾灮·小楊
2018.07.17