CAN

事例

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

START_STOP_SYNCHコマンドを投げて見た。 並行してcan.loggerでCAN回線モニタを実施。 DAQパケットの計測ができた。 タイムスタンプ有効設定をしていたため先頭の方にタイムスタンプが埋まっている。 タイムスタンプの後ろから計測データが続く。 今回は0値が取得されている。
事例

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

DAQの開始方法は大きく2パターン。 DAQ list毎に個別開始。 開始可能状態にして複数のDAQ listを同時開始。 今回は後者で実施。 START_STOP_DAQ_LISTコマンドで個別開始/停止と開始可能状態の設定できる。 これでDAQの開始条件は揃った状態となる。
事例

【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となる。