バックナンバーはこちら
https://www.simulationroom999.com/blog/model-based-of-minimum-backnumber/
はじめに
今回はASAM XCPのDTOパケットの話。
DTOパケットパターンの話。
TimeStampフィールドパターンの話。
上記の組み合わせの代表構成は最小構成版と最大構成版の2パターン。
しかし、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
DTOパケット構成のバリエーション?

DTOパケット構成なんだけど、地味にバリエーションが多い。

コマンドの種類が多いってイメージ?

うんにゃ。構成が多い。

構成が多い?
構成なんだから共通なんじゃないの?

そこが共通じゃないんで厄介。
XCPの仕様で最初につまづくのかここら辺なんじゃないかなって思ってる。

なんか嫌な予感しかしない。

とりあえず、どういったバリエーションがあるか言ってくよ。

うん。

DTOパケットは大きく4パターン。
①絶対PID (1byte構成)
②相対PID_BYTE (2byte構成)
③相対PID_WORD (3byte構成)
④相対PID_WORD_ALIGNED (4byte構成)

名前から何かを全くイメージできないんですけど。

ここはDAQ、ODT(Object Descriptor Table)とODT entryの概念を把握しないと理解できないと思う。
とりあえず、たぶん今回はこれだろうと思われる④のパターンを張っておく。


なんかとんでもない前提知識が要るような気がする。。。

今回はXCPの実装をするわけではなく、
ツールに設定するのに必要な知識を得るのが目的なので、
まずは4パターンあるよってだけ覚えておいて。

そういうことならばOK!
4パターンTimeStampフィールド

そして、
TimeStampフィールドも4種類あって、
前述の4パターンとは非依存に定義されている。

え?
ってことは4×4の16パターンあるってこと?

仕様上はそうなるね。
実際は2パターンくらい収まるとは思うけど。

TimeStampフィールドのパターンは至ってシンプルで以下。
- なし
- BYTE
- WORD
- DWORD


「なし」ってパターンもあるのか。。。
そもそもTimeStampフィールドの役割ってなに?

DAQリストが複数のフレームに分かれることが、あり得るんだけど、
複数のフレームに分かれたとしても、ECU内のデータ取得タイミングは同一なんだ。
ツール側はこのTimeStampフィールドを見て、前回取得したデータの時間差や周期の判定に使う。

「なし」の場合だと、どうなるの?

ツールの仕様依存ではあるが、
たぶん、DAQリストの先頭フレームを受信したタイミングを起点にするんじゃないかな。
パターンが多い理由は?

そもそも、なんでこんな種類がいっぱいあるの?

使用する回線依存だったり、
ECUの実装難度を下げる目的だったりするかな。

たとえば、CANの場合、1フレームのデータフィールドが8byteしかない。
8byteしかない中で、データと関係ない情報が4byte以上あったらどうなる?

あー、ものすごく非効率になるのか!?

そういうこと。
Ethernetの場合は1フレームが1500byteくらいあるので、4byteや8byte使ってもそれほど影響はない。
よって、全部ありありな仕様を選択することが多い。

あー、それで2パターンに集約されるって言っていたのか。
余裕が無ければ、思いっきり削減するし、余裕があれば、全部盛り込むし。

ただ、昨今だと、CANの上位仕様のCAN-FDっての出てきて、
これがデータフィールドが最大で64byteなんだ。
64byteだとどう転ぶかはちょっと予測できなくて、
結構使われて無かった微妙なパターンが出てくるかも。

それは・・・面倒だな・・・。

まぁ今回はEthernetってことで全部ありありパターンと予測している。

ここらへんは早々に仕様をもらっておいた方がよいかな?

そうだね。
TCPとUDPのどちらを使うのかってものあるし。

ん?TCPとUDPだと何か変わるの?

大きく変わる部分としてはセッションの確立のさせかたが変るかな。
UDPだと、明示的にCONNECT、DISCONNECTというコマンドでセッション制御するが、
TCPの場合はTCPとしてのセッションを確立する。という違いがある。
まぁ絶対とは言えないけど、UDPであることの方が多いかな?
他の物理層があまりTCPっぽいのが無いし、実装形態を合わせようと思うとUDPになり易い。

ものすごく重要なことをサラッと言っているような。。。
とりあえず、即行で仕様書をもらってくるよ。
まとめ

まとめだよ。
- DTOパケットのパターンは4パターン。
- TimeStampフィールドのパターンも4パターン。
- 使用する物理層で使用できるデータ領域に依存しておおよそ2パターンに集約される。
- 最小構成版と最大構成版の2パターン。
- しかし、CAN-FDの台頭に伴い、中間のパターンが乱立する可能性あり。
バックナンバーはこちら
コメント