在面包板上DIY自己的Arduino:Arduino Bootloader探秘

一、什么是Bootloader?

大家都知道,Arduino的本質(zhì)就是“ATmega單片機(jī)最小系統(tǒng)板+USB轉(zhuǎn)串口芯片”。所有單片機(jī)的應(yīng)用開(kāi)發(fā)中,均涉及到將編譯好的程序上傳(燒錄)到單片機(jī)的程序存儲(chǔ)器(一種ROM)中的過(guò)程。當(dāng)前主流的單片機(jī)都支持ISP(In System Programing,在系統(tǒng)編程),即無(wú)需將單片機(jī)芯片從電路板(系統(tǒng))上取下,即可對(duì)其上傳(燒錄)程序,其基本原理主要是通過(guò)串行通信端口或SPI(Serial Peripheral Interface,串行外設(shè)接口)端口來(lái)將程序從電腦傳輸?shù)絾纹瑱C(jī)的。為了在通用的通信接口上實(shí)現(xiàn)這種專(zhuān)用目的的數(shù)據(jù)傳輸,需要在單片機(jī)的ROM中事先燒錄一段代碼,這段代碼在每次加電時(shí)自動(dòng)運(yùn)行,主要用于檢測(cè)來(lái)自電腦端的程序傳輸信號(hào),如果檢測(cè)到特定信號(hào),則啟動(dòng)程序上傳(燒錄)過(guò)程,否則就轉(zhuǎn)去執(zhí)行常規(guī)程序。這段代碼就叫做Bootloader。
總之,Bootloader本質(zhì)上與單片機(jī)程序存儲(chǔ)器里存儲(chǔ)的常規(guī)程序并無(wú)二致,可以將其理解為一種專(zhuān)用功能的程序,因而B(niǎo)ootloader本身也是可以向上傳(燒錄)程序一樣進(jìn)行修改的。
Arduino為配合IDE實(shí)現(xiàn)一鍵上傳(燒錄)程序,為各型號(hào)的Arduino板定制了專(zhuān)用的Bootloader,IDE會(huì)根據(jù)工具-處理器工具-開(kāi)發(fā)板中的設(shè)置配合特定型號(hào)Arduino板的Bootloader來(lái)進(jìn)行程序上傳(燒錄)。如果上述菜單中的設(shè)置與目標(biāo)Arduino板中的Bootloader不匹配,則會(huì)出現(xiàn)長(zhǎng)時(shí)間停留在上傳中……最后提示上傳失敗的情況。一個(gè)具體的例子可參見(jiàn):Arduino IDE的安裝、測(cè)試與相關(guān)設(shè)置

二、如何讓Arduino變身編程器(燒錄器)

由于Arduino所采用的單片機(jī)支持SPI通信協(xié)議以及通過(guò)該協(xié)議上傳(燒錄)程序,因而Arduino本身通過(guò)編程即可變身基于SPI協(xié)議的編程器。
操作過(guò)程非常簡(jiǎn)單,打開(kāi)文件-示例-11.ArduinoISP,將其上傳到Arduino板,此時(shí)的Arduino板就成為了一個(gè)編程器。使用這個(gè)編程器,通過(guò)Arduino板上的6針I(yè)CSP( in-circuit serial programming)接口(各型號(hào)Arduino板均提供的基于SPI協(xié)議的編程接口),就可以對(duì)目標(biāo)Arduino板進(jìn)行更新Bootloader和上傳(燒錄)程序的操作了。

三、用NANO更新NANO Bootloader

NANO編程器用作編程器
  1. 如圖連接兩個(gè)NANO;
  2. 將作為編程器的NANO(左)用USB線(xiàn)連接到電腦;
  3. 工具-開(kāi)發(fā)板中選擇目標(biāo)板的型號(hào),此處為Arduino NANO;
  4. 工具-處理器中選擇ATmega328P,這就是2018年1月后新官方NANO的Bootloader;
  5. 工具-端口中選擇作為編程器的NANO所連接的端口(作為目標(biāo)的NANO無(wú)需接USB線(xiàn),由作為編程器的NANO為其供電);
  6. 工具-編程器中選擇Arduino as ISP;
  7. 單擊工具-燒錄引導(dǎo)程序,將Bootloader燒錄至目標(biāo)NANO。

