使用Leonardo(李奧納多)板燒錄Arduino的Bootloader

Arduino Leonardo(李奧納多)板的微控器和UNO不同,因此它的接腳定義也不同於UNO(請參閱「Arduino Leonardo控制板的數位14~17腳、類比A6~A11腳以及SPI腳位介紹」)。燒錄Bootloader時,需要銜接Arduino板子的SPI腳位,Leonardo板的接線方式如下:

leonardo(李奧納多)板充當燒錄器的接線方式

修改ArduinoISP程式參數

按照上面的電路圖接好線路之後,將Arduino板連接到電腦,再選擇Arduino軟體主功能表的「檔案→範例→ArduinoISP」指令,開啟燒錄器程式。

請找到原始碼第2行(開頭的註解和空白行不算)的RESET定義敘述:

ArduinoISP的原始RESET腳位定義

將其中的SS改成10,代表透過第10腳送出RESET(重置)訊號給被燒錄的晶片:

修改後的RESET腳位定義

修改完畢後,上傳到Leonardo板

選擇燒錄目標的Arduino Bootloader版本

自行組裝的Arduino控制板(像上圖的麵包板電路),屬於Arduino Duemilanove相容板,因此在燒錄bootloader之前,請先選擇Arduino開發工具主功能表的「工具→板子→Arduino Duemilanove w/ ATmega328」指令。

選擇 "Arduino Duemilanove w/ ATmega328" 指令

指定採用Arduino當做燒錄器

通常只要選擇Arduino開發工具主功能表的「工具→燒錄器→Arduino as ISP」指令,就能指定採用Arduino當做燒錄器。

然而,若執行「工具→燒錄bootloader」開始進行燒錄,Arduino將回應錯誤訊息“avrdude: stk500_getsync(): not in sync: resp=0x00”:

找不到Arduino板的錯誤訊息

錯誤訊息裡的“avrdude”是實際負責上傳與燒錄程式的軟體名稱;“stk500”則是軟體與Arduino燒錄板之間溝通所使用的通訊協定名稱;“not in sync”代表「沒有同步」,也就是燒錄軟體無法和板子溝通。

為了讓燒錄軟體順利和Leonardo板子溝通,我們必須新增或修改燒錄軟體的參數設定,新增燒錄參數的方法有兩種,讀者可以採用下列任何一種方式。

設定avrdude燒錄軟體的參數:方法一

燒錄軟體的參數設定,存放在Arduino工具軟體安裝路徑的“hardware\arduino”底下的“programmers.txt”檔:

預設的programmers.txt檔

請使用Notepad++Sublime Text等文字編輯器開啟“programmers.txt”檔,然後在最底下加入這四行:

avrdude燒錄軟體的參數

如下圖的28~31行:

新增四行敘述

新增完畢後存檔。

設定avrdude燒錄軟體的參數:方法二

在Arduino軟體安裝路徑裡的“hardware”之中,新增一個資料夾,筆者將它命名為“leonardo”:

在hardware路徑底下新增資料夾

開啟「記事本」或其他文字編輯器,輸入底下四行:


leonardoisp.name=「李奧納多」燒錄器
leonardoisp.communication=serial
leonardoisp.protocol=arduino
leonardoisp.speed=19200

將此文字檔命名為“programmers.txt”,存入剛才新增的資料夾:

新增的programmers.txt文字檔

開始燒錄bootloader

關閉Arduino工具軟體,再重新開啟,即可在「工具→燒錄器」選單底下,看到剛剛自訂的指令,請選擇它:

選擇自訂的avrdude燒錄軟體參數設定

最後,選擇「工具→燒錄bootloader」指令開始進行燒錄。不久,Arduino將回報“燒錄bootloader完畢”的訊息:

燒錄bootloader完畢

延伸閱讀

Posts created 467

6 thoughts on “使用Leonardo(李奧納多)板燒錄Arduino的Bootloader

  1. 老師您好,
    我想用以上方式以第一張Leonardo當ISP上傳blink程式至第二張Leonardo,
    接線將兩張板子ICSP六隻腳對接, ISP版的D10接target版的reset,
    但上傳程式後仍是燒錄到ISP版而非target版,
    可否指點可能哪邊有問題呢?
    感謝您的幫忙!

    1. hi 葉子:

      這篇文章的用意,在於替自製的Arduino控制板,燒入開機啟動程式(bootloader)。如果你要上傳自訂的Arduino程式,如:blink,那就直接用USB線上傳就好啦~

      thanks,
      jeffrey

  2. 謝謝您的回覆,
    因為公司環境有限制只能用RS232,
    所以想到很迂迴的方式PC RS232接MAX232轉接板接Arduino ISP板燒錄Target板…
    故出此下策…
    謝謝您!

    1. 請公司添購一台具有USB介面的電腦吧,畢竟讓一個人力花費一堆時間在處理上傳程式碼,實在不合理。

      或者,如果你有具備USB OTG介面的Android手機或平板,請安裝ArduinoDroid – Arduino IDE App,它能讓你在Android系統上開發並上傳Arduino程式,有支援UNO和Leonardo板。

      good luck!
      jeffrey

  3. 謝謝您的指點,
    結果是我搞烏龍,
    要選File–>Upload Using Programmer不是直接點GUI的Upload,
    這樣才會把UNO當ISP燒Leo而不是燒到UNO,
    也成功用PC–>232–>Max232 to TTL–>UNO as ISP–>Upload sketch to Leo,
    謝謝!
    (公司不給用USB是管理因素並非電腦沒有@@…)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Related Posts

Begin typing your search term above and press enter to search. Press ESC to cancel.

Back To Top