Unified Diagnostic Services(UDS)はISO 14229-1で定められるカーエレクトロニクス内のECU環境における診断通信プロトコル。ISO 14230-3(KWP2000)および現在廃止されているISO 15765-3(DoCAN)に基づく。この文脈で統一されるということは、国際規格であり、企業固有の規格ではないことを意味する。今では、この通信プロトコルは、OEMのティア1サプライヤによって製造されたすべての新しいECUで使用されていて、AUTOSARなどの他の規格に組み込まれている。最新の車両のECUは、電子燃料噴射(EFI)、エンジン制御、トランスミッション、アンチロック・ブレーキ・システム(ABS)、ドアロック、ブレーキ、窓操作などを含むほぼすべての機能を制御する。

診断ツールは、UDSサービスが有効になっている車両に取り付けられているすべてのECUに接続できる。OSIモデルの第1層および第2層のみを使用するCANバスプロトコルとは対照的に、UDSはOSIモデルの第5層および第7層を利用する。サービスID(SID)とサービスに関連するパラメーターは、メッセージフレームの8データバイトに含まれている。

最近の自動車は、車外診断用の診断インターフェースを有しており、これは、テスターと呼ばれるコンピュータまたは診断ツールを自動車の通信システムに接続することを可能にする。したがって、UDS要求は、応答(ポジティブまたはネガティブ)を提供する必要があるコントローラに送信できる。これにより、個々のECUのメモリー障害を調べたり、それらを新しいファームウェアに更新したり、ハードウェアと低レベルで相互作用したり(例:特定の出力をオンまたはオフにするなど)、特別な機能(ルーチン)を利用して、ECUの環境と動作条件を理解し、障害やその他の望ましくない動作を診断したりすることができる。

## サービス

- SID (Service Identifier)
- DID (Data Identifier)
- $xx は16進数 xx を表す。

