OBD-II TOYOTA CAN(アルファード30系)

はじめに

 車のOBD-II端子のCANについて調査する必要があり、試せるものが自宅のアルファードしかなかったので調査したのでまとめてみた。海外ではOBD-IIの通信を解析したサイトがいくつか出てくるし、デバイスも豊富なのに日本だとイマイチ情報がない。ただ、ECUや車両の通信の専門家ではないため、用語や使用方法は専門家とは異なる記述をしている可能性大と間違いはあるかもしれないので、情報の利用は自己責任で。

 CANデータについてはSTMicroelectronics社のCPU(STM32L4など)がCANペリフェラル付きなので、これを利用してデータを取り込んだ。NUCLEOとCANトランシーバMCP2551を利用した簡単なもの、ここら辺は時間が別途まとめたいが検索すれば詳しいサイトが出てくると思う。

車両のCANについて

 CANは基本的に8バイトのデータを複数のデバイス(ECU)間で通信を行う仕組み。物理層やデータリンク層の話は「ISO11898」や「ISO11519」で規格化されているが、低レベル層の通信の話は他のサイトにあるので、ここでは低レベル層の話は省いてTOYOTA CANで取得できる情報について書く。

 まずは要求を行わなくてもCAN-BUSに大量にデータが流れており、そのうちわかっているデータについてまとめる。ISO-TP (ISO15765-2)を利用した要求/応答型のやり取りについても解析しているが、項目が膨大にあるのでまた後日。 

 ちなみに、今はやりのCANインベーダーについて調べる気はさらさらない。悪しからず。

表の見方

独特な表現をしているのでわかりにくいと思いますが、一応説明。。。

項目名説明
CAN IDデータ内容や送信ノードを識別するための識別子。11bit形式と29bit形式がある。
プロトコル(Protocol)Raw:正規な表現ではないですが、ISO 11898で定められたセッションレス型プロトコル
ISO-TP:複数メッセージを1つのフレームにまとめるて最大4096バイトのデータが送れるフロー制御型プロトコル(ISO 15765-2)。J1979/KWP2000/UDSの通信で利用する
SAE J1939:主に大型車両向けのプロトコル
Endian
(エンディアン)
解析するデータのバイト配列の並び順。
Little:INTEL系のバイト配列の並び。データの下位バイトから先頭に並べる。
Big:MOTOROLA系のバイト配列の並び。データの上位バイトから先頭に並べる。
開始ビット
(Start Bit)
各プロトコルのデータ部からデータを抜き出すときのLSBの位置です。
Rawのデータ部は0~7バイトあり、先頭バイトを0バイト目とする。
ISO-TPの場合、SIDとPIDを飛ばした位置を0バイト目とする。
ビット数
(Bit Length)
LSBからMSBまでのビット数です。ビッグエンディアンとリトルエンディアンではバイト配列の進方向が変わります。
倍率
(Scale Factor)
取得した値の計算方法。オフセットと合わせて以下のように計算
オフセット(Offset)Value = (Data Value) * (Scale Factor) + (Offset)
項目名取得した値が該当する情報の名称と値の単位

取得できる車両情報

走行情報

CAN IDプロトコルEndian開始ビットビット数倍率オフセット項目名(単位)
61011bit RawBig16810車速(km/h)
61111bit Raw Big 563210走行距離(km)
63B11bit RawBig242410エンジン始動回数
56320.10エンジン始動時間(秒)
1C411bit Raw Big 816100/1281/4エンジン回転数(rpm)
2511bit Raw Big 81210ステアリング角度(℃)
64B11bit Raw Big 56321/100エンジン始動時間(秒)
2C1 11bit Raw Big 48810アクセルペダル(%)

ドア開錠状態/ドア開状態

CAN IDプロトコルEndian開始ビットビット数倍率オフセット項目名
4A511bit Raw Big 32810ドア開錠状態
40810ドア開閉状態

各項目に入る値は以下の値のORになる。

意味
0x80運転席ドア開錠
0x40助手席ドア開錠
0x20リア右ドア開錠
0x10リア左ドア開錠
0x08ハッチ開錠
5バイト目:ドア開錠状態

意味
0x80運転席ドア開
0x40助手席ドア開
0x20リア右ドア開
0x10リア左ドア開
0x08ハッチ開
6バイト目:ドア開閉状態

シフトポジション/表示灯

CAN IDプロトコルEndian開始ビットビット数倍率オフセット項目名
3BC11bit Raw Big 8810シフトポジション1
41710シフトポジション2
40110エコモード表示灯
3B711bit Raw Big 0810ブレーキ警告灯
8810スリップ表示灯

各項目の値は以下のようになる。

シフトポジション1

意味
0x08N(ニュートラル)
0x10R(リバース)
0x20P(パーキング)

シフトポジション2

意味
0x01Bレンジ
0x04Dレンジ

エコモード表示灯

意味
0x0消灯
0x01点灯

ブレーキ警告灯

意味
0x00消灯
0x02電子ブレーキ警告灯 定速点滅
0x04電子ブレーキ警告灯 高速点滅
0x07電子ブレーキ警告灯 点灯
0x18ABS&ブレーキアシスト警告灯 高速点滅
0x10ABS&ブレーキアシスト警告灯 点灯
0x40ブレーキ警告灯 点灯

参考文献

  • OBD-II PIDs
    https://en.wikipedia.org/wiki/OBD-II_PIDs
    ベーシックな車両診断のPIDを説明したWikiページ。最初はここにある情報が取得できる情報のすべてだと勘違いをしていた。ここはあくまで世界共通のPIDであって、これのどれをサポートするかはメーカー次第。
  • ハッカーズ・ハンドブック
  • 車載ネットワーク・システム徹底解説―CAN,LIN,FlexRayのプロトコルと実装
    少し古いですが、CANについて調べだした頃は情報がなかったのでこれを読んで勉強してました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください