【LPCマイコン】DFUでファームウェアを書き込む (DFU-USB編)

前回に引き続き、今回はmbedのようにマイコンをUSBメモリとして認識させてプログラムを書き込む放り込むことで書き込む方法の紹介をします。
DFUモードに関してはUARTで書き込んだ時の記事を参照してください
 
てことで前置きすっ飛ばして本題に入ります
 

DFUモードで書き込んでみる

回路図


ここで注意したいのが、 USBで書き込むには12[MHz]の発振子を接続する必要があります。 負荷コンデンサはこの回路では10[pF]になっていますが、 物によってはもしかしたら適切ではないかもしれませんので適宜データシートを読んで適切な値を選択するようにしてください。これを忘れてしまうと書き込めないので忘れずにやるようにしましょう。

また, ISP1はHレベルに固定し、ISP0はプルアップしてスイッチに接続しましょう。
 

DFUモードに遷移する

DFUモードに遷移するには、起動時に所定のピンの論理をある状態にしていなければなりません。
マイコンの種類やピン数によってそのピンが違うので一概には言えないのですが、ここでは僕がよく使ってるLPC1549JBD48を例にとって解説していこうと思います。
このマイコンにUARTでファームウェアを書き込む際に使用するピンは次の通りです。 D+とD-はPIO_*に割り当てられていない独立の機能を持ったピンなのでピン番号そのもので書いています。

ピン名称 物理ピン
ISP_0 PIO0_4
ISP_1 PIO0_16
D+ 35
D- 36

また、ISPピンの状態を設定してあげることでDFUモードに入ったり普通に起動したりします。

動作モード ISP_0 ISP_1
NO DFU High High
USB-DFU Low High

 

ファームウェアを用意する

USBを用いたドラッグ&ドロップで書き込むには、*.binファイルを用意する必要があります。このファイルはLPC Xpresso IDEでコンパイルしたときに生成する方法があるのでこのオプションを使いましょう。コンテキストメニューから選択して生成する方法もあるのですが、この方法で生成したファイルは書き込みに失敗することが多々あるのでコンパイル時に自動で生成した方が無難かと思います。
具体的には、プロジェクトのプロパティでC/C++ Build > Settings > Build stepsと進んでいき、Post-build stepsの中身をこんな感じにします↓↓↓

arm-none-eabi-size "${BuildArtifactFileName}"
arm-none-eabi-objcopy -v -O binary "${BuildArtifactFileName}" "${BuildArtifactFileBaseName}.bin"
checksum -p ${TargetChip} -d "${BuildArtifactFileBaseName}.bin"

ファームウェアを書き込む

DFUモードにする方法もわかって、書き込むためのファイルを用意することが出来たので、最後にこのファイルを実際に書き込む方法の説明に移ります。
UARTの時と違って今回は特別なソフトを使用することはしません。WindowsであればExplorerを、macOSではFinderさえあれば書き込むことができます。WindowsではExplorerを使用すれば書き込めますが、macOSではうまく書き込めませんでした。そこでちょっとだけ手間は増えますがTerminal.appを使用して書き込みます。基本的に工程自体は下記に示したものと変わらないです。
まずは、先ほどのピンの状態にした上でパソコンに接続してください。すると、CRP DISABLEDというドライブが認識されるはずです。

書き込む前に一つだけやることがあります。この中にはfirmware.binというファイルがすでに書き込まれているので、新しく書き込もうとしても容量が足りないというふうに怒られてしまいます。なので、あらかじめ入っているfirmware.binを削除してください。
そうしたらあとはこのドライブにbinファイルを放り投げるだけです。ビルド時に生成されたbinファイルは/path/to/project/Debug/ProjectName.binにあると思うのでそれを投げ入れてください。
このあとリセットをすると書き込んだプログラムが走り出すと思います。走り出さない時はちゃんと回路図があっているかなどを確認してみてください。
 
 

macOS用でTerminal.appを用いて書き込む方法(2018/02/24追記)

前述のようにCRP DISABLEDを認識させた状態でTerminal.appを起動してください。その後、以下のコマンドでCRP DISABLEDに移動します。

$ cd /Volumes/CRP\ DISABLD/

そしたら、もともと書き込まれているbinファイルを削除しましょう。

$ rm firmware.bin

削除したら書き込みたいbinファイルをドライブにコピーします。

$ cp /path/to/binary/hoge.bin ./

あとはドライブをアンマウントして終わりです。

$ cd
# umount /Volumes/CRP\ DISABLD/

もっとも、全ての工程でTermianl.appを用いずとも書き込みの時だけコマンドでやれば正常に書き込めるようです。
 
ちょっとめんどくさいのでAppleScriptで自動化できないかな〜と模索してみたいと思います。

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です