MAZDAのMS-CANとHS-CANについてのまとめ
目的 |
チューニング・カスタム |
作業 |
DIY |
難易度 |
初級 |
作業時間 |
30分以内 |
1
せっかくなので集めた情報や解析した情報を備忘録として書きます。当方のRX-8は後期型の6ATです。ですが、この時代のマツダ車には共通な項目も多いと思います。間違っていることを書いていればすみません。その際は指摘ください。あと車両との通信は何があるかわかりませんので自己責任でお願いします。
2
車載デバイス間の通信はCANで実施しており、高速なHS-CAN(500kHz)と低速なMS-CAN(125kHz)があります。まずはMS-CANからです。
MS-CAN上には次の機器が繋がっています。
・インフォメーションセンターディスプレイ(以後はインフォメーションディスプレイ)
・エアコン
・純正オーディオ(ない場合もある)
・純正カーナビ(ない場合もある)
・OBD2コネクター(機器ではないが、MS-CANの通信線を取り出せる)
・ハンズフリー通話機器(ない場合もある。海外向けのみ?)
3
インフォメーションディスプレイには自身が持つ時計の表示、エアコンからもらった外気温データ・設定情報表示、純正オーディオまたは純正カーナビの情報表示をする役割があるのですが、時計の調整ボタンと外気温ボタンが純正オーディオまたは純正カーナビにしかないため、社外オーディオや社外カーナビをつけている場合は中央部が空欄になることはおろか時計の表示もできなくなり、外気温データの表示とエアコンの設定状態の表示のみになります。
インフォメーションディスプレイ中央部へデータを表示するためには純正オーディオまたは純正カーナビからMS-CANを経由してデータを送っています。ここの通信仕様がわかればOBD2コネクタから任意の情報をMS-CAN上に流し、文字を表示することができます。このあたりについてはすでに解析されており(下部にリンク)、次のデータを250msごとに送信します。
PID: データ0, ・・・, データ7
0x28F: 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00
0x290: 0xC0, 文字コード0, 文字コード1, 文字コード2, 文字コード3, 文字コード4, 文字コード5, 文字コード6
0x291: 0x87, 文字コード7, 文字コード8, 文字コード9, 文字コード10, 文字コード11, 0x20, 0x20
この文字コードnのところはアスキーコードで記述します。
例えばRENESIS RX-8と表示したければ
0x28F: 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00
0x290: 0xC0, 0x52, 0x45, 0x4E, 0x45, 0x53, 0x49, 0x53
0x291: 0x87, 0x20, 0x52, 0x58, 0x2D, 0x38, 0x20, 0x20
のセットを250ms間隔で繰り返し送信します。
0x290のデータ0の0xC0、0x291のデータ0の0x87、データ6,7の0x20はなぜこうするかはわかりませんが、純正オーディオはこのように返していますのでそれに倣います。
4
続いて時刻設定と外気温表示です。
一度でも0x28F, 0x290, 0x291の文字列送信をしてしまうと外気温表示ができなくなり、時計表示に切り替わります。また、元に戻すにはインフォメーションディスプレイに繋がる常時12V電源を切り離す必要があります。実写の場合バッテリーを外すことになると思います。当方はオクで落としたインフォメーションディスプレイで遊んでいるときに気づきました。なので実写で実験するときは時刻設定もできる状態で挑んだ方がいいです。
純正オーディオの時刻設定ボタン時、分、:00はそれぞれ0x28Fのデータ7を0x10、0x08、0x04にして送信します。毎周期送り続けるとボタン長押しと同じ効果があり、例えば0x10を送り続けると時がどんどんカウントアップしていきます。
純正オーディオの外気温ボタンは0x28Fのデータ4を0x84にして送信します。これによりエアコン設定部の温度表示が外気温表示に切り替わります。
5
次に外気温データの取得方法です。(このあたりは実験中です。)
エアコンユニットからは外気温データが流れていますのでそれを取り出してインフォメーションディスプレイ中央部に表示すれば時計、外気温、エアコン設定温度を同時に表示できます。ただし、一度でも外気温表示ボタンが押されていないと送信されないようです。エアコンユニットからは次のデータが送られています。
PID: データ0, ・・・, データ5
0x3BA: 0xA4, 0xB2, 0x11, 0x56, 0xD1, 0x38
このうちのデータ4,5が外気温です。データ0~データ3はエアコンの設定状態だと思います。データ4,5から外気温を抜き出すには少々面倒ですが次のような計算が必要です。データ4は左に5シフトして11100000でマスク、データ5は右に3シフトして00011111でマスクし、両者をビット和して1バイトのデータを作ります。このHEX値が外気温です。ここで0xA*は1桁だけを表し、0xB*はマイナスを表します。
"例:データ4,5が
0xD1,0x38→0b1101 0[001 0011 1]000→0x37→37℃
0xD5,0xC8→0b1101 0[101 1100 1]000→0xB9→-9℃
0xD5,0x00→0b1101 0[101 0000 0]000→0xA0→ 0℃
0xD0,0x80→0b1101 0[000 1000 0]000→0x10→10℃"
ただこれだと-9~99℃までしか表現できません。-10℃以下は表示されないのでしょうか?あと海外で℉を表示する場合もどうやってるか疑問です。そもそものエアコンユニットが異なるのでしょうか。なにか見落としがあるかも知れません。
6
MS-CANはこれくらいで次はHS-CANです。
HS-CANにはMS-CANにつながる機器以外の機器が繋がっています。ECU、ABS、メータなどです。OBD2コネクタにもHS-CANの通信線は取り出すことができ、ELM237等のOBD2スキャンツールやOBD2に接続するタイプの追加メータはこちらに繋がっています。ただ、これらの機器はデータ取得のためにECUに問い合わせを行います。水温程度のデータであればこんなことしなくてもHS-CAN上にブロードキャストされているのでECUに負荷をかけなくても取得できます。
HS-CANについてもすでに解析されており(下部にリンク)、当方が確認したのは下記です。その他はそのうち見ておきます。
回転数:PID 0x201→((データ0<<8+データ1)/4) rpm
速度:PID 0x201→(データ4<<8+データ5-10000)/100 km/h ※スピードメータの表示はこれより約5%多いのでさらに1.05をかける。
アクセルペダル位置:PID 0x201→データ6
水温:PID 0x420→(データ0-40) ℃
インテーク温度:PID 0x250→(データ0-40)℃
ATシフト:PID 0x231→データ0が0x01→P, 0x72→R, 0x03→N, 0x14→1速 0x24→2速, ・・・, 0x64→6速
オドメータ: PID 0x4F2→(データ0<<16+データ1<<8+データ2) km
ハンドル角度: 0x081→(データ2<<8+データ3) 度 ※符号付
ホイールスピード左前:PID 0x4B0→(データ0<<8+データ1-10000)/100 km/h
ホイールスピード右前:PID 0x4B0→(データ2<<8+データ3-10000)/100 km/h
ホイールスピード左後:PID 0x4B0→(データ4<<8+データ5-10000)/100 km/h
ホイールスピード右後:PID 0x4B0→(データ6<<8+データ7-10000)/100 km/h
これら情報をもとにシビアコンディションにならないように8km走ったらインフォメーションディスプレイにREADYと表示したり、すでに投稿しているようなTPMSを作っています。他には車速感応ドアロックを作りたいのですが、まだ解析できていません。
7
ハードウェアについてですが、当方はAVRマイコンmega88、MCP2515、MCP2551を使っています。MCP2515とMCP2551はHS-CANとMS-CAN用に2セット用意しています。これらの自作の機器はハンドル下のカバーの中に納めています。また、OBD2コネクタからはACC電源がとることができないので別のところから取るようにしています。
8
[PR]Yahoo!ショッピング
入札多数の人気商品!
[PR]Yahoo!オークション
タグ
関連コンテンツ( #OBD2 の関連コンテンツ )
関連整備ピックアップ
関連リンク