【DoCAN】車両診断通信 その10【ISO-TP⑤】

【DoCAN】車両診断通信 その10【ISO-TP⑤】 車両診断通信
【DoCAN】車両診断通信 その10【ISO-TP⑤】

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

はじめに

車両診断通信のネットワーク層の話。
メッセージを構築するための各種フレーム詳細。

登場人物

博識フクロウのフクさん

イラスト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

各種フレーム

フクさん
フクさん

じゃ、各種フレームの詳細に行こうか。

太郎くん
太郎くん

確か、この4種類だったね。

  • SF(Single Frame)
  • FF(First Frame)
  • FC(Flow Control)
  • CF(Consecutive Frame)
フクさん
フクさん

前回も言ったけど、アドレッシングフォーマットがDataFieldまで侵食していない、
Normal fixed addressingを前提にするからね。

太郎くん
太郎くん

うん。
僕もそっちの方が理解し易いかも。

各種フレーム詳細

フクさん
フクさん

まずN_PCI(Network Protocol Control Information)と実データの切り分けだけで表現するとこんな感じ。

フレーム 1 2 3 4 5 6 7 8
SF N_PCI Data
FF N_PCI Data
FC N_PCI
CF N_PCI Data
太郎くん
太郎くん

うーん、このN_PCIがポイントなんだろうなーとは思った。

フクさん
フクさん

まぁN_PCI以外は送りたいデータそのものだからね。

SFのN_PCI

フクさん
フクさん

じゃ、各種フレームのN_PCIの説明に入ろう。
まずはSF。

SFのN_PCI

bit7-4bit3-0
0x0メッセージ長
フクさん
フクさん

ちなみにメッセージ長の最大値は7になる。

太郎くん
太郎くん

ん?bit7-4は0固定?
だったら、普通に先頭byteの1byte分は「メッセージ長」ってことで良くない?

フクさん
フクさん

実は先頭Byteのbit7-4はN_PCItypeって名前がついてて、
これでSF、FF、FC、CFを識別できる。
SFはたまたま0ってだけ。

太郎くん
太郎くん

あーそれそれ。

どうやって各種フレームを識別するのかなーって思ってたんだけど、
先頭byteのbit7-4を見て判断できるんだね。

フクさん
フクさん

そして、メッセージ長はSF_DL(Single Frame Data Length)という名前が付いている。

FFのN_PCI

フクさん
フクさん

次はFFのN_PCIだ。

FFのN_PCI

1byte目 2byte目 3byte目~
bit7-4 bit3-0 bit7-0 bit7-0
0x1 メッセージ長 Data
太郎くん
太郎くん

先頭4bitはN_PCItypeってことでいいと思うけど、
メッセージ長が12bit

フクさん
フクさん

うん。
よって、4095byteのメッセージが最大となる。

太郎くん
太郎くん

なるほど。
4095という数値を入れようと思うと12bit必要ってことになるのか。

フクさん
フクさん

FFもメッセージ長はFF_DL(First Frame Data Length)という名前が付いている。

FCのN_PCI

フクさん
フクさん

そしてFCのN_PCI。
こいつが一番ややこしい。

FCのN_PCI

1byte目 2byte目 3byte目 4byte目~
bit7-4 bit3-0 bit7-0 bit7-0 bit7-0
0x3 FS BS STmin
太郎くん
太郎くん

やたらとパラメ―タっぽいのがあるな。

フクさん
フクさん

FSFlow Status。
BSBlock Size。
STminSeparationTime minimum。

太郎くん
太郎くん

BSとSTminは前回聞いたね。
BSがCFを受信して何回目に再度FCを送るかのパラメータで、
STminが送信してもらうCFとCFの間の時間を指定するパラメータ。

フクさん
フクさん

正解。

太郎くん
太郎くん

で、FSは?

フクさん
フクさん

以下の定義になってるよ。

名称説明
0x0CTS(ContinueToSend)FCに続いてCF送信許可
0x1WAIT(Wait)再度のFC待ち指示(タイムアウトはN_Bs値)
0x2OVFLW(Overflow)受信バッファ不足。送信中止
0x3~0xf予約予約
太郎くん
太郎くん

基本はCTSなんだけど、
ちょっと待って欲しい時はWAIT
FFのFF_DLを見て、メッセージ長が想定よりも長いと判断されたらOVFLWって感じかな。

フクさん
フクさん

いいね。
なかなか感が働くね。

太郎くん
太郎くん

久々に褒められた!

太郎くん
太郎くん

ただ、N_Bsという新しいパラメータは分からないな。
文脈としてはタイムアウト値っぽいけど。

フクさん
フクさん

N_BSについては次回以降に説明するよ。
車両診断通信はタイムアウトの種類がかなりあって、N_Bsはそのなかの一つ。

太郎くん
太郎くん

かなりってことは相当数あるってことなのか・・・。

CFのN_PCI

フクさん
フクさん

最後にCFのN_PCI

CFのN_PCI

1byte目 2byte目~
bit7-4 bit3-0 bit7-0
0x2 SN Data
太郎くん
太郎くん

これはまたシンプルだね。
SNが何者か分かればOKな感じか。

フクさん
フクさん

SNSequence Numberというパラメータで、
初期値が1であとはCF送信毎にインクリメント
最大値は0xFで0xFの次は0x0に戻る。

太郎くん
太郎くん

受信漏れ検知みたいなのが目的なのかな?

フクさん
フクさん

そうだね。
SNが2だと思ってたところに3が来たら、取りこぼしているということでそのメッセージは破棄することになる。

太郎くん
太郎くん

ちなみに途中にFCは入った場合はどうなるの?

SNはリセットされるとか?

フクさん
フクさん

リセットはされない
FCの前に送ったCFのSNをインクリメントした値が次のSNになる。

各種フレーム所感

太郎くん
太郎くん

たった4種類だけど、

これを実装するとなると結構手間がかかりそうだなぁ。

フクさん
フクさん

そうだね。
メッセージの分解や結合する処理、
不正フレームの検知、
BSやSTminのハンドリング、
まだ説明してないけどタイムアウトエラーがあるね。

太郎くん
太郎くん

でも思ったよりかは明確なんでなんとかなりそうかな。

まとめ

フクさん
フクさん

まとめだよ。

  • 4種類のフレームの説明。
    • 先頭N_PCItypeがあるので、受信時に即判定ができる。
  • それぞれ固有のパラメータを持っている。
    • SF。
      • SF_DL。
    • FF。
      • FF_DL。
    • FC。
      • FS。
      • BS。
      • STmin。
    • CF。
      • SN。

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

コメント

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