【XCP】最小構成のMBD事例 第2章 その227【CAN-FD④】

【XCP】最小構成のMBD事例 第2章 その227【CAN-FD④】 事例
【XCP】最小構成のMBD事例 第2章 その227【CAN-FD④】

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

はじめに

前回はAUTOSAR-XCPのCanIfに相当するCAN-FD対応修正部分の変更について。
実際にはすでにCAN-FD対応済みになっていたので、
CAN-FDならではの部分を説明した。

まだXCPに関連する部分の修正が残っているので、この部分を修正&確認する。

登場人物

博識フクロウのフクさん

指差しフクロウ

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

AUTOSAR-XCPのパケット長変更

太郎くん
太郎くん

前回のでAUTOSAR-XCPのCAN-FD対応はOKなか。

フクさん
フクさん

いや、まだパケット長の調整が残ってる。

太郎くん
太郎くん

そういえば、MAX_CTOとかMAX_DTOがどうのとか言ってたね。

太郎くん
太郎くん

MAX_CTOとMAX_DTOって何だっけ?

フクさん
フクさん

すでに何回か説明してる気はするが・・・。

MAX_CTOとMAX_DTO

フクさん
フクさん

まず、CTOとDTOを復習しよう。
と言っても、ここで説明してるんだけどね。

太郎くん
太郎くん

そういや、Command Transfer ObjectData Transfer Objectってのがあったね。

フクさん
フクさん

で、これらのObjectだが、論理上の最大値物理層都合の最大値がある。

太郎くん
太郎くん

論理上?物理都合?

フクさん
フクさん

まず論理上の最大値
CTOが255byteDTOが65535byteってことになっている。

太郎くん
太郎くん

あー、物理層のことは一旦無視して、XCPというプロトコルとしたの最大値ってことね。

フクさん
フクさん

そして物理層都合の最大値だが、
CANの場合CTO,DTOともに8byteになる。

太郎くん
太郎くん

それはCANのデータフィールドの最大値が8byteだからってことか。

フクさん
フクさん

そうそう。
で、CAN-FDのデータフィールドの最大は64byteなわけだが、
論理上の最大値を加味した際の適切なMAX_CTOとMAX_DTOは何になるだろうか?

太郎くん
太郎くん

えーっと、
CAN-FDのデータフィールドは64byte
CTOでもDTOでも論理上の最大値より小さいから、
物理層をCAN-FDとした場合の妥当なMAX_CTOとMAX_DTOは共に64byteってことになるのか。

フクさん
フクさん

正解だ。

MAX_CTOとMAX_DTOはどこで修正するのか?

フクさん
フクさん

で、そのMAX_CTOとMAX_DTOを書き換えるわけだが、
該当する修正箇所はXcp_cfg.hの中にある、
MAX_CTOとMAX_DTOになる。

太郎くん
太郎くん

あー、define定義されてたやつだね。

フクさん
フクさん

現状では8byteになっているはずだから、これを64byteにすればOK。

太郎くん
太郎くん

それだけか?!

フクさん
フクさん

それだけ。

太郎くん
太郎くん

じゃ、修正してしまおう。

フクさん
フクさん

念のためCANFD_SUPPORTで#ifdefして切り分けるようにしておこう。

元々のコード

/*
XCP_MAX_DTO : [Default:CAN = 8, IP = 255]
XCP_MAX_CTO : [Default:CAN = 8, IP = 255]
Define the maximum size of a data / control packet.This will also
directly affect memory consumptions for XCP since the code will
always allocate XCP_MAX_DTO * XCP_MAX_RXTX_QUEUE bytes for
data buffers.
*/
#define XCP_MAX_DTO	8
#define XCP_MAX_CTO 8

↓修正

/*
XCP_MAX_DTO : [Default:CAN = 8, IP = 255]
XCP_MAX_CTO : [Default:CAN = 8, IP = 255]
Define the maximum size of a data / control packet.This will also
directly affect memory consumptions for XCP since the code will
always allocate XCP_MAX_DTO * XCP_MAX_RXTX_QUEUE bytes for
data buffers.
*/
#ifdef CANFD_SUPPORT
	#define XCP_MAX_DTO	64
	#define XCP_MAX_CTO 64
#else
	#define XCP_MAX_DTO	8
	#define XCP_MAX_CTO 8
#endif

#endif /* XCP_CFG_H_ */
太郎くん
太郎くん

XCP側の修正はこれだけOKっぽいかな。

まとめ

フクさん
フクさん

まとめだよ。

  • AUTOSAR-XCPのパケット長変更を実施。
    • MAX_CTOとMAX_DTOを8から64に変更すればOK。
    • CTO、DTOについては過去記事で復習。
  • 念のためCANFD_SUPPORTで#ifdefで切り分けられるようにしておく。

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

コメント

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