XCPプロトコルの通信の仕組みと機能:測定/キャリブレーションプロトコルXCP入門(2)(1/3 ページ)
XCPプロトコルが具体的にどのように通信を行っているのか? XCPの持つ機能・プロトコル内容について詳しく解説する。
第1回「測定/キャリブレーションプロトコルとは?」に引き続き、第2回は「XCP(Universal Calibration Protocol)」プロトコルが具体的にどのように通信を行っているのかについてと、XCPの持つ機能とプロトコル内容について説明していきます。
マスター・スレーブ方式
XCPでは、測定/キャリブレーションを行うツール側を「XCPマスター」、測定されるECU側を「XCPスレーブ」と呼び、いわゆる「マスター・スレーブ通信方式」が採用されています。
この通信方式は、マスターが必ず先にコマンド送信を開始し、マスターの送信をスレーブが受け取った後に、スレーブがマスターへレスポンスを送信するという通信順序となります。
図1に示すとおり、1つのネットワーク上にマスターは必ず1つですが、スレーブは複数存在可能です。
この場合、マスターは個々のスレーブに対してコマンドを送り、スレーブからのレスポンスを受け取ります(図2)。
この通信方式により、車載ネットワーク上に測定/キャリブレーションを行うツール(=XCPマスター)を1つ接続し、XCPを通じて測定対象となる各ECU(=XCPスレーブ)にアクセスします。
ネットワークと転送方式
ネットワーク上において、“マスターからスレーブへの送信”と、“スレーブからマスターへの送信”の2種類を区別できる通信であればXCPを使用できます。
「XCP on CAN」の場合、CANのIDを2つ使い、“マスターからスレーブへ送信を行うID”と“スレーブからマスターへ送信を行うID”を割り当てることで区別します。
区別された通信をネットワーク上で使用し、何らかの内容を転送する際、XCPでは3つの転送モードが用いられます(図3)。
この転送モードは、マスター側およびスレーブ側それぞれで、どのモードにするのかを決めることができます。例えば、マスターは「ブロック転送モード」、スレーブは「スタンダードモード」で、といった利用も可能です。これにより、マスターであるツール側は高機能だが、スレーブであるECUは限られたリソースしか使えない……といった際に、転送モードを単純なものにするといった実装も可能です。
CTO/DTO
XCPでは、このマスターとスレーブ間の送信方向の違いとは別に、送信する内容を“XCP自身の制御に関する通信”か、“データに関する通信”かの2種類に分け、それぞれのネットワーク上に流すパケットのフォーマットを定めています。ちなみに、前者を「CTO(Command Transfer Object)」、後者を「DTO(Data Transfer Object)」と呼びます。
CTO:Command Transfer Objectの略
CTOとは、XCP自身の制御コマンドやそのレスポンスなどに関するオブジェクトです。制御コマンドはマスターから、コマンドに対するレスポンスはスレーブから送られます。
DTO:Data Transfer Objectの略
DTOとは、同期的なスレーブ(ECU)のデータ測定結果、および同期的なスレーブへのデータ変更に関するオブジェクトです。同期的なデータ変更を「ステミュレーション」と呼びますが、これは測定/キャリブレーション以外の機能になりますので詳細は割愛します(詳しく知りたい場合は、XCPの規格書をご覧ください)。
図4に、XCPの規格書Part2 1.1.1 The XCP Packet Typesから抜粋したXCPマスターとスレーブ間におけるCTOとDTOの関係を示します。
パケットフォーマットとPID
CTOとDTOは、前述のとおり異なるパケットフォーマットになり(図5)、それぞれ最大パケット長をマスターとスレーブ間で設定できます。
- MAX_CTO:CTOの最大パケット長[バイト]
- MAX_DTO:DTOの最大パケット長[バイト]
すべてのXCPのパケットは、この最大パケット長以内に収まり、1つのパケットでコマンドやレスポンスなどの内容が完結するようになっています。また、パケットフォーマット中、各フィールド2種類の送信をCTO、およびDTOのパケットに割り当て、さらに、パケットの最初の1バイト目を「PID」と呼ばれる識別子とし、どのようなパケットであるかを区別するために使用しています。
マスターからスレーブへのXCP制御を行う場合を「コマンド(CMD)」とし、その際PIDは「0xC0」〜「0xFF」の範囲となります。このコマンドに、スレーブが肯定応答を返す場合を「レスポンス(RES)」とし、その際のPIDは「0xFF」になります(図6)。
測定/キャリブレーションに関する同期的なデータのやりとり以外は、すべてマスターからのコマンドによって行われ、その肯定応答をスレーブが返すことになります。
ここで、マスターからスレーブのCAN IDを「1」、スレーブからマスターのCAN IDを「2」としてXCP on CANを使用した場合を例に挙げて説明します。
この場合、XCPの通信は以下のような順で行われます。
- マスターがCAN IDの「1」で最初の1バイト目に「0xFF」を、2バイト目に「コマンドパラメータ」を指定して送信
- スレーブが1番を受信し、PIDでコマンドを検知
- スレーブがCAN IDの「2」で最初の1バイト目に「0xFF」、2バイト目以降に「レスポンス値」を指定して送信
- マスターが3番を受信
図7は、実際に通信が行われている様子をトレースした結果です。1番の「0xFF」は、「CONNECT」というコマンドになり、これによってマスターとスレーブの論理的なコネクションを確立し、以降のコマンドを受け付けています。
Copyright © ITmedia, Inc. All Rights Reserved.