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
> ユニバーサル シリアル バス (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