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

一、什么是Bootloader?

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

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

由于Arduino所采用的單片機支持SPI通信協議以及通過該協議上傳(燒錄)程序,因而Arduino本身通過編程即可變身基于SPI協議的編程器。
操作過程非常簡單,打開文件-示例-11.ArduinoISP,將其上傳到Arduino板,此時的Arduino板就成為了一個編程器。使用這個編程器,通過Arduino板上的6針ICSP( in-circuit serial programming)接口(各型號Arduino板均提供的基于SPI協議的編程接口),就可以對目標Arduino板進行更新Bootloader和上傳(燒錄)程序的操作了。

三、用NANO更新NANO Bootloader

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

如果使用UNO作為目標板或編程器,操作過程與連接方式完全同上。可參考文后參考資料。

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

利用上面的連接方式,除了向目標板燒錄Bootloader外,也可以向目標板燒錄用戶編寫的程序,這一點佐證了Bootloader與用戶程序沒有本質區別。具體操作過程是:

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

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

通過上述原理可知,對于一個ATmega328P的最小系統,只要燒錄進相應Arduino型號的Bootloader,即可將其“變成”一個Arduino板,即能夠使用Arduino IDE為之編寫并上傳程序。
因此,我們可以參照Arduino NANO或UNO的電路圖搭建ATmega328P的最小系統,然后利用另外一塊作為編程器的NANO為之燒錄Bootloader,燒錄完成之后,即可利用第四節介紹的方法,在Arduino IDE中向其上傳我們編寫的程序了。

DIYduino電路圖

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

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

ATmega328P引腳與作為編程器的NANO或UNO端口連接的對應關系如下:

ATmega328P引腳序號 Arduino GPIO序號
1 D10
17 D11
18 D12
19 D13

需要注意的是:這個DIYduino可以通過作為編程器的NANO下載程序,但是無法像標準Arduino那樣直接與電腦進行串口通信, 因為這里上傳程序使用的是SPI通信方式而非串口通信方式,若要使用串口與電腦通信,仍需外接USB到串口(TTL)的轉接器。

參考資料:

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

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容