バックナンバーはこちら。
https://www.simulationroom999.com/blog/model-based-of-minimum-2-backnumber/
はじめに
前回からXCP Basicのメモリアクセス系コマンドの動作確認を開始した。
まずはSET_MTAを実施したところ。
残りは以下。
- DOWNLOAD
- DOWNLOAD_MAX
- SHORT_UPLOAD
- 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
DOWNLOAD

次はDOWNLOADコマンドかな。

そうだね。
前回SET_MTAでアドレス0を参照するようにMTA(Memory Transfer Address)に設定さているので、
そのままDOWNLOADコマンドを発行するとアドレス0に書き込みが実施される。

とりあえず、サイズは4byteで 0x11, 0x22, 0x33, 0x44を書き込みしようか。

だったら電文は
0xF0, 0x04, 0x11, 0x22, 0x33, 0x44
になる。

じゃ、それを送ってみよう。
send_msg = can.Message(arbitration_id=1, extended_id=0, data=[0xF0, 0x04, 0x11, 0x22, 0x33, 0x44, ])
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: 6 f0 04 11 22 33 44
Recv msg : Timestamp: 1635334304.034992 ID: 0002 S DLC: 1 ff Channel: 1
XCP Basicのコンソール画面
-> DOWNLOAD size=4, data=11 22 33 44
<- 0xFF

正常応答が返って来たね。
コマンドとしてはOKってことかな?

そうだね。
実際に書かれたかどうかに関しては、後でUPLOAD系コマンドで読み出す時に比較してみよう。
DOWNLOAD_MAX

次はDOWNLOAD_MAXだね。

これも事前にSET_MTAでMTAの参照アドレスを移動させる必要があるのかな?

連続でリニアなアドレスに書き込む場合はSET_MTAは不要だよ。
さっきのDOWNLOADコマンドで4byte書き込みをしたので、
MTAはアドレス0から4byte分進んで現在はアドレス4を参照している状態になってるはずだ。

ほう!
なんかC言語のポインタのインクリメントさせたような動きをするのか!

まさにポインタ的な発想がそのまま仕様になった感じだね。

DOWNLOAD_MAXはMAX_CTOというコマンド長最大値から1引いた数が無条件に書き込みデータ長になる。
今回の場合、MAX_CTOは8になっているので、無条件に7byteの書き込みになる。

だったらさっきのデータの続きで
0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB
を書いてみようか。

そうなると電文としてはこれになるね。
0xEE, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB

コマンドIDの0xEEが先頭に付くだけなのね。
じゃ、送ってみるよー。
send_msg = can.Message(arbitration_id=1, extended_id=0, data=[0xEE, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, ])
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 ee 55 66 77 88 99 aa bb
Recv msg : Timestamp: 1635334304.055710 ID: 0002 S DLC: 1 ff Channel: 1
XCP Basicのコンソール画面
DOWNLOAD_MAX data=55 66 77 88 99 AA BB
<- 0xFF

うん。
正常応答だ。
これも後で読み出す時に比較して確認だね。
まとめ

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