2011年11月15日 星期二

如何讓 Arduino Uno 進入 DFU mode

ATmega8U2 晶片簡介

Arduino Uno 跟先前的板子最大的不同,是不再使用 FTDI 的 USB-to-serial 晶片,取而代之的,是改用 Atmega8U2 這顆晶片當作 USB-to-serial 的轉換器,它的角色是扮演電腦 USB port 跟 Arduino 主控制器 Atmega328p serial port 之間的橋梁。。

image
▲  Atmega8U2 所在的位置

Atmega8U2 上面有韌體,出廠預設燒錄的是 Arduino-usbserial,功能就是做 USB-to-serial 的轉接,然而我們可以透過一個 叫作 DFU (Device Firmware Upgrade) 的 USB 協定來更新 Atmega8U2 的韌體。

所以,如果你要更新 Atmega8U2 的韌體,就得先讓 Atmega8U2 進入 DFU mode,然後再利用專屬的軟體來燒錄韌體,一般而言,在 Windows 上會用 FLIP,而在 MAC & Linux 則是使用 dfu-programmer。這篇我們先說明如何讓 Arduino 進入 DFU mode,下一篇接著介紹如何用 FLIP 更新 Atmega8U2 的韌體。

什麼情況下會需要更新 Atmega8U2 的韌體? 嗯,因為 Atmega8U2 很有彈性,它可以讓你更換成其它韌體,所以你的 Arduino 板子就可以搖身一變變成不同的 USB 裝置,例如 MIDI controller, HID 裝置 (Keyboard, Mouse, Joystick 等等)。

檢查你的 Arduino Uno 版本

Arduino Uno 是在 2010 年發佈的,今年五月左右 (2011 年) 釋出 Arduino Uno R2 版本 (Revision 2)。要知道你手上拿的板子版本為何,只要翻到板子背面,然後在 BOARD MODEL 字樣下就可以看到。例如我手上這張是 UNO R2,背面上看到就是 UNO R2:

arduino-uno-r2
▲ Arduino Uno R2

Uno R2 板子比較新,內建了一個硬體線路讓它進入 DFU mode 的步驟變得比較簡單,而舊款的 Uno 比較麻煩,必須在 Uno 板子背面指定的位置焊接一顆 10K 的電阻,像下圖這樣:

image

焊接對一般人來說難度比較高,幸好網路上有人提供另一個方法,就是像下圖這樣拿一條線連接 GND 跟電阻(註:我手上沒有舊款的 Uno,所以沒辦法實測!):

image

知道 Uno 的版本後,接著來看怎麼讓 Uno 進入 DFU mode。

進入 DFU mode

當你把 Arduino Uno 接到電腦 USB port 並安裝好驅動程式後,在「裝置管理員」會看到一個 "Arduino UNO (COMx)" 的裝置:

image

要讓 Uno 進入 DFU mode 的方法很簡單,如下圖所示,只要拿一條連接線,一端接到 GND,然後另一端輕輕觸碰一下 Atmega8U2 的 RESET 接腳就好:

 image

由於我們還沒安裝驅動程式,所以這時候電腦會跳出底下這個視窗,告訴你找到 "Arduino Uno DFU" 這個新的裝置,要請你安裝驅動程式:

image

安裝驅動程式

請先到連到底下的網址下載 Atmel FLIP 這套軟體:

http://goo.gl/H65Gz

image_thumb2
▲ 我裝的是 Flip 3.4.5

回到安裝驅動程式的畫面,請選擇「從清單或特定位置安裝(進階)(S)」後按「下一步」:

image

選擇「瀏覽」:

image

把路徑指定 "C:\Program Files\Atmel\Flip 3.4.5\usb" 這個資料夾:

image

按「下一步」:

image

驅動程式安裝中:

image

按下「完成」:

image

安裝完成之後,在「裝置管理員」會多出一個 "AT90USB82" 的裝置:

image

到這裏,你已經成功讓 Arduino Uno 進入 DFU mode。要回到 USB-to-Serial mode,只要重新插拔 Arduino 的電源即可。

下篇我們來學習如何用 FLIP 更新 Arduino Uno 上 ATmega8u2 的韌體。

參考資料

4 意見:

GCY 提到...

其實我對官方板子UNO最感興趣的也是Atmega8U2 ,我之前想過可以把它當作跟USB攝影機的interface,只是後來一直沒時間去研究:P

coopermaa 提到...

用 atmega8u2 當作跟 USB 攝影機的 interface ?
可以做什麼?

atmega8u2 只有 8KB Flash,DFU Bootloader 就佔了一半,感覺好像不太夠用。倒是最近官方出了新的板子 Arduino Uno R3,這次把 atmega8u2 升級到了 atmega16u2。

GCY 提到...

其實就是要把atmega8u2拿來當作arduino跟webcam的中間層,不過後來看到UART的camera比較簡單所以有暫時放棄這個想法,可是現在台灣UART camera選擇好少...Orz話說原來Uno官方板子有三個版本啊!

coopermaa 提到...

你有做過 webcam 這方面的研究?
哇塞!你玩很大喔。哈~