GPS/GNSSモジュールを試用する11 -GtopFlashToolの謎に迫る-

今回の記事はSTM32の内容にもがっちり絡んでくるのでカテゴリどうしようか
と悩みましたが結局GNSS関連としました。



前回、Gms-g9のファーム更新
の際にGtopFlashToolなるものを使用して
UART経由でファームウエアのアップデートを行っております。
その時にGPSロガーとして使用しているSTM32Primer2に仕込んだUSB-CDCから
ではうまくアップデートを行うことが出来なかったことを述べておりました。
今回時間が出来てようやく重い腰を上げて調べることになったのですが
そこには意外な結果が待ち受けていたのでした。


●COMポートが開かない??

Lチカから先になかなか進むことができないねむいさんが唯一実用レベルで作った
STM32Primer2ベースのGPSロガーはSTM32のUSBデバイス機能を利用して
GPS/GNSSモジュールのNMEAセンテンスの記録の他にUSB-CDCとUSB-MSCを
実現しております。

USB-CDC機能は主にGNSSモジュールのAGPS等の機能設定を仮想COMポートを
開いてシリアル通信の形で、USB-MSC機能はSDカードに記録したデータをPC上
から簡単にTXTファイル形式で参照できるように出来ております。


で、GlobalTop GPS Viewer(v1.8)からでは上記のとおり問題なくUSB-CDCの
仮想COMポートを開きバリバリ通信できるのですが…

なぜか同じGtopが提供しているGtopFlashToolからはCOMポートが開けません
みたいなエラーを吐いてアップデート作業ができません。

一方はちゃんとCOM開けてもう一方は開けないとかイミフだったのですが
検索しているとそれっぽい質問が見つかりました。
Windows環境下ではUSB-CDCをなし得るためにusbser.sysを利用するのですが
infファイルは自前で作らないといけません。MSDNの情報を基にinfファイルを
いじってインストールしてみましたが…やっぱりダメorz

>http://support.microsoft.com/kb/837637/ja
↑ja版のサイトは機械翻訳文
> ユニバーサル シリアル バス (USB) モデムの .inf ファイルは Usbser.sys
> ドライバーを使用して両方および Usbser.sys ドライバー .inf ファイルからを
> 直接参照できます。ただし、お勧めしませんこの。

人間の言葉しゃべれこの。


もしかしてGtopFlashToolが何らかのUSBの通信レベルで何かがコケて仮想
COMポートが見えて無いのかと思い埃をかぶっていた秋月ロジアナを用いてUSBの
プロトコルを解析してみたのですがUSBの通信上ではSTALLした箇所が
見つけられませんでした。
↑USBの解析できるまでのロジアナの設定で苦労しましたorz

ちょっと困り果ててしまいましたが鴨川を散歩してる最中にGPS Viewerから
仮想COM開けてたのを思い出してひょっとして何らかの固有の文字列をやり
取りしてCOM開いた判定してるのかと思ってUARTの通信を見たらなんと仮想COM
開けてて信号のやり取りまで出来ているようでした!ちゃんと開けてる
じゃないですかーヤダー!
しかも制御文字もちゃんと送信されてるのでUART周りは全く問題なしと
判断しました。
そもそも糞詰まり対策もやってダブルバッファリングまでしてるので
STM32のUARTレベルに関する点は問題はないです。
となるとやっぱりもっと上の階層の問題ですか…。


●別の仮想COMではどうなのか
依然述べたとおりFT232Rに代表される出来合いのFTDIのUSBシリアル変換IC
なら全く問題はなし、自作のUSB-CDCが怪しいと思い別の物を試してみました。

1.STマイクロ謹製のSTM32F1のUSB-CDCのサンプル(STM32F103/107共)
  ->できない
  ※私のSTM32Primer2のUSB-CDCはこれがベースです。
2. LPC2388のLPCUSBのUSB-CDC
  ->できない
3. STマイクロ謹製のSTM32F1/F2/F4用のUSB-CDCサンプル
  ->できるじゃない!
4. MBED CMSIS-DAPのVCOM(FRDM-KL25Zを使用)
  ->できるじゃない!

…ん?それじゃSTM32F1系のUSB機能がやばいのかしら???

