はじめに
車載プロジェクトでは自動車の電子制御ユニット(ECU)を用いる業務が大半を占めていますが、 ECUに対する診断や制御はUDS(Unified Diagnostic Services)という通信プロトコルによって定義されています。(ISO 14229規格に基づいている) 案件によってはECUと診断機でやり取りされるUDSのログを参照することもあるため この記事では通信の基本的な考え方やいくつかの関連知識を紹介させていただきます。
通信の概要(基本的な考え方)
上述の通り、UDS通信はECUと診断ツール間でのデータ交換を行うためのプロトコルです。主に以下のような機能を提供します。
- 診断セッション管理:ECUの診断セッションを開始、終了、または変更する。
- データの読み取り:ECUから特定のデータを読み取る。
- データの書き込み:ECUに特定のデータを書き込む。
- エラーコードの管理:ECUのエラーコードを読み取る、クリアする。
UDS通信は、リクエストとレスポンスの形式で行われ、診断ツールがリクエストを送信し、ECUがそれに対してレスポンスを返します。
リクエストの際は、コマンドの識別子としてSID(サービスID)を先頭に指定して送ることになります。
サービスIDの一例
| SID | 説明 |
|---|---|
| 0x10 | 診断セッション制御 |
| 0x11 | ECUリセット |
| 0x14 | データの消去 |
| 0x19 | DTC情報の読み取り |
| 0x22 | データの読み取り |
| 0x2E | データの書き込み |
| 0x31 | ルーティンコントロール |
通信の結果(ECUからの応答)
ECUからの応答には、ポジティブ応答とネガティブ応答の2種類があります。
ポジティブ応答
ポジティブ応答は、ECUがリクエストを正常に処理した場合に返される応答です。ポジティブ応答には、リクエストされたデータや処理結果が含まれます。
例:
- データの読み取りリクエストに対して、要求されたデータが返される。
- データの書き込みリクエストに対して、書き込みが成功したことが返される。
ネガティブ応答
ネガティブ応答は、ECUがリクエストを正常に処理できなかった場合に返される応答です。ネガティブ応答には、エラーコード(NRC: Negative Response Code)が含まれ、リクエストが失敗した理由を示します。
例:
- サービスがサポートされていない場合、NRC 0x11が返される。
- メッセージの長さが不正な場合、NRC 0x13が返される。
NRC(Negative Response Code)
NRCは、ECUがリクエストに対してエラーを返す際に使用されるコードです。NRCは、リクエストが成功しなかった理由を示します。
NRCコードの一例
| NRCコード | 説明 |
|---|---|
| 0x11 | Service Not Supported(サービス未サポート) 要求されたサービスID(SID)がサポートされていない |
| 0x12 | Sub-Function Not Supported(サブ機能未サポート) サブ機能がサポートされていない |
| 0x13 | Incorrect Message Length or Invalid Format メッセージ長誤りまたはフォーマット不正 |
| 0x22 | Conditions Not Correct(条件不適合) 要求された操作を行う条件が満たされていない |
| 0x31 | Request Out of Range(リクエスト範囲外) パラメータや値がECUの許容範囲を超えている |
| 0x78 | Request Correctly Received - Response Pending リクエストは正しく受信されたが、レスポンス待ち |
関連知識(DID)
DID(Data Identifier)は、ECU内の特定のデータを識別するための識別子です。
DIDを使用して、特定のデータを読み取ったり、書き込んだりすることができます。
※車載識別番号、ECUソフトウェアバージョンなど。メーカー独自の識別子もあり。
実際の送信コマンドの例としては [SID] [DID] [データ] の形式で送ることになります。
<0x22 データの読み取りの例>
送信:22 F1 90
応答:62 F1 90 12 34 ※[62]ポジティブ応答、[F1 90]DID、[12 34]DIDに対するデータ値
<0x2E データの書き込みの例>
送信:2E F1 90 56 78 ※[56 78]DIDに対するデータ値(書き込み値)
応答:6E F1 90 ※[6E]ポジティブ応答、[F1 90]DID
おわりに
UDS通信に基づいたSIDとDIDの基本的な考え方は車両メーカー問わず共通の知識となります。 ECUを取り扱う上で非常に重要な役割を果たしますので、今回の記事をご活用いただければ幸いです。 最後までお読みいただきありがとうございました。

