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

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

バックナンバーはこちら。
https://www.simulationroom999.com/blog/model-based-of-minimum-2-backnumber/

はじめに

前回まででXCP Basicの基本的な実装が完了したところ。
事前にCONNECT、GET_STATUS、SYNCのような非メモリアクセス系のコマンドの動作確認はしたが、
メモリアクセス系はまだやっていない。

というわけで今回からメモリアクセス系のコマンドの実験を始める。

登場人物

博識フクロウのフクさん

指差しフクロウ

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

メモリアクセス系コマンド

太郎くん
太郎くん

一応、前回でメモリアクセス可能な改造はできたから、
早速動作確認だね。

フクさん
フクさん

そうだね。

太郎くん
太郎くん

んで、メモリアクセス系コマンドと言うと何があるんだっけ?

フクさん
フクさん

XCP Basicで使用できるは以下だな。

  • SET_MTA
  • DOWNLOAD
  • DOWNLOAD_MAX
  • SHORT_UPLOAD
  • UPLOAD
フクさん
フクさん

これら以外にも読み出し側でDAQというのもサポートしているが、これは一旦後回しにしよう。

太郎くん
太郎くん

だいぶ以前にやった記憶だけうっすらとあるな。
確かここら辺で聞いた気がする。

フクさん
フクさん

とりあえず、非メモリアクセス系コマンドの時のように一個ずつ試していこう。

事前処理

フクさん
フクさん

各種コマンドを実施する前にPython-CANの初期化とCONNECTまで済ませておこう。

import can
bus = can.interface.Bus(bustype='vector', channel='1', bitrate=500000)
send_msg = can.Message(arbitration_id=1, extended_id=0, data=[0xFF, 0x00, ])
print('Send msg : %s' % send_msg)
bus.send( send_msg )
recv_msg = bus.recv(timeout=1)
print('Recv msg : %s' % recv_msg)
Send msg : Timestamp:        0.000000   ID: 0001 S DLC: 2 ff 00
Recv msg : Timestamp: 1635332505.098104 ID: 0002 S DLC: 8 ff 04 80 08 08 00 01 01 Channel: 1

SET_MTA

フクさん
フクさん

SET_MTAは書き込み、または読み出しのアドレスを事前に指定するコマンドだ。
今回は0番地を指定する。
以下のように発行すればOKだ。

send_msg = can.Message(arbitration_id=1, extended_id=0, data=[0xF6, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, ])
print('Send msg : %s' % send_msg)
bus.send( send_msg )
recv_msg = bus.recv(timeout=1)
print('Recv msg : %s' % recv_msg)
Send msg : Timestamp:        0.000000   ID: 0001 S DLC: 8 f6 00 00 ff 00 00 00 00
Recv msg : Timestamp: 1635334304.014865 ID: 0002 S DLC: 1 ff Channel: 1

XCP Basicのコンソール画面

-> SET_MTA addr=00000000h, addrext=FFh
<- 0xFF
太郎くん
太郎くん

応答としてはOKなのかな?

フクさん
フクさん

そうだね。
SET_MTAはXCPスレーブ側が内包しているMTA(Memory Transfer Address)を書き換えるだけのコマンドなので
この段階ではメモリの読み書きは発生しない。

太郎くん
太郎くん

とりあえず、こんな感じで1コマンドずつ試していけばOKってことだね。

まとめ

フクさん
フクさん

まとめだよ。

  • XCP Basicがサポートしているメモリアクセス系コマンドを列挙。
    • SET_MTA。
    • DOWNLOAD。
    • DOWNLOAD_MAX。
    • SHORT_UPLOAD。
    • UPLOAD。
  • Python-CAN初期化とCONNECTコマンドを発行してからSET_MTAコマンド発行。
    正常応答あり。

バックナンバーはこちら。

コメント

タイトルとURLをコピーしました