2016年12月18日日曜日

FRDMボードのデバッガチップを復旧させた話

この記事はmbed adventカレンダー2016 18日目の記事です。

長くなったのでいきなり3行でまとめると...
・FRDM-K64Fボードのファーム飛んだ
・Keil uVision5+サポートするデバッガ(J-Link、LPC-Link2、他mbedボードのCMSIS-DAPデバッガ)で復旧できた
ARMバンザイ、mbedバンザイ

こんな人に特にオススメの記事となっています
・FRDMボードのファームふっ飛ばして積み基板にしている人
・keil uVision5からhexファイルの書き込み方について知りたい人

最近FRDM-K64Fボードを買いまして、早速Lチカ!...の前にファームのアップデートを
Windows10マシンにて試みたところ、ファームが吹っ飛びました

この件調べるまで知りませんでしたが、どうもOpenSDAブートローダーとWindows10の相性が悪いらしいです。
http://www.nxp.com/jp/products/software-and-tools/run-time-software/kinetis-software-and-tools/ides-for-kinetis-mcus/opensda-serial-and-debug-adapter:OPENSDA

ページ上方の続きを表示をクリックすると...
oh...

復旧の方法については調べたところ、主に2通りの方法があるようです。
①J-LinkやULINK2等の外部デバッガよりブートローダー書き込み
  https://community.nxp.com/docs/DOC-330935
②別なFRDMボードからブートローダー書き込み
  https://mcuoneclipse.com/2016/06/26/how-to-recover-the-opensda-v2-x-bootloader/
 
J-Link EDUを買って復旧することに成功しましたが、
LPC-Link2(CMSIS-DAPファーム、もしくは他のmbedボードでSWD信号引き出せられるもの)
+Keil uVision5
+ubuntu(VirtualBox上からでもOK、もしくはwindows7、Mac、Linux等の別マシン)
からでも復旧できることが分かったのでその方法を記載しておきます。


ブートローダー復旧編


LPC-Link2とFRDMボードを接続しておきます。
電源はFRDMボードにUSBから供給するのでLPC-Link2のJP2はオープンにしておきます。

uVisionからバイナリファイル書き込み方法は以下を参照しました。
µVision4 User's Guide (Japanese): HEX ファイル
http://www.keil.com/support/man/docs/uv4jp/uv4jp_fl_hexdownload.htm

書き込みプロジェクト作成前にK20シリーズのDFPをインストールしておきます。
メイン画面のPack Installerをクリック

 画面左側のツリーよりNXP→K20 Seriesを選択、右側のKeil::Kinetis_K20_DFPのInstallをクリック

インストール完了したらPack Installerを閉じます。
Reload Packs?と問い合わせが出るのではいをクリック。
いいえをクリックしてしまったらuVision5を再起動。

Keil uVision5で書き込み用プロジェクトの作成
タイトルバー下のメニューよりProject→New uVision Project
適当なフォルダにOpeSDAFirmwareWriteなど、適当な名前でプロジェクト作成。
Select Device画面でSearch欄にMK20DX128xxx5と入力。
ツリーのMK20DX128xxx5をクリックしてOKをクリック。

コンポーネントは何も追加せずOKをクリック


OpenSDAブートローダーのダウンロード
http://www.nxp.com/jp/products/software-and-tools/run-time-software/kinetis-software-and-tools/ides-for-kinetis-mcus/opensda-serial-and-debug-adapter:OPENSDA
復旧対象のボードを選択して、OpenSDA bootloaderのバイナリをダウンロード。

解凍して、プロジェクト作ったフォルダにk20dx128_bootloader_0x5000.axfをコピーします。

Options fot Targetをクリック。

 Outputタブを選択し、Name of Exe~欄にダウンロードしたOpenSDA bootloaderのバイナリ名(k20dx128_bootloader_0x5000.axf)を入力します。

DebugタブにてデバッガをCMSIS-DAP Debuggerに変更。
Settingsをクリック。

 Connectをunder Reset、ResetをHW RESETに変更

メイン画面に戻り、Downloadボタンを押せばbootloaderが書き込まれます。
正常に書き込まれればBuild Outputはスクリーンショットと同じ内容になるはずです。

