続いてプログラムの USB DFU 書き込みについてご説明します。
本記事は以前の記事のように「やろうとしたけど無理でした!」というものではないのでご安心あれ。
参考にしたサイト・文献はこちら。
プログラマの準備
書き込むためのソフトを準備します。Mac の方は Homebrew でインストールできます。便利ですね。
$ brew install dfu-programmer
それ以外の方や「ソースほしい!」という方はこちらの Sourceforge からダウンロード・ビルドしてください。
簡単なプログラム作成
まずはプロジェクトディレクトリを作成します。
リンカスクリプトをコピーしてもってきます。AVR32 用の binutils をインストールしたディレクトリからもってきてください。僕は /usr/local/cross/avr32
にインストールしたので、
$ cp /usr/local/cross/avr32/avr32/lib/ldscripts/avr32elf_uc3b064.x linker.ld
で持ってきました。これを多少編集します。
まず 11 行目を以下のように数値をいじります。
FLASH (rxai!w) : ORIGIN = 0x80002000, LENGTH = 64K
続いて 19 行目も同様。これで以上です。
PROVIDE (__executable_start = 0x80002000); . = 0x80002000;
さて、そうしたらだいたい準備完了なので、とりあえずLチカプログラムをアセンブリにて作成しましょう。ちなみにまだ gcc はビルド及びインストールしていません。
あとはコマンドでバイナリを生成するのみです。
$ avr32-as -o obj/start.o start.s
$ avr32-ld -m avr32elf_uc3b064 --gc-sections -Tlinker.ld -o output.elf obj/start.o
$ avr32-objdump -d output.elf > output.dmp
$ avr32-objcopy -O ihex output.elf output.hex
よし、そうしたら出来上がった output.hex を dfu-programmer
で書き込みましょう!
書き込み
マイコンの PA13 を Low にして、USB DFU モードで起動させます。そこですかさず、以下のコマンドを叩きます。
$ dfu-programmer at32uc3b064 erase
$ dfu-programmer at32uc3b064 flash output.hex
$ dfu-programmer at32uc3b064 launch
これでチカチカするはずです!お疲れさまでした。