モデルベース開発

事例

【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分のサイズが無条件に書き込みサイズになる。