| 機能グループ | 要求   SID | 応答   SID | サービス | 説明 |
| --- | --- | --- | --- | --- |
| 診断と通信の管理 | $10 | $50 | Diagnostic Session Control | UDSは異なるオペレーティングセッションを使用するが、これは "Diagnostic Session Control" を使用して変更できる。どのセッションがアクティブかによって、異なるサービスを利用できる。起動時には、ECUはデフォルトで「デフォルトセッション」になる。他のセッションも定義されているが、デバイスの種類によっては実装する必要はない。  - 「プログラミングセッション」はソフトをリプログラミング(UDS経由で不揮発メモリを書き換え)するために使用する。 - 「拡張診断セッション」は、センサーの調整など、追加の診断機能のロックを解除するために使用する。 - 「安全システム診断セッション」は、エアバッグテストなど、安全上重要なすべての診断機能をテストするために使用する。   さらに、完成車メーカーおよび自動車サプライヤーの特定用途のために定義することができる予約されたセッション識別子がある。 |
| $11 | $51 | ECU Reset | サービス「ECU Reset」は、ECUを再起動するために使用される。ECUのハードウェアと実装に応じて、異なる形式のリセットを使用できる:  - 「Hard Reset」は、電源のシャットダウンをシミュレートする。 - 「key off on Reset」は、ドレインをシミュレートし、キーでイグニッションをオンにする。 - 「Soft Reset」は、特定のプログラムユニットとそのストレージ構造を初期化できる。   繰り返すが、車両メーカーと車両サプライヤの特定の用途のために定義できる予約値がある。 |
| $27 | $67 | Security Access | セキュリティチェックは最もセキュリティが重要なサービスを有効にするために利用できる。この目的のために、ECUは「シード」を生成してクライアントに送信する。この「シード」から、クライアントは「キー」を計算し、それをECUに送り返してセキュリティが重要なサービスのロックを解除する必要がある。 |
| $28 | $68 | Communication Control | このサービスでは、メッセージの送受信をコントロールユニットでオフにすることができる。 |
| $29 | $69 | Authentication | 規格の更新(2020)により、このサービスが追加され、PKIベースの証明書交換による双方向認証など、セキュリティアクセス(0x27)サービスで許可されているよりも新しい認証方法への標準化されたアプローチが提供される。 |
| $3E | $7E | Tester Present | 長時間クライアントと通信がない場合、ECUは自動的に現在のセッションを終了して「デフォルトセッション」に戻り、さらにスリープモードに入る可能性がある。そのため、クライアントがまだ存在していることをデバイスに知らせるために "Tester Present" を送信する。 |
| $83 | $C3 | Access Timing Parameters | コントローラとクライアント間の通信では、特定の時間を監視する必要がある。これらの値を超えると、メッセージが送信されずに、接続が中断されたと見なされる。これらの時間は呼び出して変更できる。 |
| $84 | $C4 | Secured Data Transmission |  |
| $85 | $C5 | Control DTC Settings | 一部またはすべてのエラーの検出を有効または無効にする。これは、車両内で診断作業を行う場合に重要であり、個々のデバイスの異常動作を引き起こす可能性がある。 |
| $86 | $C6 | Response On Event |  |
| $87 | $C7 | Link Control | 診断アクセスのボーレートを設定するには、Service Link Controlを使用する。通常は中央ゲートウェイでのみ実装される。 |
| データ転送 | $22 | $62 | Read Data By Identifier | このサービスでは、ECUの1つ以上の値を検索することができる。これは、部品番号やソフトウェアバージョンなど、あらゆる種類の情報や長さの異なる情報を引き出せる。センサーの現在の状態などの動的な値を照会できる。各値は、0〜65535($0〜$FFFF)のDID(Data Identifier)が割り当てられている。通常のCAN信号は、いくつかのECUがその機能で使用する情報を送受信する。一方、DIDデータは要求があったときの応答としてのみ送信される。ECUが使用する情報ではないが、サービスツールやソフトウェアテスターが恩恵を受ける。 |
| $23 | $63 | Read Memory By Address | 指定されたアドレスの物理メモリからデータを読み取る。この関数は、ソフトウェアの内部動作を読み取るために、テストツールで使用できる。 |  |
| $24 | $64 | Read Scaling Data By Identifier |  |
| $2A | $6A | Read Data By Identifier Periodic | このサービスでは、ECUから値が定期的に送信される。送信する値は、「Dynamically Define Data Identifier」のみを使用して定義する必要がある。 |
| $2C | $6C | Dynamically Define Data Identifier | このサービスでは、データID(DID)プールを修正して別のDIDを設定する可能性を提供する。これは通常、異なるDIDの部分の組み合わせ、または単に完全なDIDの連結となる。 要求されたデータは、次の方法で構成またはグループ化できる。   - ソースDID、位置、長さ(バイト単位)、サブファンクションバイト:defineByIdentifier - メモリアドレス長(バイト単位)、サブファンクションバイト:defineByMemoryAddress - 複数の要求による上記2つのメソッドの組み合わせ。 |
| $2E | $6E | Write Data By Identifier | 同じデータID(DID)を使用して、値を変更することもできる。DIDに続けて更新値を一緒に送信する。 |
| $3D | $7D | Write Memory By Address | 「Write Memory By Address」サービスにより、外部診断ツールは、1つまたは複数の連続したメモリ位置でECUに情報を書き込むことができる。 |
| 格納データ転送 | $14 | $54 | Clear Diagnostic Information | 保存されているすべてのDTCを削除する。 |
| $19 | $59 | Read DTC Information | DTC は "Diagnostic Trouble Codes" の略。ECU障害によってハンドルされた各DTCは、エラーメモリにそれ自身のコードと共に保存され、いつでも読み取ることができる。エラーに加えて、追加情報も保存され、これも読み取ることができる。 |
| I/O コントロール | $2F | $6F | Input Output Control By Identifier | このサービスでは、診断インターフェイスを介した内部/外部信号に対する外部システムの介入が可能です。 いわゆるオプション・バイトを指定することで、要求の追加条件を指定できる。次の値が指定される。  ReturnControlToECU:デバイスは、指定された信号の制御を取り戻す必要がある。  ResetToDefault:システム全体のデフォルト値へのリセットを促す。  現在の状態をフリーズ:デバイスは現在の信号値をフリーズする必要がある。  ShortTermAdjustment:デバイスは、信号に指定された値を使用する必要がある。 |
| ルーチンのリモート起動 | $31 | $71 | Routine Control | すべての種類のコントロールサービスルーチンサービスを実行できる。3つの異なるメッセージタイプがある:  - startメッセージを使用して、サービスを開始できる。実行の開始を確認したり、サービスが完了したときに通知するように定義できる。 - Stopメッセージを使用すると、実行中のサービスをいつでも中断できる。 - requestRoutineResultsメッセージは、サービスの結果を照会する。   startおよびstopメッセージパラメーターを指定できる。これにより、あらゆるプロジェクト固有のサービスを実装できる。 |
| アップロード・ダウンロード | $34 | $74 | Request Download | 新しいソフトウェアやその他のデータをコントロールユニットにダウンロードするには、「ダウンロードのリクエスト」を使用する。ここでは、データの位置とサイズを指定する。次に、コントローラは、データパケットのサイズを指定する。 |
| $35 | $75 | Request Upload | サービス「要求アップロード」は、サービス「ダウンロードのリクエスト」とほとんど同じでする。本サービスでは、コントロールユニットからのソフトウェアをテスタに転送する。場所とサイズを指定する必要がある。この場合も、データブロックのサイズはテスタによって指定される。 |
| $36 | $76 | Transfer Data | 実際のデータの送信には、サービス"Transfer Data"データの転送」が使用される。このサービスは、データのアップロードとダウンロードの両方に使用される。転送の指示は、あらかじめサービス"Download Request"または"Request Upload"から通知される。このサービスは、以前のサービスで指定された最大長でパケットを送信する。データセットが最大値より大きい場合は、"Transfer Data"「データの転送」サービスを数回続けて使用する必要がある。 |
| $37 | $77 | Request Transfer Exit | "Transfer Exit"サービスを利用すると、データ伝送を'completed' することができる。本サービスは、コントロールユニットとテスタの比較に使用する。制御ユニットは、動作中に、この要求に対して否定的に応答してデータ転送要求を停止することができる。これは、データ量(「リクエストのアップロード」または「ダウンロードのリクエスト」に設定)が転送されていない場合に使用される。 |
| $38 | $78 | Request File Transfer | このサービスは、クライアントからサーバーへのファイルのダウンロード、またはサーバーからクライアントへのアップロードを開始するために使用される。このサービスでは、ファイルシステムに関する追加情報を利用できる。 |
|  |  | $7F | Negative Response | この応答は、サービス要求を実行できなかった場合に与えられる。(例えば、サポートしていないDIDがある等。)実行できなかった SID と、Negative Response Code (NRC) の情報を同時に送る。 |