5.Versaloon(STM32Primer2と同じSTM32F1系)のVCOM
  ->できるじゃない! orz
  ※VersaloonのUSBのソフトウエア側は独自実装


つまりSTM32のファームウエアの問題ですかorz
でもいろいろ試しててGtopFlashToolのエラーの出方の違いに気づきました!

先にGNSSモジュールをなにも繋がずにフラッシュ書き込みを実行しようと
すると駄目な方は繋いでも繋いでなくても"Fail to open the COM Port"
になってて行ける方はとりあえずCOMポートは開き何か読みに行ってるようで
"DL_HANDLE error code"になっていました。


●SEND_BREAK
というわけでSTM32Primer2のRlinkはOpenOCDでデバッグできないのでそれと
ソフト的に等価なSTM32F107VCTのUSB-CDCを用いて上の
"Fail to open the COM Port"になる瞬間をinsightで捉えました…
ら一瞬で原因が分かったorz


"Fail to open the COM Port"になる直前にVirtual_Com_Port_NoData_Setup()
という関数を通過していて引数に0x23が来てエラーを返していたことが判明。
この関数はホストから送られてくるUSB-CDC固有のリクエストを扱う関数の
ようで…

このページによれば0x23はSEND_BREAKに相当するものであるとのこと。
STM32F1USB-CDCのサンプルでは未サポートとしてエラーを返していたため
Gtop ToolはSEND_BREAKを実行できないCOMポートと判断して"COMポート
開けません"とエラーを返していたことが判明。

ってわけでSEND_BREAKのハンドルを追加してSEND_BREAKのリクエストが
送られてきたらとにかく"USB_SUCCESS"を返すようにしました。


おおっ!

GPSTr@ckerのUSB-CDCでもGms-g9のファーム書き換えできたじゃない♥

GPSViewerではSEND_BREAKは一切送信されていたなかったのでエラーに
ならなかった(=COMポートを開くことができた)ことが理解できました。

ところでSEND_BREAKって何か?ともっと調べてみるとUSB-CDC-ACMの規格
定められたものだようで文字通り"BREAK信号を送信せよ"という意味です。
そしてBREAKって何というとRS-232Cの規格で定められたものでTxDをスペース
(論理L)に固定する行為を指すとのこと。RS-232Cの電圧レベルでいうと
論理が逆転するので、一定時間+15Vに固定することになります。

そしてGTopFlashToolはなぜわざわざSEND_BREAKを送信していたかという
ことですが、それはMTK系のGNSSモジュールのファームウエアアップデートの
方法にあります。
MTK系モジュールはUART経由で特定のコマンドを受け取るとセルフアップ
デートモードに推移しますがその過程で現在通信しているボーレートから
セルフアップデート通信用に自動的にボーレートが上がります。
具体的には115200bpsに推移します。このときGtopFlashToolからCOMポート
経由でBREAK信号が送られているようです。
9600bpsから急にレートの高い115200bpsに上がって間違ったデータとして
受け取られないように一定期間データの送信を止める措置を行っている
わけです。



というところでいろんなマイコンのUSB-CDCの実装を見ているとSEND_BREAKに
対する取り扱いは現在ではごくまれにしか使われないためかまともにBREAK状態
になる実装はめったになく、適当にOKで返してるのが殆どです。逆に言うと
STM32F1系のUSB-CDCのサンプルはちゃんと"unsupported"で返してたから
マシだったのかも!?

そしてGitHubのGPSTr@ckerは既にGtopFlashToolでもちゃんとファームの
書き換えが出来るように修正済です。さらにFatFs0.10aに更新し今更ですが
USBライブラリもF1系最終のV4.0.0準拠にして益々最強に強めております!


●あのお方

今回いろいろ調べて最終的に気付いたのですがUSBのファームウエアがらみで
困っている人のもとに颯爽と現れ強力な解決策を提示して爽やかに去っていく
tsuneo氏がSEND_BREAKにもやはり言及されていました
私の中ではFatファイルシステムにChaN氏が居ればUSBにはtsuneo氏が
居るといった感じです。

そういう私は2014年の今でもUSBアレルギーが全く克服してないので
これを機会に今年はUSBを自分の物にすることをテーマに進めていきたいと
思います!

東海自然歩道を徃く27(箕面-嵐山渡月橋)

