dfu-programmer で Arduino UNO の ATmega16U2 に Windows から書き込む

Windows 版の dfu-programmer で Arduino UNO の ATmega16U2 に書き込む方法をいつも忘れて調べてしまうので、メモです。

Arduino UNO などについている ATmega16U2 にカスタムファームを書き込んであげることで、Arduino を USB-MIDI や HID デバイスにすることができます。

Windows から書き込むには、dfu-programer の Windows 版ダウンロードしてを使うと簡単です。

dfu-programmer
dfu-programmer is a multi-platform command-line programmer for Atmel (8051, AVR, XMEGA & AVR32) chips with a USB bootloader supporting ISP. Most Atmel devices having a USB port come pre-programmed with the bootloader, and this is a lightweight alternative to Atmel’s own FLIP/BatchISP program. This is a mostly Device Firmware Update (DFU) 1.0 compliant user-space application.

You can download the source distribution from the project files page. Windows users can download a pre-compiled executable, a set of USB drivers and the HTML help file in a separate zip file from the same page.

project files にコンパイル済みの dfu-programer.exe と USB デバイスドライバが同梱されたアーカイブファイルがあるので展開しておきます。

次に Arduino の次のジャンパーをショートさせたまま USB で PC に接続し、Arduino の電源ランプが点灯したらショートを解除します。(本来はドライバーなどでなくジャンパピンを使いましょう。。

ショートを解除すると Windows がデバイスドライバを検索しにいきますので、先ほど展開したアーカイブに同梱されている atmel_usb_dfu.inf を指定してあげると次のように ATmega16U2 がデバイスとして認識されます。

認識後、dfu-programmer.exe でデバイスを指定して erase 後、ファイルを指定して flash してあげると書き込みできます。(自分の環境では erase でエラーがでましたが書き込みは大丈夫のようです)

C:>dfu-programmer.exe ATmega16U2 erase
Checking memory from 0x0 to 0x2FFF...  Not blank at 0x1.
Erasing flash...  Success
Checking memory from 0x0 to 0x2FFF...  ERROR.

C:>dfu-programmer.exe ATmega16U2 flash hogehoge.hex
Checking memory from 0x0 to 0xFFF...  Empty.
0%                            100%  Programming 0x1000 bytes...
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]  Success
0%                            100%  Reading 0x3000 bytes...
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]  Success
Validating...  Success
0x1000 bytes written into 0x3000 bytes memory (33.33%).

デバイス名の指定は USB の認識名と同じ名称にするようにしてください。大文字小文字も区別するようで、正しく指定しないとデバイスが見つけられません。

なお、オリジナルのファームウェアは次からダウンロードできます。(Arduino SDK にも含まれているはずです)

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

Arduino の ATmega16u2 側のファームを Midi Firmware for Arduino Uno (Moco) で書き換え MIDI USB デバイスにした様子です。 🙂

Arduino で MIDI や HID デバイスがつくれるといろいろ活用範囲が広がりますです!  😀

このエントリーをはてなブックマークに追加

コメントを残す

メールアドレスが公開されることはありません。