【CAN-FD】車両診断通信 その94【ISO-TP①】

【CAN-FD】車両診断通信 その94【ISO-TP①】 車両診断通信

バックナンバーはこちら。
https://www.simulationroom999.com/blog/diagnostic-communication-backnumber/

はじめに

can-isotpでCAN-FDのシミュレーションに向けて。
シミュレーション構成とCAN-FDになった場合のフレーム構成の変化について。

登場人物

博識フクロウのフクさん

イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1

エンジニア歴8年の太郎くん

イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1

can-isotpでCAN-FD?

フクさん
フクさん

次はISO15765-2のCAN-FD。
can-isotpが使えるはずなんだよねー。

太郎くん
太郎くん

はずって・・・。
大丈夫なの?

フクさん
フクさん

CanStackの初期化用パラメータの中に”can_fd”ってのがあるんだよねー。
これを有効にすれば行けるんじゃないかなー。

太郎くん
太郎くん

(「じゃないかなー」って、本当に大丈夫なのか?)

シミュレーション構成

フクさん
フクさん

一応、シミュレーション構成を描いておく。
ぶっちゃけるとCANの時と構成自体は一緒だね。

Python、診断リクエスト、診断レスポンス、isotp、can.logger、python-can、Virtual CAN Bus
太郎くん
太郎くん

まぁ初期化パラメータ変えるだけだもんねー。

CAN-FD版のフレーム構成

太郎くん
太郎くん

そういえば、CAN-FDってDLC最大値が64byteになるから
いろいろフレーム構成が変わるとようなこと言ってたと思うんだけど、
どうなるんだっけか?

フクさん
フクさん

あー、それを先に説明しておいた方がよいか。

フクさん
フクさん

変わるのはSingleFrameとFirstFrameだけだね。

太郎くん
太郎くん

どんな感じ?

8byte以上のSingleFrame

フクさん
フクさん

CAN-FDでも7byte以下だったらCANの時と一緒なんだけど、
8byte以上だとちょっと変わる。

太郎くん
太郎くん

ほう。

フクさん
フクさん

こんな感じになる。

N_CPI、DATA、8byte以上のSingleFrame
太郎くん
太郎くん

あ、N_PCIが大きくなってる!

太郎くん
太郎くん

なるほど。
本来のSingleFrameのLengthが入るところに0が入って場合はその後ろの1byteをLengthとして見るって感じか。

フクさん
フクさん

その通り!

太郎くん
太郎くん

ん?
このLengthが8byte未満ってことはあるのかな?

フクさん
フクさん

規格上は禁止されてるね。
このN_PCIの構成になる時は必ず、CANでは表現できない場合の構成ってことになる。

4096byte以上のマルチフレーム時のFirstFrame

フクさん
フクさん

次はFirstFrameだけど、
これは、Lengthが4096byte以上の時になる。
SingleFrameの時と同様に4095byte以下の場合は使用してはいけない構成になるね。

4096byte以上のマルチフレーム時のFirstFrame、N_PCI、DATA
太郎くん
太郎くん

これも普通のFirstFrameのLength部分に0が入っていたらその後ろの4byteがLengthってなるのか?

太郎くん
太郎くん

ん?
4byteってことは・・・。
0xFFFFFFFF=4294967295≒4Gbyte
も送れるってこと?!

フクさん
フクさん

規格上はそうだねー。

フクさん
フクさん

とはいえ、そこまで通信用のバッファを用意できることも少ないだろうから、
4Kbyteの2倍、4倍あたりの8Kbyte、16Kbyteが現実的な数値だろう。

太郎くん
太郎くん

まぁ折角拡張するんだし、大きい値が定義できる方が良いのか。

まとめ

フクさん
フクさん

まとめだよ。

  • can-isotpでもたぶんCAN-FDはできる。
  • 拡張SingleFrameと拡張FirstFrameの構成を学んだ。

バックナンバーはこちら。

コメント

タイトルとURLをコピーしました