新春一発目の山行は、東海自然歩道の箕面〜嵐山という大阪と京都を
文字通り股に掛けるコースでした。私にとってはすべての始まりの場所ですが
思い起こせば3年前、未熟な装備と技術で挑んだものの嵐山にまったくたどり着けず、
さらに足首の捻挫という洗礼までくらい中間地点の上の口で敗退してしまいました

…が、
それから3年の今、東海自然歩道1700km走り倒して着た今!りべんぢを果たします!

総距離54km強、獲得標高差3000m越2000m弱のちょっと過酷に見えるこのコース、
山岳マラソンのレースにバリバリ出てるような関西在住の方にとっては日帰りで
さくっと走って帰ってこれるので非常にポピュラーな"定番"でもあります。
私はそういったレースには参加する気はないものの、東海自然歩道の行程の
中で50kmオーバーを3度ほど経験して中距離移動のノウハウも蓄積しており、
ヘタレな3年前とは全く別の強くてにゅーげーむな状態で挑むことができました♥


●2014.01.11 箕面->嵐山渡月橋

虹裏メイドの朝はほんの少し早い。
まだ日照時間が短いので7時半になっても朝焼けですね…。
今回は54kmをガチで走破するので足回りのメンテは完ぺきにしております!


(去年建てられた石像に向かって)君たちしばらくぶりだねぇ、3年ぶりだねぇ(犬作)
ちなみにこれ、東海自然歩道西の拠点と唱っていますが本物の西の拠点はここから
5.5km先にありますのでご注意を!


3年たつと以外と変わりますね…駅の周辺も観光向けに整備されてました。
朝焼けの阪急箕面駅に見送られて真のラストステージ、スタートです!


まずはエントリポイントの東海自然歩道西の拠点に向かいます。温泉を
主とした観光地を縫って走ります。最初の最初のくせに何気に東海自然歩道の
中でエントリポイントまでの一番長いアクセス距離を誇ります。
(次点は奥三河の滝上-千枚田の激坂5km)



緩やかな坂をひた走ります。
この地は朝でもジョギングや散歩に向かう人が多いですね。



箕面大滝に到着です。普段は人が大勢いる場所ですが、まだ朝なので滝の
音だけが支配する厳粛な場所となっています。


箕面大滝を離れさらに登ります。途中車道を通行するので車にはご注意を。


箕面ビジターセンターです。こちらでは東海自然歩道の高雄までのマップを
販売しております。また、東海自然歩道全踏破者に対して踏破証を交付されて
います。ですがまだ閉まってますね。


ビジターセンター横の府道を登ってすぐに東海自然歩道の西の拠点があります。
東京の東の拠点と違い、人が滅多に入らない場所でひっそりとハイカーや
トレランな人を待ち構えています。


近くにトイレがあるので改めて体制を立て直しスタートです!
ぢつはSTM32Primer2を使ったGPSロガーがこのルートを記録するのは今回が初めて。
Gms-G9を装備し最強に強まった状態で彼もねむいさんと同じく今回の54kmに
りべんぢを挑みます!(ピンク色の物体がGPSロガーです)


大阪ステージは箕面駅から開成皇子の墓までひたすらガンガン登りです。
ガッチガチに凍結したぎふちょう橋をこえます!



崩落個所もなく教科書のような模範的なトレイルが続きます。
結構急な登りですがちゃんと整備されているおかげでサクサク登れます♥


開成皇子の墓です。このあたりで登りは落ち着きます。


このあたり自然観察路が入り組んでます。勝尾寺にも行けるそうです。



北摂霊園近くの車道にでました。3年前には無かった鹿柵がとうせんぼしてます。


北摂霊園から先は一気に高度を下げます!



山道から車道に出てすぐに泉原の湧水があります。普段は人が行列作ってるよう
な場所ですが今は私の独占です♥

ちなみにここの湧水は飲料に適さないと明記されてるのでおなかの弱い方は
ご注意を。ねむいさんはもちろん平気でしたが(ベトナムで副業先の社員さん
全員が下痢した泥味のハス茶や静岡で墓地の隣の井戸水がぶ飲みしても
ねむいさん無傷だった。)



さて、ここから忍頂寺まではひたすらアスファルトの車道となります。
特に見る物もないのでさくっと通過します。



