So-net無料ブログ作成

EFM8UB1のファクトリーブートローダー

前回からのつづき。

EFM8UB1のRev.CシリコンからはファクトリーブートローダーとしてCDCブートローダーが入っている(8kバイト品はUART、それ以上はUSB CDC)。
マニュアルとしてAN945 (pdf)に記載があるものの、いまいち要領を得ないのでまとめておく。
以下はEFM8UB10F16G-Cでの手順。

・書き込みツール
書き込みツール一式は下記のリンクからダウンロードできる。
www.silabs.com/documents/public/example-code/AN945SW.zip
Windowsクライアントでは、この中のTools→Windowsフォルダにある efm8load.exe と hex2boot.exe を使う。

・CDCブートローダへのエントリ
C2Dピンを'L'にした状態でリセット(C2CKピンをL)または電源投入すると、ブートローダーに入る。
なので、ユーザープログラム側でC2Dピンを使っている(特に入力)と、意図しないタイミングでブートローダーにブランチする場合がある。CDCブートローダー前提ならC2Dピンはユーザープログラムでは未使用にしておく。

この状態でUSBを接続すると、WindowsからはHIDクラスのデバイスとして認識される。VCPではないのでCOMポートとしては見えない。

・ブートコードへの変換
CDCブートローダーで書き込む場合、プログラムコードを.efm8ファイルという形式に変換する必要がある。
変換には hex2boot.exe を使う。
Simplicity IDEでプロジェクトをビルドしてできる.hexファイルを次のようにして.efm8ファイルに変換する。-oオプションは省略できないので注意。

> hex2boot hoge.hex -o hoge.efm8


・EFM8への書き込み
用意した.efm8ファイルを efm8load.exe でMCUへ書き込む。

> efm8load hoge.efm8

エラーがなければプログラムが書き込まれた後、実行される。
以降は、リセット時C2Dピンが解放または'H'レベルであれはユーザープログラムが優先して実行される。

もしCDCブートローダーエントリされていなければ

> efm8load foo.efm8
ERROR: Unable to open port!

というようなエラーがでる。