XCPプロトコルの通信の仕組みと機能:測定/キャリブレーションプロトコルXCP入門(2)(2/3 ページ)
XCPプロトコルが具体的にどのように通信を行っているのか? XCPの持つ機能・プロトコル内容について詳しく解説する。
測定/キャリブレーション対象への
アクセス
XCPによる測定/キャリブレーションは、ECU内部のソフトウェアに対してアクセスすることで実現しています。具体的には、測定/キャリブレーション対象メモリ区間に対する「XCPアドレス」を指定する方式でアクセスが行われます。
XCPアドレスとは、通常のマイコンにおけるアドレスとほぼ同じですが、XCPでは32ビットのXCPアドレスと8ビットのアドレス拡張の組み合わせによって指定します。つまり、マスターはスレーブに対して、32+8=40ビットアドレス空間へのアクセスが可能になります。
このアドレスは、XCPの実際のECUメモリと必ずしも一致させる必要はなく、そのバイト順(エンディアン)は、スレーブごとに選択できます。そのため、車載ネットワーク上に複数のECUがつながっており、それぞれ異なるアドレス空間(16ビット、32ビット)、異なるアドレスバイト順が存在したとしても、マスターがこれらを適切に扱うことで、すべてを測定/キャリブレーションできます。
非同期測定
XCPは、同期だけではなく非同期測定も可能です。
非同期測定は、マスターからのコマンドを使って、スレーブであるECU内部のデータをXCPアドレス指定で取り出し、スレーブからの応答で、このデータをマスターに渡すという通信を繰り返すことによって実現します。取り出すためには、PIDを「0xF4」とした「SHORT_UPLOAD」というコマンドを用います。このコマンドとレスポンスのフォーマットについて以下に説明します。
- SHORT_UPLOADコマンド:
CTO 0バイト位置 - PIDとして「0xF4」を指定
CTO 1バイト位置 - 取り出すバイト数を指定。最大はMAX_CTO−1バイト
CTO 2バイト位置 - 予約領域
CTO 3バイト位置 - 読み出すアドレス拡張8ビットを指定
CTO 4バイト位置〜7バイト位置 - 読み出すアドレスを指定 - SHORT_UPLOADレスポンス:
CTO 0バイト位置 - PIDとして「0xFF」を指定
CTO 1バイト位置〜MAX_CTOバイト位置 - 取り出したデータを指定
図8は、マスターが「SHORT_UPLOAD」コマンドを使って、100msごとにXCPアドレス拡張を「0」、XCPアドレスを「0x00124A5C」から4バイト取り出している様子をトレースした結果です。
同期測定
前述の非同期測定の場合、測定タイミングはマスターが決定していました。ECUの制御に合わせた測定を可能にするには、測定タイミングをECUが決定し、データを取り出した後に、スレーブからマスターへデータを渡すという処理が必要になります。このデータを渡すための通信は、DTOを介して行われます。
データを取り出すXCPアドレスは、マスターが同期測定の前にコマンドで指定し、同期測定の開始コマンドを待って、スレーブがDTOを使ってマスターに送信します。このため、同期測定の場合は、コマンドとレスポンスの組み合わせではなく、測定周期やイベントによって、スレーブからDTOパケットがマスターへ送信されます。
図9に、「START_STOP_SYNCH」コマンドで同期測定を開始し、スレーブが測定データをDTOパケットを使って送信して、「START_STOP_SYNCH」コマンドで停止するまでを実際にトレースした結果を示します。
以下、同期測定における測定タイミングを決定するECUの制御アプリケーション、マスターとスレーブの役割について説明します。
ECUの制御アプリケーション:
測定したい制御周期、および事象のトリガが発生した際、それをXCPスレーブへ伝える処理を行います。
マスター:
同期測定するメモリとその周期を決め、同期測定を行うXCPアドレスの指定、および同期測定の開始と停止をコマンドで行います。
スレーブ:
マスターから指定された同期測定XCPアドレスを管理します。また、同期測定の開始を検知したら、停止するまでは上記ECUの制御アプリケーションからの通達ごとに管理したXCPアドレスのメモリ値を取り出して測定を行い、DTOパケットを送信します。
同期測定にかかわるXCP用語と概念
同期測定に関して、XCP規格書ではさまざまな用語が使われています。ここでは、主な用語とその概念について説明します。
Element:
XCPアドレスによって指定される1つの測定対象メモリです。
ODT(Object Description Table):
Elementの測定したメモリを並べ、1つのDTOパケットで最大送信できる分のメモリを集めたテーブルです。
ODTエントリ:
ODTを作成するためのElementの測定対象XCPアドレスです。
DAQリスト:
ODTを集めたものです。1つの同期測定の周期、または事象のトリガごとに測定されるメモリ量がこれで決まります。ODTは、1つのDTOパケットなので、最大でもMAX_DTO−PIDのサイズで決まりますが、実際に測定されるメモリは、これよりも大きくなることもあるので、ODTとDAQリストに分けられています。
イベントチャンネル:
同期測定を行う制御周期、および事象のトリガのチャンネル、つまり“種別”を意味します。同期測定するタイミングは、すべてこのイベントチャンネルを基にします。
Copyright © ITmedia, Inc. All Rights Reserved.