途中で山脈自然歩道なる道と同じくしますが東海自然歩道は屈折します。
意外と間違いやすいのでご注意ください。ですが3年前とは違い矢印がたくさん
設置されてますので多分大丈夫でしょう。


この畑のある場所を越えると第一の難関泉原集落です…!


泉原集落に入ると急に道標がなくなり道を見失います!ここは多くの
ハイカーが散っていった危険ポインツの一つなのでご注意を。
とりあえず道標がないこの個所は左折で!


ですが自分の勘を頼りにみちを間違えてしまった貴女はまだ挽回のチャンスが
あります!広い道路に出てしまったらとにかく左折!そして…


ほどなくして泉原西のバス停に着くでしょう。この奥の道を登ると
正規ルートに合流できます!


この道標が見えたらひと安心です。


素盞鳴尊(すさのお)神社です。


交通が激しい府道110号を横切り源氏講の石碑を越えて上音羽の屈折点に
向かいます。



屈折点を越えると道は下り基調になります。



忍頂寺スポーツ公園です。このすぐ先には忍頂寺跡への道があります。


まだまだ舗装路が続きます。3年前は無かったこんな解説看板がありました。



激坂を登ると宝池寺があります。


寿命院わきのトレイルを登ります。このたぬたぬも3年ぶりです。
しばらくぶ(ry



竜王山山頂です。ここには巨大展望台があります。
さてこの先は問題の箇所…


3年前、たしかこの木階段のあたりで足くじいたんですよね…
テーピングで足首周りの故障対策万全の今はまったく敵ではないです。



危なげなく登山口まで下りてきました。
3年前と違い道標が折れて入口に立てかけられており、さらにそれが誤った
方向を指してるので厳重に注意を!


そして大阪ステージ超最難関、車作集落にやってきました…!


ここで道を間違うと一発アウツのくせに道標が全くありません#
まずはこの小屋がある場所はこのようにV字ターンして降りて行きます。


そして魔の四差路EVIL-Xに差し掛かりました。道標が非常に曖昧な
個所をさしていて大阪/東京方面のどちらから来ても間違いを誘発させる
危険な場所です!
現に多くのハイカーがこの四差路で挫折し散って逝きました。


別アングル(東京方面から見た)四差路です。

なお、虹裏メイドに一度見せたネタは二度は通じないのはもはやこれは常識!
ですがさんざん苦しまされたこの四差路も既に見切ったので楽勝でクリアです。
お前を倒すにはその上(のスピード)をいけばいいと一輝兄さんも言ってますし。



ここまで来ればもう安心です。車作大橋に向かいます。



車作大橋です。上に目をやると新車作大橋が見えます。ここでルートは
一般コースと健脚コースに分かれます。もちろん今回は健脚コースを!


ここダンプカーが高速で行きかっててヤバい…


危険な車道を登りあがると途中に武士自然歩道と道を同じくした分岐が
あります。



ちょっと崩れた山道を登ると竜仙の滝が見えます。



道はそこからさらに登って行き武士自然歩道と別れたところで下りに
入ります。


どんどん下っていくと一般コースとの合流点である萩谷バス停につきます。



そこから先は萩谷総合運動場の中を通過します。


萩谷総合運動場からどんどん下に降りると摂津峡にたどり着きました。


ちょっと戻って白滝を。


この鬼子母神慶住院手前の自販機で小休憩としました。
前半のルートはほぼ予定時間通りに危なげなくクリアーです!


上の口バス停へは右折ですが今回はそのまま嵐山を目指します!
第二ラウンド開始!!


…????…こんなとこ走ったっけ…???


…おや…?これって…


F**K YOU!1!!1!!



さて、気を取り直して神峰山寺へとまず向かいます。
牛さんの仏像?が置かれている鳥居をくぐって登りあがります。


三年前はこことは別のトレイルを走っていましたが崩落により、
舗装路を移動するように誘導されています。



神峰山寺山門です。すぐ背後には御覧の通り通行止めの表記があります。


神峰山寺を越えたらお次は本山寺です。ひたすら舗装路の登坂!



本山寺の参道に着きました。道はコンクリ舗装に変わりさらに坂が
きつくなります。標高も上がってきたので凍結してる個所も!!



ひたすら登って登ってこの石碑がある個所まで来たらもうすぐ分岐点です。


本山寺分岐点です。三年前はそのままポンポン山に向かいましたが
今回は本山寺に寄ります。



本山寺本堂です。



実は本堂の右隣からポンポン山山頂に抜けることができます♥


正規ルートと合流しました。



あとはポンポン山山頂に向かってまっしぐらです!
だんだん雪…というか山道が凍結したちょっとヤバい道に!
↑今回スパイク持ってきてませんorz



滑らないように落ち着いて進んでポンポン山山頂に到着です。ポンポン山の
山頂を境に大阪ステージは終わり、ねむいさんの地元の京都ステージが
はぢまります。



大阪環状自然歩道と別れ東に進みます。大阪環状自然歩道は私の次なる
ターゲッツにしておりますよ!


さらに下っていくと舗装路に出て善峯寺への分岐がある杉谷につきます。
進路を金蔵寺に向けてひた走ります。


受験シーズンですからこんなつるつるゾーンで滑ったりコケたり堕ち
落ちたりしないように気を付けましたよぅうふふ♥


ひ 
 じ
  き



金蔵寺の山門に到着です。ガンガン高度を下げてきましたがさらに下がります。


トレイルを下っていくと集落まで降りました。まだまだ下ります。


三年前は高いトタンの塀で覆われていたこのあたりも道路が出来上がってますね〜


できたての道路をくぐると大原野神社の参道があります。といっても普通の
道路っぽいです。




そろそろ日没を意識しなければならないころに大原野神社に到着です。
時間が押してるので速効元のルートに戻る!


草餅屋はもう閉まってましたorz



お次は花の寺へと向かいます。
ここの参道は東海自然歩道屈指のビューポイントです!
夕日が落ちて丁度いい時間帯に撮影できました♥


さて、花の寺本体はどうでもいいので割愛して今度は住宅街を縫って走ります。
ところどころに矢印入りの道標があるのでトレランの方は走りすぎて見逃さ
ないようにご注意を!


田んぼの真ん中の道をまっすく進んで府道10号(丹波街道)と落ち合います。
ここから沓掛交差点を目指します…が交通量かなり激しいのでまたまた
ご注意を!


こっ…♥
こんなおぱんつ丸出しの注意喚起看板出されちゃったら見とれてしまって
逆に事故を起こしかねないんですけぉ!



ゲフンゲフフン失礼…
丹波街道を進んでいくと大きい道と落ち合ってさらにまっすぐ行くと沓掛
交差点が見えます。3年前はまだ工事中だったところですね。


交差点を渡り沓掛バス停で進路を右にとりさらに進むと住宅街の中を
走り抜けます。


が〜き〜ど〜も〜!



交通量が多いロータリーを渡って桂坂公園へと進みます。



もうすぐ日没。太陽も山の裏に落ちました…。既に街灯もつき始めてますね。



懸念していたラスト付近の竹林のトレイルですが、なんとか暗くなり切る
まえに抜けることができました!
しっかしでこぼこしててほんっと走りづらいですここ…


そろそろ10時間くらい経ってきたのでペースをぐんぐん上げます。
地蔵院と思ってたけど本当の地蔵院はもっと先でしたorz


真っ暗ですが苔寺への分岐点です。


鈴虫寺入り口です。



月読神社を通り過ぎて松尾大社です。ここから先の進路は3年前と同じく
桂川に沿って進むルートをとりました!


残り2.2km、いざラストラン!


うぉぉぉぉぉおおおお!!


ぉおおおおおぉ…おっ!渡月橋が見えてきました★


阪急嵐山駅への分岐を通り過ぎ17時33分に渡月橋に到着・・・10時間6分を
かけた長い戦いが終わりました…
そして3年前の雪辱を果たしました!!りべんぢ成功です♥

>
少し戻って多目的トイレで着替えを済ませ、"よっし、家(西院)に帰るか〜!"
…と思ったのですがまだ水平方向に進む体力は十分残ってたので嵐電を
使わずそのまま歩いて西院の自宅へと帰りました。


…ということで2014年の初走りを約54kmの激闘を制する形で〆ました!
前回の高尾山口で東海自然歩道はほぼすべてのルートを巡っているのですが、
3年前は成しえなかった箕面〜嵐山間を今回"ハイキング"ではく"トレイルラン"
でつなぐことで本当の意味で東海自然歩道を全走破できたと実感しております。

私にとってこの嵐山渡月橋が一つのゴールであり、同じくまた新たなスタート
地点となりました。まだまだ攻略すべき山はたくさんあります!
箕面-嵐山渡月橋 GPSログ


ああそうそう、ブラウザベンチマークがARM関連の記事抑えて好評になって
きたので東海自然歩道以外の山行レポートもびしばし上げてこうとおもいます!
コラコラそんな嬉しそうな顔し・な・い・の♥

OpenOCD小ネタ5 -CMSIS-DAP、来る!-

あけましておめでとうございます。
今年もわたくしねむいさんと虹裏メイドたちをどうぞごひいきに。



さて、早速本題に入りましょう。正月明けから少し経ったころ、以前から少しずつ
修正が加えられていたCMSIS-DAP対応がついに公式にマージされました!

CMSIS-DAPとは以前から述べてきましたがARM謹製のオープンソースのデバッガ・
ハードウエアの名称です。大きな特徴としてPCからはUSB-HIDデバイスとして認識
されるので(mbed版はVCPドライバが必要)ドライバいらずで面倒な設定がほとんど
無く手軽に使用できます。

OpenOCDから使用する際にはOS間の差異を吸収するためhidapiというHIDデバイスの
ライブラリを経由してアクセスされます。つまり、OpenOCDからCMSIS-DAPを利用可
能にするためにはhidapiも使用可能にしておく必要があります。

私のおきぱにあるOpenOCDのバイナリはすでにhidapiが使えるように自前でビルド
したlibhidapi-0.dllをバインドしていますのですぐに使用が可能です。

↑ていうわけでCMSIS-DAP対応のOpenOCDを使ってLPC812-MAX上で
 書き込み/デバッグしてるところです♥

なお、CMSIS-DAPはSTLink/v2やTI-ICDIのようないわゆるHLAには属さず、
JTAGデバイスやSWD版Versaloonのようにローレベルまで直接ぶっ叩くことが
可能なアダプタのため、Kinetis系のような雄度の高いマイコン相手でも
バリバリ使用可能です。

特にFRDM系の評価ボードに特化したMBED版CMSIS-DAPのバイナリ
用意され始めているので利用しない手はありません!急げ!
…とその前に…
※MBED版CMSIS-DAP使用上の注意※
MBED版CMSIS-DAPは実際はUSB-MSC,USB-VCP,USB-HIDの3つのUSBコンポジット・
デバイスとして構成されています。しかし最初はMSCしか認識してくれず、
CMSIS-DAP(HID)が使えません。
こちらにあるVCPドライバをインストールすることによってCMSIS-DAPも
認識されますのでご注意を。



ところでずっとフン詰まり状態だったCMSIS-DAP対応がOpenOCDに急にマージされた
背景にはVersaloonの今後に関するちょっとした議論がありました。
かいつまんで言うとVersaloon終了です。もうこれ以上ハードもファームも更新はされる
ことはないでしょう。SWDプロトコル対応のパッチはOpenOCD0.6.0以降は全く更新
されていません。しかも今回のCMSIS-DAP対応により完全に適用不可能となります。

しかし、もうご存知の方もいますがねむいさんはCMSIS-DAPとSWD版Versaloonを統合
して使用可能なパッチを作成しています
。ねむいさんのぶろぐを知ってる方は私の目が
黒いうちはVersaloonの恩恵が受けられますのでご安心ください。
最近はOpenOCDの自前ビルドが必須のLinux系&マカーな環境の方からも続々と成功の
報告をいただくようになりました。ありがとうございます。ありがとうございます。

20140715追:
Versaloon復ッ活ッッ!


私もCMSIS-DAP対応を決起に未提出のパッチをgerritにどんどん吐いていく予定でした
のでOpenOCDがオワコンどころか一気にボルテージが上がって今年はさらに深い部分
まで切り込んでいくことになりそうです。


20150406追:
CMSIS-DAPが本来の力を取り戻しました。
遅かったOpenOCDからの書き込みも快適に行えます☆

Go to top of page