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

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

バックナンバーはこちら。
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分のサイズが無条件に書き込みサイズになる。

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

コメント

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