CAN-FD
ISO 15765-2、[ 1 ]またはISO-TP (トランスポート層)は、CAN バス上でデータパケットを送信するための国際標準です。[ 2 ]このプロトコルは、CANフレームの最大ペイロードである 8 バイトを超えるメッセージの転送を許可しています。ISO-TP は長いメッセージを複数のフレームに分割し、メタデータ (CAN-TP ヘッダー) を追加します。メタデータにより、受信側は個々のフレームを解釈し、完全なメッセージパケットに再構成することができます。2016 バージョン以降では、メッセージパケットごとに最大 2 32 -1 (4294967295) バイトのペイロードを伝送できます。[ 2 ]以前のバージョンでは、最大ペイロードサイズは 4095 バイトに制限されていました。
OSI モデルでは、ISO-TP はレイヤー 3 (ネットワーク層) とレイヤー 4 (トランスポート層) をカバーします。
ISO-TP の最も一般的な用途は、KWP2000およびUDSを使用してOBD-II搭載車両との診断メッセージを転送することですが、CAN プロトコルの物理層で許可されている長さ (CAN の場合は 8 バイト、CAN FD の場合は 64 バイト、CAN-XL の場合は 2048 バイト) よりも長いメッセージを送信する必要がある場合がある、他のアプリケーション固有の CAN 実装でも広く使用されています。
ISO-TPは、いわゆる拡張アドレッシングと呼ばれる独自のアドレッシング方式、またはCAN IDのみを使用するアドレス指定なし(いわゆる通常アドレッシング)で動作可能です。拡張アドレッシングでは、各フレームの最初のデータバイトをアドレスの追加要素として使用し、アプリケーションペイロードを1バイト削減します。分かりやすくするために、以下のプロトコル説明は8バイトのCANフレームを使用した通常アドレッシングに基づいています。ISO 15765-2プロトコルでは、合計6種類のアドレッシング方式が認められています。
ISO-TPは、8バイトのCANフレームのペイロードデータに1バイト以上のメタデータバイトを付加することで、ペイロードをフレームあたり7バイト以下に削減します。このメタデータはプロトコル制御情報(PCI)と呼ばれます。PCIは1バイト、2バイト、または3バイトです。最初のフィールドはフレームタイプを示す4ビットで、PCIの長さを暗黙的に示します。
ISO 15765-2 は、ISO 15765 (「道路車両 - コントローラ エリア ネットワーク (DoCAN) 経由の診断通信」という見出し)の一部であり、次の部分があります。
- ISO 15765-1 パート1: 一般情報およびユースケースの定義
- ISO 15765-2 パート2: トランスポートプロトコルおよびネットワーク層サービス
- ISO 15765-3 パート3: 統合診断サービスの実装 (UDS on CAN) – ISO 14229-3 道路車両 - 統合診断サービスに置き換えられました
- ISO 15765-4 パート4:排出関連システムの要件
プロトコル制御情報 (PCI) フィールド タイプのリスト
ISO-TP は 4 つのフレーム タイプを定義します。
| タイプ | PCIコード | 説明 |
|---|---|---|
| シングルフレーム(SF) | 0 | 転送される1つのフレームには、最大7バイト(通常アドレス指定)または6バイト(拡張アドレス指定)の完全なペイロードが含まれます |
| 最初のフレーム (FF) | 1 | マルチフレームパケットの最初のフレーム。6/7バイトを超えるデータバイトを通信する場合に使用されます。最初のフレームには、パケット全体の長さと最初のデータが含まれます |
| 連続フレーム(CF) | 2 | マルチフレームパケットの後続データを含むフレーム |
| フロー制御フレーム(FC) | 3 | 受信側からの応答。マルチフレームパケットの開始を確認します。連続するフレームのペースを管理するために使用されます |
| バイト0 | バイト1 | バイト2 | バイト3 | バイト4 | バイト5 | バイト6 | バイト7 | ||
|---|---|---|---|---|---|---|---|---|---|
| 上位ニブル | 下位ニブル | フルバイト(0x00-0xFF) | フルバイト(0x00-0xFF) | フルバイト(0x00-0xFF) | " | " | " | " | |
| シングル | 0x0 | 長さ (0x0..0x7) | データA | データB | データC | … | … | … | … |
| 最初 | 0x1 | 長さ (0x008..0xFFF) | データA | データB | … | … | … | … | |
| 連続 | 0x2 | インデックス (0x0..0xF) | データA | データB | データC | … | … | … | … |
| フロー制御 | 0x3 | FCフラグ (0x0,0x1,0x2) | ブロックサイズ | STmin | … | … | … | … | … |
7バイト以下のメッセージが1つのフレームで送信され、最初のバイトにはタイプ(0)とペイロード長(1~7バイト)が含まれます。タイプフィールドに0が含まれているため、これは長さデータ形式を持つより単純なプロトコルとして解釈されることもあり、しばしば誤解されます
7バイトを超えるメッセージは、メッセージパケットを複数のフレームに分割する必要があります。セグメント化された転送は、最初のフレームから始まります。この場合、PCIは2バイトで、最初の4ビットフィールドがタイプ(タイプ1)、次の12ビットがメッセージ長(タイプバイトと長さバイトを除く)です。受信側はフロー制御フレームで転送を確認します。フロー制御フレームには、後続のフレーム間の間隔と、連続して送信できるフレーム数(ブロックサイズ)を指定する3つのPCIバイトが含まれます。
CAN FD では、ISO 15765-2 プロトコルがシングル フレームとファースト フレームに対して拡張され、より大きなサイズの値が許可されていますが、従来の ISO 15765 との下位互換性は維持されています。CAN FD を参照してください。
| バイト0 | バイト1 | バイト2 | バイト3 | バイト4 | バイト5 | バイト6 | バイト7 | ||
|---|---|---|---|---|---|---|---|---|---|
| 上位ニブル | 下位ニブル | フルバイト(0x00-0xFF) | フルバイト(0x00-0xFF) | パディング | " | " | " | " | |
| 説明 | フローステータス | ブロックサイズ | 分離時間(ST)、フレーム間の最小遅延時間(1つのフレームの終了から次のフレームの開始まで) | ||||||
| シングル | 0x3 | 0 = 送信継続1 = 待機2 = オーバーフロー/中止 | 0 = フロー制御や遅延なしで送信される残りの「フレーム」 | <= 127 (0x00 ~ 0x7F)、分離時間(ミリ秒)。 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 |
| シングル | 0x3 | 0 = 送信継続1 = 待機2 = オーバーフロー/中止 | > 0 次のフロー制御フレームを待つ前に「フレーム」の数を送信します | 0xF1~0xF9 UF(100~900μs)。 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 |
| メッセージ方向 | フレームタイプ | データバイト(16進形式) | 通訳 |
|---|---|---|---|
| 送信中 | フレーム1 | 10 0F 11 22 33 44 55 66 | PCIコード = 0x1、メッセージ全体の長さ = 0x00F、データの最初の6バイト |
| 受信 | フロー制御 | 30 00 00 00 00 00 00 00 | PCIコード = 0x3、0x0 = 継続、遅延なし、パディング |
| 送信中 | フレーム2 | 21 77 88 99 AA BB CC DD | PCIコード = 0x2、メッセージインデックス = 0x1、次の7バイトのデータ |
| 送信中 | フレーム3 | 22 EE FF | PCIコード = 0x2、メッセージインデックス = 0x2、最後の2バイトのデータ |
最初のバイトには、最初の 4 ビットにタイプ (タイプ = 3) が含まれ、次の 4 ビットに転送が許可されているかどうかを示すフラグ (0 = 送信継続、1 = 待機、2 = オーバーフロー/中止) が含まれます。次のバイトはブロック サイズ、つまり次のフロー制御フレームを待つ前に送信できるフレームの数です。値が 0 の場合、残りのフレームはフロー制御や遅延なしで送信されます。3 番目のバイトは最小分離時間 (STmin) で、フレーム間の最小遅延時間です。127 (0x7F) までの STmin 値はフレーム間の最小遅延時間をミリ秒単位で指定し、241 (0xF1) から 249 (0xF9) の範囲の値は 100 から 900 マイクロ秒まで増加する遅延を指定します。分離時間は、1 つのフレームの終了から次のフレームの開始までの最小時間として定義されることに注意してください。堅牢な実装では、送信者がこれをフレーム繰り返しレート(フレーム開始からフレーム開始までの間隔)と誤認するフレームを受け入れるように準備しておく必要があります。たとえ慎重な実装であっても、物理層におけるビットスタッフィングのわずかな影響を考慮に入れていない可能性があります。
送信者は、メッセージの残りを連続フレーム(Consecutive Frames)を使用して送信します。各連続フレームには、4ビットのタイプ(タイプ = 2)とそれに続く4ビットのシーケンス番号を持つ1バイトのPCIが含まれます。シーケンス番号は1から始まり、送信されるフレームごとに増加します(1、2、...、F、0、1、...)。これにより、失われたフレームまたは破棄されたフレームを検出できます。各連続フレームは0から始まり、最初のフレームの最初のデータセットは0番目のデータと見なされます。したがって、最初のCF(連続フレーム)セットは0x1から始まります。その後、0x2Fに達すると、0x20から始まります(例:0x21、0x22、0x23...0x2F、0x20、0x21...)。 12 ビットの長さフィールド (最初のフレームで示される) では、セグメント化されたメッセージで最大 4095 バイトのユーザー データが許可されますが、実際には、受信バッファまたはハードウェアの制限により、一般的なアプリケーション固有の制限は大幅に低くなります。
タイミングパラメータ
P1タイマーやP2タイマーなどのタイミングパラメータについて言及する必要があります
標準
ISO 15765-2:2016 道路車両 - コントローラエリアネットワーク(DoCAN)を介した診断通信 - パート2:トランスポートプロトコルおよびネットワーク層サービス
その他の参考資料
- https://netcult.ch/elmue/HUD%20ECU%20Hacker/ISO%2015765-2.pdf
- https://www.cheapbills.com.au/blog/iso-tp-iso-15765-2-explained
参考文献
- ^ 「ISO 15765-2:2016」ISO。2019年4月5日閲覧
- ^ a b「ISO 15765-2 (ISO-TP) — Linuxカーネルドキュメント」 . docs.kernel.org . 2025年9月12日閲覧。