【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)と実データの切り分けだけで表現するとこんな感じ。

フレーム12345678
SFN_PCIData
FFN_PCIData
FCN_PCI
CFN_PCIData
太郎くん
太郎くん

うーん、この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-4bit3-0bit7-0bit7-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-4bit3-0bit7-0bit7-0bit7-0
0x3FSBSSTmin
太郎くん
太郎くん

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

フクさん
フクさん

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-4bit3-0bit7-0
0x2SNData
太郎くん
太郎くん

これはまたシンプルだね。
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をコピーしました