2020年12月19日 星期六

Arduino : 以 Arduino as ISP 方式更新 Atmega 16U2

2020年12月19日 星期六

 昨天成功以 Arduino UNO 更新 3D printer MKS 控制板的 BootLoader,讓原本只能透過 ISCP 更新程式的板子起死回生,想到之前有一片 Mega2560 是抓不到序列埠,是不是更新一下 Atmega 16U2 的 firmware 就可以恢復正常了?

好啦! 先說一下結果是失敗的,但是指令研究半天,還是紀錄一下,說不定哪一天可以用得到。


右邊的 Arduino UNO 是用來幫別人寫入 firmware 的 ISP Programmer,左邊則是預備更新 firmware 的 Mega2560。

而排線則是我利用舊磁碟機排線改裝的。腳位的對應可以參考 Arduino 官網上的說明:


而用來當 Programmer 的 Arduino UNO 也必須先將 Arduino 範例中的 ArduinoISP 程式先安裝好。

Mega2560 有兩個 ISCP ,因為這次要更新的是 Atmega 16U2 的 firmware ,所以就將排線插入 16U2 旁的 ISCP。

準備妥當,就可以執行更新的指令了。我的 Arduino 安裝在 C:\Arduino 中,所以有底下三個檔案:

  • 工具程式
    C:\Arduino\hardware\tools\avr\bin\avrdude.exe
  • 程式設定檔
    C:\Arduino\hardware\tools\avr\etc\avrdude.conf
  • 16U2 的 firmware
    C:\Arduino\hardware\arduino\avr\firmwares\atmegaxxu2\arduino-usbserial\Arduino-usbserial-atmega16u2-Mega2560-Rev3.hex

確定三個檔案都有了,查了一下,我的 Arduino UNO  在序列埠 COM9,需要執行的指令是:


avrdude.exe -C C:\Arduino\hardware\tools\avr\etc\avrdude.conf -c stk500v1 -P COM9 -b 19200 -p m16u2 -vvv -U flash:w:C:\Arduino\hardware\arduino\avr\firmwares\atmegaxxu2\arduino-usbserial\Arduino-usbserial-atmega16u2-Mega2560-Rev3.hex:i


參數備註:

  • -C  : 設定檔的路徑
  • -c : programmer id
  • -P : 通訊埠
  • -b : baud rate
  • -p : 目標晶片的識別代碼
  • -U : 記憶體的型態、動作、firmware路徑、檔案格式......
  • -vvv : 顯示訊息( level 3 )

詳細的說明可以參考:


雖然想救的板子沒救回來,但是用另一片是可以正常更新的,有了新經驗,還是滿開心的。


相關文章


沒有留言:

張貼留言

 
雄::gsyan © 2009. Design by Pocket