はじめに
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
7.4.4.1 Jump to Bootloader
ブートローダへのジャンプは4種類のユースケースがある。
- APLはPRCを即返し、bootloaderへジャンプ
- APLはNRC:0x78(ResponsePending)を返したあと、PRCを返し、bootloaderへジャンプ
- APLはレスポンスを返さず、bootloaderへジャンプ(bootloaderでPRCを返す)
- 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のどちらでレスポンスを返すのかを設定。