バックナンバーはこちら。
https://www.simulationroom999.com/blog/model-based-of-minimum-2-backnumber/
はじめに
前回はUPLOADコマンドをやるかと見せ家変えてSHORT_UPLOADコマンドを実施。
SHORT_UPLOADの特殊な効果を確認するためあえて順番を入れ替えた。
というわけで今回はUPLOADコマンドを試すことになるが、
その時にSHORT_UPLOADの特殊な効果が見れる・・・はず。
登場人物
博識フクロウのフクさん

イラスト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
UPLOADコマンドの前のSET_MTA

なんか順番が入れ替わった感じになった気もするけど、
次こそはUPLOADコマンドだね。

そうね。

アドレス4から7byte分に対してDOWNLOAD_MAXで書き込んでるから
これをUPLOADで
0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB
が、読み出せればOKって感じか。

うん。
それでDOWNLOAD_MAXとUPLOADの両コマンドが正しい挙動をしている確認となるね。

じゃー、アドレス4にMTAを・・・。

SET_MTAはいらないよ。

移動させるために・・・。

SET_MTAはいらないよ。

SET_MTAを送信・・・。

だから要らないんだってば!!

要らねぇのかよ!!!!
なぜSET_MTAが不要なのか?

で、なんでSET_MTAが要らないの?
いまMTAがどこ参照してるかわからないよ?

前回SHORT_UPLOADでアドレス0を指定してサイズ4で読み出したじゃん?

そうね。

SHORT_UPLOADでアドレス0を指定した段階でMTAの参照アドレスも0になって、
4byte読み出しであったことで4byte分参照アドレスが後方へ移動して
現在のMTAはアドレス4を参照している状態になってる。

ほう!
SHORT_UPLOADでもMTAの参照アドレスが変わるのか!!

これが、前回から言ってたSHORT_UPLOADの特殊な効果ってやつか。

そうそう。
今回はアドレス4から7byte読み出しをするわけだけど、
すでにMTAはアドレス4にあるんで、SET_MTAを発行せずにそのままUPLOADコマンドを発行すればOKだ。

意外と便利な仕様になってるもんだねー。
UPLOADコマンドの発行

で、アドレス4からサイズ7byteの読み出しの電文は?

これだね。
0xF5, 0x07

随分短いね。
まぁコマンドIDとサイズだけだからそうなるのか。
じゃー、それを送ってみよう。
send_msg = can.Message(arbitration_id=1, extended_id=0, data=[0xF5, 0x07, ])
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 f5 07
Recv msg : Timestamp: 1635334304.114905 ID: 0002 S DLC: 8 ff 55 66 77 88 99 aa bb Channel: 1
XCP Basicのコンソール画面
-> UPLOAD size=7
<- 0xFF data=55 66 77 88 99 AA BB

おー!
ちゃんとDOWNLOAD_MAXで書き込んだデータが返ってきた!

この仕様を利用して、
SHORT_UPLOAD→UPLOAD×n回
みたいなことをして効率的なメモリダンプが出来たりするね。

なるほど。
メモリダンプか。
確かにこういう仕様の方が便利そうだね。

これで、メモリアクセス系コマンドは問題無く使えることがわかった。
XCPコマンドのログ

XCPのメモリアクセス系のログはJupyterNotebook形式でログを取ってある。
実際に動作させて実験したい人は使ってみると良いだろう。
まとめ

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