Python

事例

【XCP】最小構成のMBD事例 第2章 その170【XCP Basic㉔】

SET_DAQ_LIST_MODEコマンドでDAQの計測データ送信ポリシーを設定できる。TIMESTAMP有無、使用するEvent channel、分周比など。Event channelと実際の周期はECU側の実装依存。今回は1:10ms、2:100ms、3:1msとなっている。
事例

【XCP】最小構成のMBD事例 第2章 その169【XCP Basic㉓】

DAQ listの構造的な準備はできたので、実際にODT_ENTRYを更新していく。更新するODT_ENTRYを参照するにはSET_DAQ_PTRを使用する。実際にODT_ENTRYを更新するにはWRITE_DAQを使用する。WRITE_DAQ実行後は参照するODT_ENTRYは自動的に一個後ろになる。
事例

【XCP】最小構成のMBD事例 第2章 その168【XCP Basic㉒】

ALLOC_ODT_ENTRYは物理層の都合やODTのフォーマットによる制限がある。CANの場合だとデータフィールド8byteが制限。タイムスタンプ等が入ることで計測データを格納する範囲が少なくなる。ALLOC_ODT_ENTRYを複数回投げてみた。リソースが枯渇するまで生成は可能。
事例

【XCP】最小構成のMBD事例 第2章 その167【XCP Basic㉑】

ALLOC_ODTを送信してみた。ODT1個あたり4byteの管理領域のリソース割り当てがされる。試しに5個ずつODTを生成してみた。20個のODT生成時にエラー。エラー理由はメモリ不足。1ODTあたり8byteの送信バッファも必要なのでそれも含めてメモリ不足。この点含めてリソース管理が必要。
事例

【XCP】最小構成のMBD事例 第2章 その166【XCP Basic⑳】

FREE_DAQコマンドを送信。ECU内部のDAQ list構造を真っ新にするコマンド。"とりあえず"一番最初に投げらえる。ALLOC_DAQコマンドを送信。生成するDAQ listの数を指定するコマンド。XCP Basicの場合、DAQ list毎に6byte消費。
事例

【XCP】最小構成のMBD事例 第2章 その165【XCP Basic⑲】

XCPパケット送受信処理を関数化してみた。CAN送信は従来通り。CAN受信でいろいろ判定を追加タイムアウト追加。1秒タイムアウト。CANID判定追加PID判定追加。0xFE(エラー)か0xFF(正常)以外はレスポンスとして扱わない。レスポンスのタイミングでDAQパケットが来ても無視できる。
事例

【XCP】最小構成のMBD事例 第2章 その164【XCP Basic⑱】

メモリアクセス系コマンド以外のメモリアクセスとして(Data AcQuisition)がある。DAQは過去記事で数回にわたって説明しているのでそちらを参照。必要なコマンドをそこそこあるので、一個ずつ試していく。尚、XCP BasicはDynamic DAQが実装されている。Static DAQは未実装。
事例

【XCP】最小構成のMBD事例 第2章 その163【XCP Basic⑰】

なんとSHORT_UPLOAD時にMTAも更新される仕様になっていた。よって、続けて読み出す場合はSET_MTA無しでUPLOADを実施すればOK。この仕様を利用してSHROT_UPLOAD→UPLOAD×n回とすると、効率的なメモリダンプが実現できる。メモリアクセス系コマンドはこれで動作確認OKとなる。
事例

【XCP】最小構成のMBD事例 第2章 その162【XCP Basic⑯】

UPLOAD系コマンドの実験開始。UPLOADコマンドが基本形のコマンドでその派生形としてSHORT_UPLOADがあるが、SHORT_UPLOADのとある挙動を確認するためにSHORT_UPLOADから実施。SHORT_UPLOADでDOWNLOADで書き込んだ値が読めた。よって、両コマンド共に動作OKとなる。
事例

【XCP】最小構成のMBD事例 第2章 その161【XCP Basic⑮】

DOWNLOADコマンドを実施。正常応答あり。実際に書き込まれたかはUPLOAD系コマンド実験時に確認予定。DOWNLOAD_MAXコマンド実施MTAは読み書き時にそのサイズ分参照アドレスが後方にズレる。C言語のポインタ的な仕様。MAX_CTO(今回の場合は8)-1分のサイズが無条件に書き込みサイズになる。