Arduino Leonardo(李奧納多)板的微控器和UNO不同,因此它的接腳定義也不同於UNO(請參閱「Arduino Leonardo控制板的數位14~17腳、類比A6~A11腳以及SPI腳位介紹」)。燒錄Bootloader時,需要銜接Arduino板子的SPI腳位,Leonardo板的接線方式如下:
修改ArduinoISP程式參數
按照上面的電路圖接好線路之後,將Arduino板連接到電腦,再選擇Arduino軟體主功能表的「檔案→範例→ArduinoISP」指令,開啟燒錄器程式。
請找到原始碼第2行(開頭的註解和空白行不算)的RESET定義敘述:
將其中的SS改成10,代表透過第10腳送出RESET(重置)訊號給被燒錄的晶片:
修改完畢後,上傳到Leonardo板。
選擇燒錄目標的Arduino Bootloader版本
自行組裝的Arduino控制板(像上圖的麵包板電路),屬於Arduino Duemilanove相容板,因此在燒錄bootloader之前,請先選擇Arduino開發工具主功能表的「工具→板子→Arduino Duemilanove w/ ATmega328」指令。
指定採用Arduino當做燒錄器
通常只要選擇Arduino開發工具主功能表的「工具→燒錄器→Arduino as ISP」指令,就能指定採用Arduino當做燒錄器。
然而,若執行「工具→燒錄bootloader」開始進行燒錄,Arduino將回應錯誤訊息“avrdude: stk500_getsync(): not in sync: resp=0x00”:
錯誤訊息裡的“avrdude”是實際負責上傳與燒錄程式的軟體名稱;“stk500”則是軟體與Arduino燒錄板之間溝通所使用的通訊協定名稱;“not in sync”代表「沒有同步」,也就是燒錄軟體無法和板子溝通。
為了讓燒錄軟體順利和Leonardo板子溝通,我們必須新增或修改燒錄軟體的參數設定,新增燒錄參數的方法有兩種,讀者可以採用下列任何一種方式。
設定avrdude燒錄軟體的參數:方法一
燒錄軟體的參數設定,存放在Arduino工具軟體安裝路徑的“hardware\arduino”底下的“programmers.txt”檔:
請使用Notepad++或Sublime Text等文字編輯器開啟“programmers.txt”檔,然後在最底下加入這四行:
如下圖的28~31行:
新增完畢後存檔。
設定avrdude燒錄軟體的參數:方法二
在Arduino軟體安裝路徑裡的“hardware”之中,新增一個資料夾,筆者將它命名為“leonardo”:
開啟「記事本」或其他文字編輯器,輸入底下四行:
leonardoisp.name=「李奧納多」燒錄器
leonardoisp.communication=serial
leonardoisp.protocol=arduino
leonardoisp.speed=19200
將此文字檔命名為“programmers.txt”,存入剛才新增的資料夾:
開始燒錄bootloader
關閉Arduino工具軟體,再重新開啟,即可在「工具→燒錄器」選單底下,看到剛剛自訂的指令,請選擇它:
最後,選擇「工具→燒錄bootloader」指令開始進行燒錄。不久,Arduino將回報“燒錄bootloader完畢”的訊息:
老師您好,
我想用以上方式以第一張Leonardo當ISP上傳blink程式至第二張Leonardo,
接線將兩張板子ICSP六隻腳對接, ISP版的D10接target版的reset,
但上傳程式後仍是燒錄到ISP版而非target版,
可否指點可能哪邊有問題呢?
感謝您的幫忙!
hi 葉子:
這篇文章的用意,在於替自製的Arduino控制板,燒入開機啟動程式(bootloader)。如果你要上傳自訂的Arduino程式,如:blink,那就直接用USB線上傳就好啦~
thanks,
jeffrey
謝謝您的回覆,
因為公司環境有限制只能用RS232,
所以想到很迂迴的方式PC RS232接MAX232轉接板接Arduino ISP板燒錄Target板…
故出此下策…
謝謝您!
請公司添購一台具有USB介面的電腦吧,畢竟讓一個人力花費一堆時間在處理上傳程式碼,實在不合理。
或者,如果你有具備USB OTG介面的Android手機或平板,請安裝ArduinoDroid – Arduino IDE App,它能讓你在Android系統上開發並上傳Arduino程式,有支援UNO和Leonardo板。
good luck!
jeffrey
謝謝您的指點,
結果是我搞烏龍,
要選File–>Upload Using Programmer不是直接點GUI的Upload,
這樣才會把UNO當ISP燒Leo而不是燒到UNO,
也成功用PC–>232–>Max232 to TTL–>UNO as ISP–>Upload sketch to Leo,
謝謝!
(公司不給用USB是管理因素並非電腦沒有@@…)
原來如此,恭喜hacking成功!
thanks,
jeffrey