1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[AUTOSAR] Dcm リプロ時の振る舞い

Posted at

はじめに

AUTOSARを扱う仕事に従事していて、
Dcm(Diagnostic Communication Manager)のリプログラミングの振る舞いについて、AUTOSARの仕様(4.2.2)について確認した結果を残しておく。

入力文書

AUTOSAR 4.2.2

確認したいこと

UDS SID:0x10 subfuncID:0x02でリプログラミングセッション移行をECUに要求したときの、Dcmの振る舞いはどうなるのか?
※状態を遷移して、リセットしているのはなんとなくわかっている。

確認結果

Dcmのコンフィグによって、Dcmの「DcmEcuReset」という状態が「JUMPTOBOOTLOADER」 or 「JUMPTOSYSSUPPLIERBOOTLOADER」に遷移し、それがBswMに通知される。
その後、コールアウト関数「Dcm_SetProgConditions」が成功し、リプロの条件が整ったあと、「EXECUTE」に遷移し、bootloaderにジャンプする。

bootloaderへジャンプするときにユーザが何かしたいなら、
「JUMPTOBOOTLOADER」 or 「JUMPTOSYSSUPPLIERBOOTLOADER」への遷移を掴むこと

状態定義

  • 7.4.1.4 Diagnostic mode declaration groups

Dcmは、「DcmEcuReset」という状態を持つ。
状態は、以下の7つあり、初期状態はNONE。
NONE,
HARD,
KEYONOFF,
SOFT,
JUMPTOBOOTLOADER,
JUMPTOSYSSUPPLIERBOOTLOADER,
EXECUTE
スクリーンショット 2023-02-23 18.21.28.png

7.4.4.1 Jump to Bootloader

ブートローダへのジャンプは4種類のユースケースがある。

  1. APLはPRCを即返し、bootloaderへジャンプ
  2. APLはNRC:0x78(ResponsePending)を返したあと、PRCを返し、bootloaderへジャンプ
  3. APLはレスポンスを返さず、bootloaderへジャンプ(bootloaderでPRCを返す)
  4. APLはNRC:0x78(ResponsePending)を返したあと、bootloaderへジャンプ。(bootloaderでPRCを返す)

※suppressPosRspMsgIndicationBitフラグがtrueの場合は、1.と3.はPRCを返さない。(suppressPosRspMsgIndicationBitフラグがtrueの場合はUDS仕様参照。簡単に言うとPRCを返さなくするためのフラグ)

コンフィグパラメータ:DcmDspSessionForBootがbootloaderへのジャンプの設定されている場合は、「DcmEcuReset」は「JUMPTOBOOTLOADER」に遷移する。

Dcmはbootloaderへのジャンプを準備するためBswMにモードスイッチ(「JUMPTOBOOTLOADER」への遷移)を通知する。

※JUMPTOSYSSUPPLIERBOOTLOADERへ遷移するようにも設定することが可能。

DcmSendRespPendOnTransToBootがtrueなら、Dcmは、コールアウト関数Dcm_SetProgConditionsを呼び出して、bootloaderへのジャンプ条件が整っているか確認する。

bootloaderへのジャンプ条件が整っている(Dcm_SetProgConditionsの戻り値が「E_OK」)場合、「DcmEcuReset」は「EXECUTE」に遷移する。
※Dcm_SetProgConditionsがE_NOT_OKを返すときは、bootloaderへジャンプしません。状態も「EXECUTE」に遷移しない。

7.4.4.3 Jump from Bootloader / ECUReset

DCM の初期化時に、ブートローダ/ECUReset からのジャンプの結果であるかどうかを知るためにコールアウト関数Dcm_GetProgConditions() を呼び出す。

Dcm_GetProgConditionsにて、不揮発に保存している値を確認するのはインテグレータの責務。
時間がかかりすぎてスタートアップシーケンスに影響するかなど確認が必要。

DCM初期化時に、ブートローダ/ECUReset からのジャンプの結果である場合、
DCM は ComM_DCM_ActiveDiagnostic(NetworkId) を呼び出し、ComManager にフル通信モードを要求しなければならない。

DCMの初期化がbootloaderからのジャンプであり、APLが更新(Dcm_ProgConditionsType.ApplUpdated == True)されている場合、
DCMはBswM_Dcm_ApplicationUpdated()を呼び出し、アプリケーションが更新された旨をBswMに通知しなければならない。

7.4.4.4 Flags management

あんま新しい情報なし

9.3.2.6 Process Jump to Bootloader

Dcm内部からDcm_SetProgConditionsがどう呼び出されるか、なのであまり見なくて良い。

関連コンフィグパラメータ

  • DcmDspSessionForBoot
    bootloaderにジャンプするのか、ジャンプするならAPLとbootloaderのどちらでレスポンスを返すのかを設定。

スクリーンショット 2023-02-23 18.31.44.png

  • DcmSendRespPendOnTransToBoot
    bootloaderに遷移する前にNRC:0x78を返すかどうか設定。
    Dcm_SetProgConditions()を呼ぶためにはtrueに設定しておく。
    スクリーンショット 2023-02-23 18.45.36.png
1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?