バックナンバーはこちら
https://www.simulationroom999.com/blog/model-based-of-minimum-backnumber/
はじめに
今回はASAM XCPのCTOパケットのCMDについての話。
CMDによるメモリの読み書きの話。
その時に必要となる概念。
メモリダンプに向いたCMD。
リアルタイムモニタに向いたCMD。
などなど。
登場人物
博識フクロウのフクさん

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

そろそろ具体的な中身に話になるよ。

まだ、フレーム構成の話しかしていないもんね。
フレーム構成だけで2回も使うとは。

まぁフレーム構成にバリエーションがあるのってあんまり無いもんね。
今回は実際のCMD (Command Packet)の話なんで、
XCPが何ができるのかがちょっと分かると思うよ。

(ちょっと?まぁおとなしく聞いてみよう・・・)

全てでは無いが、主要なCMDをリスト化すると以下があるよ。
Command | PID | 説明 |
---|---|---|
CONNECT | 0xFF | セッション確立 |
DISCONNECT セッション破棄 | 0xFE | セッション破棄 |
GET_STATUS | 0xFD | 状態取得(DAQ動作中等の確認) |
SYNCH | 0xFC | エラーハンドリング時の同期用 |
SET_MTA | 0xF6 | MTA(MemoryTransferAddress)の設定 |
UPLOAD | 0xF5 | MTAで指定したメモリ領域の取得 |
SHORT_UPLOAD | 0xF4 | アドレス指定&メモリ領域取得 |
DOWNLOAD | 0xF0 | MTAで指定したメモリ領域へ書き込み |
SHORT_DOWNLOAD | 0xED | アドレス指定&メモリ領域書き込み |
SET_DAQ_PTR | 0xE2 | DAQポインタの設定 |
WRITE_DAQ | 0xE1 | DAQポインタへの書き込み |
SET_DAQ_LIST_MODE | 0xE0 | DAQリストとEventChannelの紐づけ |
START_STOP_DAQ_LIST | 0xDE | DAQリストの送出開始/停止/同期開始の選択 |
START_STOP_SYNCH | 0xDD | DAQリスト同期開始/同期停止 |
FREE_DAQ | 0xD6 | DAQリストの解放 |
ALLOC_DAQ | 0xD6 | DAQリストの確保 |
ALLOC_ODT | 0xD5 | DAQリストにぶら下げるODTの確保 |
ALLOC_ODT_ENTRY | 0xD3 | ODTにぶら下げるODT entryの確保 |

MTAって何?

C言語のポインタみたいな概念だね。
アドレス指定出来て、しかもUPLOADやDOWNLOADを実施すると勝手にサイズ分インクリメントされる。

“*p++”みたいな感じ?

そうだね。
勝手にインクリメントしてくれるんでメモリダンプのようなことが効率的にできる。

似たような感じでSHORT_UPLOAD、SHORT_DOWNLOADってのがあるけど、これの存在意義は?

こっちは、事前にSET_MTA無しで一回のCMDで読み書きできる。
リアルタイムモニタに有効なCMDだね。

なるほど。
UPLOADで同じアドレスを参照しようとすると、
毎回SET_MTAを発行するから効率が悪くなるのか。

あとはDAQ関係がさっぱりだなぁ。
DAQリスト

これを理解するにはDAQリストの概念を理解する必要がある。

うん。なんか避けて通れない感は半端ない。

なんとなく察したかもしれないけど、
DAQリストは階層構造になっている。

うん。
CMDの説明を見た感じだと
DAQリスト→ODT→ODTentryって関係になってるよね。

そのとおり。
DAQリストが一つのイベントに紐づいたデータの集合体。
ODTがDAQリストを複数のフレームに分割する際の1フレーム分の定義。
ODTentryが実際のデータのアドレスやサイズの情報になる。
絵に描くとこんなん。


で、このデータの塊はどういう使い方をするの?

それは次回かな。

ってことは、
そこそこのボリュームがあるのか・・・。
まとめ

まとめだよ。
- CMDだけでメモリの読み書きはできる。
- その場合、MTAという概念が重要になる。
- メモリダンプに向いたUPLOAD、DOWNLOAD。
- リアルタイムモニタに向いたSHORT_UPLOAD、SHORT_DOWNLOAD。
バックナンバーはこちら
コメント