OpenOCD小ネタ2

2013年に入ってホビー向けARMマイコンを取り巻く情勢も大幅に変わりました。
導入に結構な金銭的コストが必要だったmbedが、ハードウエア&メーカーの枠が取り外
され、非常に低コストでいろんなメーカのARMマイコンに利用できるようになりました。
さらにARM社も、CMSIS-DAPというCortex系マイコンに特化したオープンソースの
デバッガハードウエアを公開したことにより同じようにGNUのツールに頼らずとも低コスト
で専用のデバッグ環境をそろえることができるようになりました。
導入の敷居を低くすることによりARMマイコン利用者のすそ野を大きく広げる作戦に
出ているようです。

んでもってCooCox等(のEclipseベースですが面倒な初期設定がすべて準備されかつ
無料で全機能が利用できるデバッグサーバ込)のIDEも使い勝手が飛躍的に向上し環境
構築のために時間を費やす
orデバッガのデバッグをすると言った無意味で無駄な
行為をする必要もなくなりました。

そういうわけで使いこなせるまでに多くの時間と手間がかかるOpenOCDは最早無料で
利用できる
といった唯一のアドバンテージも急速に失いつつあります。しかしながら、
私を含めた手段が目的になっちゃった人向けに細々とOpenOCDの解説記事を書いて
いく所存でございます(以上泣き言終わり)。




●STLink系のアダプタ使うとSPANSIONのFM3マイコンでeraseができない
私がFM3ドライバのエンバグをしていたちょうどその頃、jujurouさんが自身のブログ
上にてSTLink/V2を使用したFM3マイコンの書き込みについて質問者の方とやり取り
されていました。私は"単なる結線ミスでしょう"と思ってましたが丁度MB9AF112Kの
テストをしてたのでこちらでもSTLink/V2でやってみるとなんとeraseだけできなかった…。
Versaloon(SWD版)やJTAGKey2では問題ないのにSTLink系は駄目。

書き込み動作だけはSTLink系でも可能だったのでOpenOCD側のフラッシュドライバを
調べてみるとeraseの操作はtarget_write_u16を使用しレジスタに16bitのデータを送る
ことにより行われていました。分かりづらいユーザマニュアルを見るとたしかにフラッシュ
操作のコマンドは真の16bitアクセスを行う必要があると記述されていました。

一方STLinkやTI-ICDI等のHLAなアダプタはターゲットのメモリの読み書きは32bitか
8bitかのどちらかしかサポートされておらず真の16bitアクセスが不可能でした。
つまりeraseしようとしてtarget_write_u16で必死に送っても32bitか8bitかの転送コマンド
APIに置き換えられてしまい失敗していたということになります。

書き込みの時は問題なかったのは書き込み時は書き込みアルゴリズムを転送してFM3
上で実行してるのでこの制約に関係なくwriteコマンドが成功していたからでしょう。

というわけでeraseの際もアルゴリズムをFM3上で実行するようにしてSTLink/V2でも
無事FM3マイコンに書き込みができるようになりました。ついでにjujurouさんの所で
質問されていた方も上記のパッチを当てたバイナリを使用し無事に解決されたようです!
めでたしめでたし。

20140227追:
公式にマージされました♥



●USB3.0のホスト(xHCI)でOpenOCDが繋がらない問題は決着か

以前いいところまで原因を追い詰めましたがUSB周りの事は全く分からずドライバを
以前のものに戻してworkaroundとしていました。しかし同様の問題を抱えた方がいた
ようで、その方は自力で解説策を見出したようです
。結局ASM1042のドライバのバグが
濃厚で正直libusbx(libusb-1.0も同様)は全く悪くはないのですがlibusbx側で回避
可能なので何時になるともわからないメーカサイドの修正を待つより自分でちゃっ
ちゃとlibusbx側に対策を講じた方がよいのは私も賛同します。

というわけでパッチを当てたlibusb-1.0.dllを作成しねむいさんの環境では動作OK
かつ副作用も全くなし!以前質問を頂いた方々にも協力していただき問題は全て解消
されたとの報告をいただいたので、おきぱで公開しているOpenOCD・UrJTAG・Avrdude
そしてFlashROMはすべてこのパッチを適用したdllとスタティックライブラリを反映
しております…っていうか差し替えたのもうだいぶ前ですが何も不具合報告は頂いて
ませんので便りがないのはよい便りということで〜(それでいいのか)

また、USB3.0のホストのドライバ/ファームウエアも最新のものにアップデートしてお
かないと不具合につながるケースがあります。libusbxのwikiにはそのことに対する
注意書きも記載されています
。USB3.0ホストが搭載されたここ最近のPCで上手くいか
ない方はstation-driversで最新のものに変更してから試みることも忘れずに。


"Remote 'g' packet reply is too long"問題も決着か
長かった…ねむいさんのぶろぐに来た質問でかつて一番数が多かったこの問題も漸く
解決の日の目を見ることになったようです。
"とりあえずFPレジスタ無しをデフォルトにするから弄りたい人はtdescコマンドでxmlを指定
してレジスタ設定してね"という流れになるようです。さすがに昔のGDB使ってる人も少なく
なりましたからこの変更は必須だとおもいます。

Comments

Post a Comment








Go to top of page