如果使用UNO作為目標(biāo)板或編程器,操作過(guò)程與連接方式完全同上??蓞⒖嘉暮髤⒖假Y料。

四、將NANO用作編程器(燒錄器)

利用上面的連接方式,除了向目標(biāo)板燒錄Bootloader外,也可以向目標(biāo)板燒錄用戶(hù)編寫(xiě)的程序,這一點(diǎn)佐證了Bootloader與用戶(hù)程序沒(méi)有本質(zhì)區(qū)別。具體操作過(guò)程是:

  1. 如上圖連接兩個(gè)NANO;
  2. 將作為編程器的NANO(左)用USB線(xiàn)連接到電腦;
  3. 工具-開(kāi)發(fā)板中選擇目標(biāo)板的型號(hào),此處為Arduino NANO;
  4. 工具-處理器中選擇ATmega328P,這就是2018年1月后新官方NANO的Bootloader,若沒(méi)有更新,則需要選擇ATmega328P (Old Bootloader),總之3、4兩項(xiàng)要與目標(biāo)板相匹配;
  5. 工具-端口中選擇作為編程器的NANO所連接的端口(作為目標(biāo)的NANO無(wú)需接USB線(xiàn),由作為編程器的NANO為其供電);
  6. 工具-編程器中選擇Arduino as ISP;
  7. **使用項(xiàng)目-使用編程器上傳菜單項(xiàng)啟動(dòng)“編譯+上傳”的過(guò)程,這一步須注意,不能使用工具欄中的右向箭頭(上傳)圖標(biāo)。

五、在面包板上搭建自己的Arduino

通過(guò)上述原理可知,對(duì)于一個(gè)ATmega328P的最小系統(tǒng),只要燒錄進(jìn)相應(yīng)Arduino型號(hào)的Bootloader,即可將其“變成”一個(gè)Arduino板,即能夠使用Arduino IDE為之編寫(xiě)并上傳程序。
因此,我們可以參照Arduino NANO或UNO的電路圖搭建ATmega328P的最小系統(tǒng),然后利用另外一塊作為編程器的NANO為之燒錄Bootloader,燒錄完成之后,即可利用第四節(jié)介紹的方法,在Arduino IDE中向其上傳我們編寫(xiě)的程序了。

DIYduino電路圖

ATmega328P最小系統(tǒng)的參考電路圖如上圖所示。所需原件如下:

  1. 晶振 16MHz 1個(gè)
  2. 瓷片電容 22pF 2個(gè)
  3. 瓷片電容 100nF 2個(gè)
  4. 電解電容 47uF 1個(gè)
  5. 電阻 10K 1個(gè)
  6. 電阻 1M 1個(gè)
  7. 集成電路 ATmega328PU(DIP28封裝) 1個(gè)

ATmega328P引腳與作為編程器的NANO或UNO端口連接的對(duì)應(yīng)關(guān)系如下:

ATmega328P引腳序號(hào) Arduino GPIO序號(hào)
1 D10
17 D11
18 D12
19 D13

需要注意的是:這個(gè)DIYduino可以通過(guò)作為編程器的NANO下載程序,但是無(wú)法像標(biāo)準(zhǔn)Arduino那樣直接與電腦進(jìn)行串口通信, 因?yàn)檫@里上傳程序使用的是SPI通信方式而非串口通信方式,若要使用串口與電腦通信,仍需外接USB到串口(TTL)的轉(zhuǎn)接器。

參考資料:

Arduino - ArduinoISP https://www.arduino.cc/en/tutorial/arduinoISP

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容