SNSへはこちら

AVR32マイコンやってみよう(4) - DFU書き込み

続いてプログラムの 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.hexdfu-programmer で書き込みましょう!

書き込み

マイコンの PA13 を Low にして、USB DFU モードで起動させます。そこですかさず、以下のコマンドを叩きます。

$ dfu-programmer at32uc3b064 erase
$ dfu-programmer at32uc3b064 flash output.hex
$ dfu-programmer at32uc3b064 launch

これでチカチカするはずです!お疲れさまでした。