[SH5A フォレスター] 燃費計の解析

Submitted byshin on日, 2008-12-07 16:35


フォレスターには、
 ・外気温
 ・A区間平均燃費
 ・B区間平均燃費
 ・時計
を表示できるインフォメーションメータが装備されていているんだけど、
 ・それでなくてもカーナビディスプレイの影になって見難いし、
 ・狭いダッシュボードの中の限られた平面空間に荷物を置くと見えなくなってしまうし、
 ・カーナビの時計とインフォメーションメーターの時計がどんどんずれてしまうのが気になるとかとか、
なんとかならないかなぁと思っていた訳。

[20100117追記]
SH5A限定情報です。

フォレスターの回路図を見るとこのインフォメーションメータは、ECUからUART(つまりはRS-232C)
で接続されている(更に言うとECUからインフォメーションメータへの単方向のみ)ので、このインタフェース
を解析すれば何か出来ないかなぁと‥
※前半は以前ちらっと書いた内容を含んでいます

[2008/11/16]
■■なんとかなるかな?

‥ってなことを考えていたら、 みんカラで、レガシーの燃費 計を繋いだら、更に
 ・瞬間燃費
 ・(過去30kmの平均燃費から算出した)走行可能残距離
が表示される情報が公開(絶対インサイダー情報だと思うんだけど、そうでもないのかなぁ)されて盛上がっている
のを発見。このUART内を流れている情報で何かいろいろ出来そうな予感

■■UARTの動作電圧確認

単純にUARTと書いていても、普通のRS-232C(-12V?12V)の情報をやり取りしているとは限らないわけで、
物理的な仕様を確認する必要がある。
※以前使っていたSONYのカーナビ(NVX-F10)は基板上にTX/RXのシルクパターンがあって、
 TXにLS04を繋いでパソコンでシリアル受信&パソコンカーナビした事がある
 (つまりは反転論理の0V?5Vだったってこと)
で、ペン型オシロ(秋月で購入したosziFOXなのだ)を使って、まずは信号電圧の確認。



100Vレンジだと下のほうをうようよしていて、10Vレンジだと振り切れること(、及び自動車の電圧が12V)
から0V?12Vで変位していることがわかる。
なんとなくRS-232Cっぽい波形なので、後はパソコンに繋いでデータ取得できるかどうかで確認することに
※波形を見たら,スタートビットやパリティの位置が簡単にわかると思っていたのだけど、甘かった。
 全然わからない‥)

[2008/11/24]
■■さて、お次は通信プロトコルの解析

とりあえずパソコンを繋いで確認するという手もあるんだけど、ボーレート,データ長,パリティ条件、
ストップビット長等、パラメータが多すぎるのでボーレートだけでも波形から取得できないか試みる


波形からはどこがスタートビットかなんてわからないので、一番短そうなHIGH区間を基準に、数ビット分
変化するのに必要な時間から大体のボーレートを類推。計算は2700bpsだったので、2400bpsってことに。
※実は最初に適当にボーレートを設定して受信してみた所、正しくは2400bpsの通信データを 1200bpsで取得
 してもそれっぽいデータが取れてしまうのでだまされて無駄な時間をかけてしまった。
いろいろパラメータを振って、一応、
 ・通信速度:2400bps
 ・データ長:8bit
 ・パリティ:even
 ・ストップビット:1bit (2でも受信できたので、正しくは2bitだったのかも)
ということにして解析を続行。これでデータのフォーマットの説明がついたら正しかったことになる。

■■なんとかプロトコル判明

本当にブラックボックスなので、最初どうやって手をつけたらいいものか悩んだんだけど、
・Aを表示する/Aだけクリアする/A表示からB表示に変更する
・しばらく(通勤は片道30km)走ってみる
等々やって集めたデータから以下のプロトコルだったことが判明

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
★プロトコルまとめは別ページに移動しました
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

■■この後?

UARTを流れていたのは、レガシーで表示される情報そのもので、車速パルス等の生データ
が流れていなかったことがわかって意気消沈(勝手に期待したこちらが悪いんだけどね)。

この後展開するとしたら、
・(みんカラと同じく)レガシーの燃費計をつけて遊ぶ
・UARTのパケットを操作して、区間燃費のフィールドに、瞬間燃費や走行可能距離を乗せて、
 現行フォレスターのインフォメーションメータのまま全ての情報を表示可能にする
 ※切り替えは今使っていないステアリングスイッチが使えそう
・UARTの有効利用はあきらめて、燃費計はOBDインタフェースからスマートに取得する
位の選択肢があるわけなんだけど、今のところは最期の選択肢に傾きかけ。

参考情報:
(1)30km走行した時の生データ(バイナリ)
(2)生データに上記解析結果を付加させたもの 解析情報つき(hexダンプ+ascii文字列)
 ※(1)と(2)は違うデータかも?まぁ面倒だからこのまま