2011年11月16日 星期三

如何用 FLIP 更新 Atmega8u2 的韌體

在前一篇中,我們已經知道如何讓 Arduino Uno 進入 DFU mode,這一篇我們來學習如何用 FLIP 更新 Atmega8U2 的韌體。我將以 Arduino-usbserial 示範如何燒錄韌體。

準備韌體檔

Arduino-usbserial 的韌體檔座落於 "arduino-00xx\hardware\arduino\firmwares\arduino-usbserial\" 這個資料夾:

image
▲ Arduino-usbserial-uno.hex  是給 Uno 用,而 Arduino-usbserial-mega 則是供 Mega 2560 使用

你也可以連到底下的網址,直接從網路下載 hex 檔:

http://goo.gl/OipyJ

下載畫面:

image

我的板子是 Uno,所以我選擇 Arduino-usbserial-uno.hex。

用 FLIP 更新 Atmega8U2 的韌體

我們第一步是讓 Arduino 進入 DFU mode。在還沒進入 DFU mode 前,你在「裝置管理員」裏看到的裝置是 "Arduino UNO (COMx)"

image

現在拿出一條連接線,一端接到 GND,然後另一端輕輕觸碰一下 Atmega8U2 的 RESET 接腳:

 image_thumb[16]
▲ 讓 Atmega8U2 進入 DFU mode

當 Arduino 進入 DFU mode 後,你在「裝置管理員」裏看到的裝置會變成 AT90USB82:

image_thumb51

接著打開 Atmel Flip,開啟後畫面會是這樣,一開始視窗上大部份功能都是失效的 (Disabled),不能點:

image
▲ FLIP

先點一下左上角工具列的第一個圖示 ("Select a Target Device"):

image_thumb12

選擇 "AT90USB82" 後按「確定」:

image_thumb15
注意不要選錯了!是選擇 "AT90USB82",而非 "Atmega8U2"

接著點工具列第二個圖示 (長得像 USB cable 的圖示),然後選 USB:

image_thumb18[1]

如果一切順利,這時 Flip 視窗上所有功能會變成有效的 (Enabled),而且圖示會變成彩色的:

image

再來是點 "File > Load HEX File…",載入 Arduino-usbserial-uno.hex:

image  

按一下 Run 把 hex 檔寫到 Atmega8U2 晶片上:

image_thumb21

最後按一下 Start Application:

image_thumb24

這時候「裝置管理員」裏就會看到 "Arduino UNO (COMx)" 這個裝置再度出現重出江湖,這代表你已經成功用 FLIP 更新了 Atmega8U2 的韌體了:

image

補充說明:有時候按下 FLIP 的 Start Application 後「裝置管理員」上看到的可能還是 AT90USB82 的裝置,這時候請給 Arduino 重新上電,這樣就會看到 "Arduino UNO (COMx)" 的裝置了。

參考資料

12 意見:

a741852963a2000 提到...

請問Arduino Uno R3的atmega16u2也可以使用相同的韌體嗎

a741852963a2000 提到...
作者已經移除這則留言。
coopermaa 提到...

Arduino-usbserial-uno.hex 是給 Atmega8u2 用的,UNO R3 的 Atmega16u2 要用 Arduino-usbserial-atmega16u2-Uno-Rev3.hex 這個版本。檔案一樣是放在 "arduino-1.xx\hardware\arduino\firmwares\arduino-usbserial\" 這個資料夾 (Arduino 1.0 之後的版本才有)

你也可以從網路下載 Arduino-usbserial-atmega16u2-Uno-Rev3.hex:

https://github.com/arduino/Arduino/tree/master/hardware/arduino/firmwares/arduino-usbserial

喬喬喬 提到...

請問...
我把HEX檔放在"arduino-1.xx\hardware\arduino\firmwares\arduino-usbserial\" 這裡了
可是FLIP在讀HEX的時候會顯示
"cannot open file"
然後我就改把HEX檔放桌面
他在讀取的時候變成
"invalid HEX file syntax"
請問這樣可能是哪裡出錯了...

喬喬喬 提到...

然後...
我的arduino進入DFU mode之後
就回不了UNO了 怎麼辦QAQ!!!
重新插拔USB之後仍然是DFU mode...

coopermaa 提到...

你有裝 FLIP 嗎? 你用 FLIP 把 UNO 就行了
方法可以參考這篇的操作步驟

coopermaa 提到...

你 HEX 檔是打哪來的? 是在 arduino-1.xx\hardware\arduino\firmwares\arduino-usbserial 取得的,還是從網路下載的?

檔案 size 是多大?

coopermaa 提到...

我大概知道了
我猜你 HEX 檔是不是從網路下載的?

之所以 FLIP 開啟 HEX 檔會出現 "invalid HEX file syntax",應該是因為下載回來的 HEX 檔是 HTML 格式的檔案的關係

建議你到底下的網址,在 RAW 上面按右鍵選 "另存連結為" 存檔後再試試:
http://goo.gl/6a8qT




喬喬喬 提到...

耶~我成功了
謝謝~
不過HEX檔放在資料夾裡他FLIP就讀不到...
放在桌面卻可以~
更新完硬體之後他也終於回到UNO mode了(感動

coopermaa 提到...

所以你會用 FLIP 更換 atmega8u2 的韌體了!恭禧!恭禧!

現在你可以試著往下一站移動,試試 "Arduino Uno Keyboard": http://coopermaa2nd.blogspot.tw/2011/11/arduino-uno-keyboard.html

喬喬喬 提到...

請問~
如果我想用arduino偵測可變電阻的值
控制鍵盤左右鍵的話
也可以用這種方法嗎?
還是需要別的作法?

cooper maa 提到...

是的, 你可以搭配可變電阻控制鍵盤左右鍵

不過,"Arduino Uno Keyboard" (http://coopermaa2nd.blogspot.tw/2011/11/arduino-uno-keyboard.html) 這篇比較難,建議你看過 USBKeyboard Library (http://coopermaa2nd.blogspot.tw/2011/11/usbkeyboard-library.html) 這篇後再行動不遲