大晦日に基板が到着したので作業を続行します。
前回の投稿にジャンクESCからマイコン(EFM8BB21F16G)とドライバIC(FD6288Q)を摘出した事を書きました。これらのICを基板に載せ、ブレッドボード上であれこれ実験する予定です。
基板に搭載
今回はメタルマスクを作らなかったのでコピー用紙をレーザーカットしてクリームハンダを塗ります。
部品を載せて・・・
リフローしました。
チップ内蔵クロックを使用するので発振子も不要ですし、この後ピンヘッダと電源のコンデンサだけを取り付けました。
マイコンの動作確認
ではEFM8BB2マイコンのGNDとP05端子にフライトコントローラー(以下FC)を接続し、3.3Vの電源を入れます。
この状態でBLHeliSuiteを起動すると設定内容を読出せたので、マイコンは生きていますね(ジャンクから取出したので一応確認)。
次はマイコンに何か書き込んでみたいのですが、公式の書込み機(Toolstick)は持っていません。
調べたところEFM8BBxマイコンにプログラムを書き込むにはざっと以下の方法がある様です。
- C2インターフェース経由での書込み。
公式の書き込み機(Toolstick)はこのC2インターフェースに接続する様です。 - ファクトリーブートローダー
新品状態ではこのブートローダーが書かれていてUARTから書ける様ですが、今回ESCから摘出したマイコンには下記のBLHeliブートローダーが上書きされているので、この方法は使えません。 - BLHeliブートローダー
ESCを購入した時点でファームウェアと共に書かれているブートローダーで、FCからの信号端子をそのまま使ってファームを書き換える事ができます。
普段FC経由でファームをアップデートする時はこのブートローダーが動作しています。
という事でまずはBLHeliブートローダーからのファーム書換えをやってみます。
と言っても普段やっている通りで、FCを接続すると問題なく書換えができました。
しかし将来的に新品マイコンを買ってきた場合にはこの方法は使えないのでC2インターフェース経由でも読書き可能な事を確認したいですね。公式のマニュアルによると開発ツールのSimplicityStudioから書込み機(Toolstick)を使って接続する様ですが、上記の通りToolstickは持っていません。
そこで見つけたのはPCでBLHeliSuiteを立上げておいてArduino経由でC2インターフェースに接続する方法。 この方法ならBLHeliのファームを壊して文鎮化した場合でも書き直せる様です。
BLHeliSuiteからArduino経由C2-I/Fでファームを書いてみる。
ざっと流れを言うと、BLHeliSuiteを起動し、まずArduinoにファームを書込むことでArduinoがC2インターフェースでの書込み機に変身します。(この時ArduinoIDE等は使わず、BLHeliSuiteから直接書くことができます。)
その後Arduinoとマイコンを接続してマイコンにファームを書込む流れとなります。
ではまずPC上でBLHeliSuiteを実行し、「Make interfaces」タブをクリックすると下の様な画面になりました。
次にPCのUSBポートにArduino(今回NANOを使用)を接続しておき、画面右のボード選択でArduinoNANOを選択、画面最下部でCOMポート番号を選んだら右下の「Arduino 4way-interface」をクリックします。
ここで3つのファームから1つを選ぶ画面が現れたので4wArduinoNano_16_PB3PB4v20002.hexを選択しました。
(ここでPB3PB4とかPD3PD2というのはArduinoのどの端子をC2インターフェースに接続するかの違いだと思います。MULTIというのは良く分かりませんが複数のESCを接続できるんでしょうね?)
あとは「開く」とか「OK」(だったかな?)とかを適当に押すとArduinoにファームが書き込まれます。
これでArduinoが書込み機となりました。
次にArduinoとEFM8BB2マイコンの間を接続して電源を入れます。接続は下の3本です。
<Arduino> <EFM8BB2> PB3又はD11 ⇔ C2CK PB4又はD12 ⇔ C2D GND ⇔ GND
BLHelisuiteのメニュー「Select ATMEL/SiLABS Interface」から、B SiLABS C2(4way-if)を選択します。
あとは普段通り。「Connect」→「Flash BLHeli」とボタンを押してファームを選択すると書込みができました。
Lチカプログラムを書いてみる。
上記の方法で当面の目的は叶えられました。でも折角なので前回ビルドしたLチカサンプルプログラムを書込んでみようと思います・・・が、BLHelisuiteでLチカプログラムを書こうとするとエラーが出てきました。「変なものを書いているよ」という警告ですがキャンセルボタンしか無いです。
どうやらなんでも書き込めるわけではない様ですね。
そこで更に調べていくとow-Silprogというのを発見しました。こちらもBLHelisuiteと同じ様にArduino経由で読み書きするツールです(どうやらBLHelisuiteのC2接続機能のベースになったツールっぽい)。
こちらはAvrBurnToor_V101.exeを使ってArduinoにファームを書込みますが、そこからC2インターフェースに接続するので基本的にやっている事は同じです(但しArduinoに書いたファームはBLHelisuiteとは互換性はない様でした)。
このサイトの説明によるとWindows上で動くGUIツールを使った読み書きもできる様ですが、このツールの存在場所を見つけられませんでした。が、コマンドラインから使う為の命令一覧が載っているので、こちらは実行できました。
この方法でマイコンFLASH内のアドレスを指定して内容を読出す事ができます。実はジャンクから摘出したマイコンではファクトリーブートローダーは上書きされていると先ほど書いたのはこれで読んだ結果からです。
で、bwというコマンドではインテルHEX形式を指定して書込めるという事なので、下の様に1行ずつ書き込んでいきました(Lチカプログラムは10行もないのでコピペで実施した)。
これでLチカも動作していますね。
ならばファクトリーブートローダーを書き戻す事も出来そうですがキリが無いので一旦止めて、本来の目的であるESCを動かす事を先に進めたいと思います。
Pingback: ESCを作ってみる~その1~ | ほいほい堂blog