AVR32のDFU ブートローダーを復活させる方法

DFU Bootloader

AVR32のマイコンボードを作りました。

AVR32のマイコンボードが完成しました
基板が届きました先日設計した、AVR32の基板とステンシルが2週間くらいでSeeedStudioから届きました。...

このマイコンは出荷時に、DFU Bootloaderというプログラムが書き込まれています。DFUでブートすると、USBデバイスとしてパソコンに認識されて、USB経由でプログラムを書き込むことができます。

DFU Bootloaderを消してしまった

Atmel ICEがあるので、JTAG経由でプログラムを書き込んでみました。その際に普通にマイコンを消去してしまいました。消去したとしても、PA13をLowにしてリセットすれば再びDFU Bootloaderが起動するだろうと思っていました。

ところが、PA13をLowにしてRESETしても、書き込んだプログラムが実行されてしまい、DFU Bootloaderが起動しません。

あらら。DFU Bootloaderは、マイコンを消去してしまうと、一緒に消えてしまうんですね。DFU Bootloaderを使ったプログラムの書き込みもやってみたいので、DFU Bootloaderをなんとか元に戻したいです。ところが、簡単に戻せると思ったら、結構難しかったです。わかってしまえば簡単。折角なので、戻し方をご紹介します。

DFU Bootloaderはどこにあるの?

DFU Bootloaderのプログラムとデータは、0x80000000から8kB分の領域にBootloaderが、Flash User Pageの0x8008001FCにもGP Fuse Bitsというデータがあります。あとはヒューズビット。これら3つが必要なのですが、マイコンを初期化するとこれら全部含めて消えてしまいました。

DFU Bootloaderを吸い出す

AVR32のマイコンボードを2つ作ってあるので、何も手をつけていないもう一台のAVR32から、これらのデータを吸い出すことにします。吸い出すにはAtmel ICEが必要です。AVR32とAtmel ICEをJTAGで接続して、Atmel ICEをUSBでパソコンに接続します。

AVR32に対して書き込みや読み出しを行うには、atprogram というコマンドラインのソフトを利用します。GUIを使ったAteml studioのDevice Programingでは正しく書き込めませんでした。

atprogramはAtmel Studioをインストールすると、一緒にインストールされています。コマンドプロンプトを開いて、まずはその場所へ移動します。

cd \Program Files (x86)\Atmel\Studio\7.0\atbackend

Bootloader

最初にBootloaderを吸い出します。コマンドラインで

atprogram -t atmelice -i jtag -d at32uc3b064 read -o 0x80000000 -s 0x2000 -f C:\at32uc3b-flash.hex –format ihex

と実行します。AtlemICEのJTAG経由で、AT32U3B064というマイコンの、0x80000000から0x2000バイト分のデータを、hexファイルとしてC:¥at32uc3b-flash.hexに出力しなさい。というコマンドです。マイコンがAT32U3B256でしたら、-d at32uc3b256と置き換えてください。

Bootloaderのファイル、at32uc3b-flash.hexができました。Cのルートにファイルがありますが、このファイルは後で使うので、atprogramのある、\Program Files (x86)\Atmel\Studio\7.0\atbackend にコピーしておきます。

GP Fuse Bits

続いてGP Fuse Bitsを読みだすために、Flash User Page全体を読み出してみます。

atprogram -t atmelice -i jtag -d at32uc3b064 read -o 0x80800000 -s 0x200 -f C:\at32uc3b-user.hex –format ihex

at32uc3b-user.hexができました。このHexファイルを見てみると、最後に929E0D6Bとあるだけで、その他の領域は全てFFでした。

Flash User Pageは何も書かれていないということです。GP Fuse Bitだけ、アドレス0x808001FCに、0x929E0D6Bを書き込めばいいことがわかりました。

ヒューズビット

Atmel Studioの[Tools]->[Device Programing]を開き、ヒューズビットを確認します。

ヒューズビットは0xFC07FFFFでした。

DFU Bootloaderを書き込む

消去してしまった方のAVR32に、これらの情報を書き込みます。書き込みにもatprogramを使います。これには順番が重要でした。

  1. マイコンを消去する
  2. GP Fuse Bitを書き込む
  3. Bootloaderを書き込む+ヒューズを書き込む

の順番で書き込んでいきます。

まずは消去します。

atprogram -t atmelice -i jtag -d at32uc3b064 chiperase

続いてGP Fuse Bitを書き込みます。

atprogram -t atmelice -i jtag -d at32uc3b064 write -o 0x808001FC –values 929E0D6B

最後にBootloader+ヒューズビットを書き込みます。

atprogram -t atmelice -i jtag -d at32uc3b064 program -f at32uc3b-flash.hex –format ihex –verify write -fs -o 0x0 –values FC07FFFF

このヒューズビットを書き込むアドレスが、ハマるポイントでした。ネットでは

atprogram -t atmelice -i jtag -d at32uc3b064 program -f at32uc3b-flash2.hex –format ihex –verify write -fs -o 0xFFFE1410 –values FC07FFFF

というように、アドレス0xFFFE1410に書き込む方法がほとんどでした。現在のatprogramは、仕様が変更されてしまい、0x0を指定するそうです。

DFU Bootloader復活

リセットするとDFU Bootloaderが起動します。デバイスマネージャで確認すると、AT32UC3Bというデバイスが追加されているのがわかります。

Bootloaderのファイル

DFU Bootloaderのファイルは、吸いださなくても、at32uc3b-isp-1.0.2.hex や at32uc3b-isp-1.0.3.hex で検索するとネットで見つかります。DFU Bootloaderは現在たぶん1.1.0が最新のようです。ネットにあるのはバージョンよりも、私が吸い出した最新と思われるDFU Bootloaderファイルをここに置いておきます。

at32uc3b-flash.zip

もし、消去してしまった場合には、これをお使いください。

DFU Bootloaderが復活してよかったです。戻し方がわかったので、心置きなく書き込みができます。

 

 

 

 

 

 

 

電子工作
kohacraftをフォローする

関連記事

kohacraftのblog

コメント

pocket line hatebu image gallery audio video category tag chat quote googleplus facebook instagram twitter rss search envelope heart star user close search-plus home clock update edit share-square chevron-left chevron-right leaf exclamation-triangle calendar comment thumb-tack link navicon aside angle-double-up angle-double-down angle-up angle-down star-half status