SWDケーブルを外してSW1を押しながらmicroUSBケーブルを接続し、
WindowsからBOOTLOADERドライブが認識されれば正常に書き込みできています。

アプリケーション復旧編

OpenSDAアプリケーション書き込み用にWindows10ではないマシン(VirtualBox上のubuntu、別マシンのWindows7など)で以降は作業します。

VirtualBox上のubuntuから復旧させる場合、仮想マシンの設定より
USBデバイスフィルタを登録しておきます。
Windowsにブートローダードライブが認識されている状態でMBED CMSIS-DAPを追加します。 
この設定をした状態でubuntuを起動、再度SW1を押しながらFRDMボードのUSBを接続すれば
自動的に仮想マシンのubuntuへ接続されます。


Windows10において対策版のOpenSDAブートローダーがリリースされるまで、JLinkかP&E Microどちらかを使うことが推奨されているので今回はJLinkを使います。

https://www.segger.com/downloads/jlink
J-Link OpenSDA - Board-Specific Firmwaresより対象のボード用バイナリをダウンロードします。
今回はFRDM-K64F用のバイナリをダウンロードします。

ダウンロードしたバイナリ(02_OpenSDA_FRDM-K64F.bin)をBOOTLOADERドライブにD&D

USBケーブルを抜き、そのまま差せば...復旧しました!


LチカもOK!

で、ここまでやってようやく気づいたのですが、uVision5がサポートするデバッガなら、どれでも復旧できたんじゃね?と

SWDコネクタ出ているLPCXpresso824-MAXボードからでも...

SWD関係のピンを引き出したmbed LPC1114ボードからでも...

nucleo-F401REボード上のST-Linkからでも...

復旧できました!!
なんのためにJ-Link買ったんだろ。なんでもデバッグできるデバッガ手に入ったしいいや。



2016年12月3日土曜日

へぇボタンをmbedで改造して任意SE鳴らせるようにしてみた

この記事はmbed adventカレンダー2016 3日目の記事です。

ある時へぇボタンの声をVOICEROID結月ゆかりさんに差し替えられない?と相談されまして、
それをmbed nucleo F303K8で作りました。
鳴ってる様子はこちら


へえボタンケースを追加工してmicroSDカードとロータリーディップスイッチ、音量調整用可変抵抗を取り付けています。


 ハード














回路図
















PDF版;https://drive.google.com/file/d/0B_nriOFsja6DNlRFazhraVllaFE/view?usp=sharing

・microSD
・スピーカー駆動用アンプ
・SE選択用ロータリーディップスイッチ
・へぇボタンについていたプッシュスイッチ信号横取り
・へぇボタン電源の単3電池4本
以上をmbed nucleoF303K8に接続して作り上げました。
改造というより中身ほぼ総取り替えですね(;´Д`)


初めてnucleoF303K8を使いましたが、、、注意して使わなければならないことにいくつかブチ当たりました。いずれもnucleoボードの回路図を注意して見ないとわからないことばかりでした。

まとめたツイート
https://twitter.com/i/moments/edit/804529900371591168

そのほかにも...
・電源をVINからではなく、+5Vから供給した場合、ST-Linkに電源供給されないためかResetがLに落ちっぱな状態になり動作しない
→ST-Linkからのリセット線の0Ωジャンパ外して引き出し、外部スイッチで接続・切り離しできるようにした
・ST-LinlとA7(PA2)はUART_TX、A0(PA0)はMCOとして接続されており、空きポートだと思って使うとトラブルの元になる→A0はSB17をカットして対応、A7は元々空きだったので痛い目見ず済んだ。
を作りました。

ソフト

https://developer.mbed.org/users/nameless129/code/F303_WAVPlayer/

実機のへぇボタン同様SEを連打して鳴らせたかったのとwavファイルの勉強兼ねて再生用ライブラリを作りました。
なるべく環境に依存する部分を組み込まないように作ったので他のPSoCやAVR等で使えるとはずですが、まだライブラリを独立させて試していないのでそれはまた近いうちに公開予定です。