2015年9月20日 星期日

Arduno : 透過 ICSP 燒錄程式

最近算是有一點點背,身體出了點狀況,連手摸過的東西都跟著遭殃。小心翼翼地換好 SmartrapCore 出料不順的 E3D 喉管,正準備測試新喉管的效果時,拆下的風扇電線,裸露的杜邦端子公頭居然誤觸偷懶放在機箱底部的主控板,未斷電的整合式控制板(MKS MINI)就這麼短路起火陣亡了!換上另一片較高檔的 MKS Base V1.3,準備寫入 Marlin 時,卻又一直出現無法和板子通訊的錯誤訊息:

avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_getsync(): timeout communicating with programmer

試了很多方法,即使換了不同版本的 FTDI drver ,還是無法寫入靭體。喂!這塊是全新的板子,完全沒用過吔!浪費了不少時間後,使出最後一招:「用 Arduino UNO 救 Arduino Mega 2560,透過 ICSP 寫入靭體。」,總算讓只會一閃一閃的 MKS Base V1.3 醒過來了。

底下來看看如何進行:
有了未斷電火燒板子的前車之鑑,記得先拔除所有的電源。利用兩端分別為公、母端子的杜邦線,依底下的對應關係,將 Arduino UNO 和 MKS Base V1.3(MEGA 2560)的 ICSP 連接:



  • UNO D13 ←→ Mega 2560 ICSP SCK (pin 3)
  • UNO D12 ←→ Mega 2560 ICSP MISO (pin 1)
  • UNO D11 ←→ Mega 2560 ICSP MOSI (pin 4)
  • UNO D10 ←→ Mega 2560 ICSP REST (pin 5)
  • UNO 5V ←→ Mega 2560 ICSP +5V (pin 2)
  • UNO GND ←→ Mega 2560 ICSP GND (pin 6)


確認接線無誤以後,將 Arduino UNO 以 USB 線與電腦連線(Mega 2560不需另外插電)。執行 Arduino IDE ,利用主選單「File」中的「Example」,將「ArduinoISP」的範例程式開啟。


設定好當「Master端」的 UNO,將「ArduinoISP」的靭體編譯好,並上載至UNO中:


當 UNO 己寫入 ArdunoISP 的靭體以後,我們就將它變成一個燒錄器了。可以打開要寫入 Slave 端的程式了。

我們將板子的類型換成 Slave 端的類型,本例中的 MKS Base V1.3 用的單晶片是 Mega 2560,所以由主選單「Tools」中選「Arduino Mega 2560 or Mega ADK」。


接著指定寫靭體時的「Programming」,由主選單「Tools」中的「Programming」選取「Arduno as ISP」:


經前面的設定後,確認已開啟我們要寫入「MKS Base V1.3 」的靭體──「Marlin」後,準備要編譯及上載囉!

不過,別太衝動,和平常直接按「Upload」不同,這次要由主選單「File」中的「Upload using Programmer」來進行上載靭體的工作:


如果選了「Upload using Programmer」,當Master 端的 Ardunio UNO 會幫我們將編譯好的靭體寫入 Slave 端的「MKS Base V1.3 」中。

新靭體上載完畢後,就可以將當 ISP 的 Arduino UNO 拆除,把 「MKS Base V1.3 」重新插上 USB 線測試囉!還好 3D printer 的 Marlin 不用常常重新上載,不然,為了更新靭體,拆拆裝裝,也是滿煩人的。



沒有留言:

張貼留言

 
© 2009. Design by Pocket