最近、キャリブレーションプロトコルにしたがって通信を行うための、コントローラを実装しました。対応プロトコルはXCPとGMLAN。それぞれ別案件で、実装デバイスも違います。それが偶然、同じ時期に重なったのがなんだか運命(?)という気がします。(重なったがためにお盆休みが全く取れませんでしたが。。)

GMLANとは、GMの車で採用されているキャリブレーションプロトコルです。仕様が非公開のため、情報はほとんど落ちていないと思います。

XCPとは、ASAMで規定されているキャリブレーションプロトコルです。仕様が公開されている上に、日本語による分かりやすいXCP入門記事まであります。

ここでは、GMLANも、XCPも、使う事はないけれど、何者なのか軽~く知っておきたいという方のために、軽~くご説明します。

何がうれしいの?

ECUのデバッグを行う、あるいは適合を行う場合に必要なのが次の2つの作業です。

・ECU内の振る舞いを知る(メモリの値などをモニター)
・ECU内の設定を変える(メモリの値 などを書き換え)

これらの事が、CANバス経由で行えるのがキャリブレーションプロトコルです。CANにつながってさえいればいいので、車載ECUの振る舞いをCANバス経由でモニターする事もできます。

書き込みも、揮発性メモリへの書き込み、非揮発性メモリへの書き込み、どちらもOKなので、適合にも使えます。

なにより、わざわざデバッグ用に配線を用意しなくても、もともと持ってるCANをそのまま使える!というのが一番うれしいポイントだと思います。

CANバス経由でメモリを読み書き

キャリブレーションプロトコル以外の手段

キャリブレーションプロトコルを使わないでやるとしたら、どうでしょうか?

まずは、専用のICEを用意する、オンチップデバッガを使用する、などが考えられます。1ステップ1ステップ動かしながらデバッグするのであれば、キャリブレーションプロトコルなんか使わないで、これらのツールを使った方がいいと思います。

あと最近は、DT10というツールがあって、マイコンの振る舞いをかなり深く、そして分かりやすくモニターする事もできます。このツールは、マイコンの種類に依存しないのが素晴らしいところです。さらに、マイコンのメモリ値と、外部のデジタル/アナログ信号を同時に収集して、並べて見ることも出来ます。これはこれで便利です。

GMLAN

GMLANでは、ECUの上に「メモリ」「PID」「故障コード」などの情報があると考え、それらにアクセスしていきます。

メモリ、PID、故障コード

メモリへは、アドレスを指定してアクセスします。

PIDは、アドレス空間とは別の、PIDという値を指定してアクセスします。

故障コードとは、故障の種類ごとに1つの故障コードを割り当てられているものです。たとえば、センサーが壊れたなら故障コード=$1AFF 、という感じです。そして、この$1AFFという故障コードをもとに、「$1AFFの故障、今はどんな状態なの?」とか「その故障が起きた際の詳しい状況は?」などを、問い合わせることが出来るようになっています。

GMLANはコネクションレスである(接続、切断手順がない)ため、次のようにとても単純なイメージで通信が出来ます。

ツール:「アドレス $12345678 のデータを、2バイト分だけください」
ECU:「そのデータは、$9ABC です」

これで1トランザクション、これで終了です。メモリ、PID、故障コードともに、この基本的な構造は変わりません。

お手軽でいいのですが、メモリの変化を連続して取得するには不向きともいえます。

XCP

XCPでは、ECU上に「メモリ」があると考え、それを読み書きします。

メモリ

ただし、ここでいう「メモリ」が、ECU上の実際のアドレスと一致しているとは限りません。実際のアドレス空間とは全然別のアドレスが用意されている事もあります。そのあたりは、ECU上に実装されたXCPスレーブモジュールに依存します。

XCPはコネクション型のため、接続、切断の手順が必要です。さらに、汎用性をもたせるためにXCP専用のいろんなパラメータがぐちゃぐちゃと定義されており、とても面倒な作りになっています。

ただしそのお陰で、つぎのような事が出来ます。

ツール:「アドレス $12345678, $23456789, $3456789A の3つのデータ、これからジャンジャン送ってきてください」
ECU:「データは、$1234, $5678, $9ABCでした」
ECU:「データは、$1235, $5679, $9ABDでした」
・・・

このように、いちどスタートしたら、あとは連続的にデータを送信する事ができます。メモリ値の変化をモニターするには、便利な機能です。

もちろん、GMLANのように単発で読み込む事も出来ます。

まとめ

GMLAN、XCPともに、ECUがCANにさえつながっていれば使えるという所が一番のポイントです。

ですから、車載されたECUにたいして、メモリの読み書きを行ったり、あるいはファームウェアの更新を行ったりすることもできます。この、「車載のまま、あれこれ出来る」というのは非常にポイントが高いように思います。結局、最後は走らせてみないと分かりませんから。