2217275_ja-JP

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

2217275_ja-JP

2217275_ja-JP

スタンバイ モードから機能をリセットした後のウェイクアップ ソースの認識。

こんにちは、NXPさん


私はスリープウェイクアップアプリケーションに取り組んでいます。スタンバイウェイクアップ用のウェイクアップスリープ構成を構成しました。

私の質問は、スタンバイ ウェイクアップから機能をリセットした後、ウェイクアップ ソースをどのように知ることができるかということです。

Re: Wakeup Source Recognition after function reset from standby mode.

こんにちは@aryandis

ウェイクアップ後、WISR/WISR_64 レジスタを読み取って、ウェイクアップの原因となったソースを特定CAN。スタンバイ終了後も値はそのまま保持されるため、スタンバイ RAM に保存したり、高速スタンバイ終了を使用したりする必要はありません。

Mcu_GetResetReason() は、前回のリセットがスタンバイ終了だったか、その他のリセット (HW、SW、WDG など) だったかを返しますが、ウェイクアップ ソース用の API はありません。

レジスタを読み取る場合は、メイン ルーチンがレジスタを保存する前にクリアしないようにし、立ち下がりエッジを使用する場合はパッド保持を有効にする必要があることに注意してください (このコミュニティ投稿を参照してください: Solved: WISR_64 no correct after wakeup from fast standby mode on S32K312 - NXPコミュニティ )。

コミュニティからの低電力の例をCAN参照できます。

MCAL レイヤーは、ウェイクアップ ソースを報告する EcuM モジュールも提供しますが、RTD パッケージは EcuM のスタブ ファイルのみを提供します。これらは参照用として使用することを目的としており、アプリケーションのニーズに応じて変更/置換できます。

よろしくお願いします、
ジュリアン

Re: Wakeup Source Recognition after function reset from standby mode.

私は Autosar スタックを使用しているため、ウェイクアップ ソース ID が必要です。

機能リセット後にスタンバイ ドメインに保存するために WISR/WISR_64 値を構成するにはどうすればよいですか?

CANどのように設定すればよいか教えていただけますか。

Re: Wakeup Source Recognition after function reset from standby mode.

こんにちは@aryandis

はい、これはWkpu_Ip_GetInputState() を呼び出し、対応する WKPU チャネルが設定されている場合は TRUE を返し、フラグをクリアします。

ウェイクアップ (スタンバイ終了) 後、NVIC レジスタはデフォルトにリセットされます (すべてのペリフェラル割り込みが無効になります) が、WKPU レジスタの値と以前の状態は保持されます。したがって、ウェイクアップ後にプラットフォーム関数を呼び出してウェイクアップの割り込みを有効にすると(WKPU_IRQn に NVIC_ ISER を構成する)、プログラムはウェイクアップ割り込み関数にジャンプし、どのウェイクアップ ソースが発生したかを判別できます。

ウェイクアップ後の実行モードでウェイクアップの割り込みを有効にするプラットフォーム関数を呼び出さない場合は、Wkpu_Ip_GetInputState() 関数を呼び出してウェイクアップ ソースを判別できます。

ウェイクアップ後に直接レジスタを読み取るCAN。

よろしくお願いします、
ジュリアン

Re: Wakeup Source Recognition after function reset from standby mode.

はい、質問が1つあります。

 EcuMモジュールを有効にし、EcuM_CheckWakeup()内でIcu_Checkwakeup()を呼び出しました。しかし、ICUウェイクアップイベント情報が発生してもEcuM_CheckWakeup()をトリガーできないという問題があります。(チャネル状態がRUNNINGであるため、EcuM_CheckWakeup()を呼び出すことができないためです。)

EcuM_CheckWakeup() をどのようにトリガーすればよいですか?

ISR と同じウェイクアップ ピンを作成して、EcuM_CheckWakeup()->Icu_CheckWakeup() を呼び出してビット ステータスを WAKEUP_STATE に設定し、EcuM_SerWakeupEvent() を呼び出すことはできますか?

ISR として CAN 場合、どうすれば CAN できますか?

Re: Wakeup Source Recognition after function reset from standby mode.

こんにちは@aryandis

申し訳ありませんが、おっしゃる通りです。Icu_Init() 関数を呼び出すと、プラットフォーム 関数を呼び出す前に割り込みフラグがクリアされ、現在のモードが ICU_NORMAL_MODE に変更されます。SO、それ以前に Icu_Init() を呼び出すことはできません。これはドライバの制限のようです。社内チームにフィードバックをお願いします。

また、Icu_GetInputState() 関数内では、Icu_Init() 関数によって初期化する必要があるグローバル変数を使用します。このような状況では、Wkpu_Ip_GetInputState() 関数を呼び出して WISR または WISR_64 のステータスを確認してクリアするか、直接読み取ることができると思います。

よろしくお願いします、
ジュリアン

Re: Wakeup Source Recognition after function reset from standby mode.

同じ問題をデバッグしたところ、ウォーム リセットのスタンバイ ウェイクアップ後の Icu_Init の開始時に ICU_NORMAL_MODE が設定されているため、ICU_CurrentMode が原因で EcuM_Checkwakeup が呼び出されなかったことがわかりました。

ウェイクアップ後に EcuM_Cehckwakeup が呼び出されるSOするにはどうすればいいですか?

Re: Wakeup Source Recognition after function reset from standby mode.

こんにちは、Julian_AragonM さん。スタンバイウェイクアップ後に Icu_Init() で現在のモードを ICU_NORMAL_MODE に変更することに関して、チームに一度連絡していただけますか。これを回避するにはどうすればよいですか?

Re: Wakeup Source Recognition after function reset from standby mode.

ウェイクアップ ソースは動作しており、ウェイクアップ後に Icu_ReportEvent が来ますが、Icu_CuurentMode 変数が原因で、Icu_Init() から ICU_NORMAL_MODE に初期化され、EcuM_CheckWakeup が呼び出されません。

EcuM_CheckWakeup は Icu_ReportwakeupAndOverFlow ICU ドライバから呼び出されています。

Icu_ReportwakeupAndOverFlow には、変数 Icu_CuurentMode から ICU_MODE_SLEEP マクロまでの条件チェックがあります。

Re: Wakeup Source Recognition after function reset from standby mode.

こんにちは、 @aryandis さん

Icu NORMAL モードでは、ウェイクアップ ソースの処理が妨げられることはありません。Icu が EcuM チェック ウェイクアップを妨げているコード部分を共有していただけますか?ICU モードに関係なく、Icu_CheckWakeup() が呼び出されることは CAN です。

社内チームからも返答がありました。

1.ご存知のとおり、Icu モジュールは、MCAL レイヤーでウェイクアップ ソースを直接チェックできる機能を提供していません。Icu はウェイクアップ ソース情報を EcuM モジュールに転送し、このモジュールはウェイクアップ ソースをチェックします。RTD ドライバでは、EcuM はスタブ モジュールであり、参照として使用することを目的としており、アプリケーションのニーズに応じて変更/置換できます。

ECU 状態マネージャの仕様は次のとおりです。

Julin_AragnM_0-1764690234834.png

2. Icu 構成で、ユーザーが「IcuWkpuStandbyWakeSupport」を有効にすると、Icu_Init() は WISR フラグをクリアしません。

Julin_AragnM_0-1764689874096.png

プロジェクトで、Wkpu_Ip レイヤーのウェイクアップ ソースを確認するには、以下のコードを参照します。

Julin_AragnM_1-1764689873781.png

Icu_Init() 関数の前に Platform_Init(NULL_PTR); を呼び出すと、何らかの理由で WISR フラグが消去されることがわかりました。SO、この関数を Icu_Init() 関数の後に呼び出しました。

よろしくお願いします、
ジュリアン

Re: Wakeup Source Recognition after function reset from standby mode.

はい、正解です。そして、 Icu_CheckWakeup () は、マッピングした EcuM_CheckWakeup から呼び出されます。また、EcuM_CheckWakeup は、RTD の Icu_ReportWakeupAndOverflow API から呼び出され、SLEEP_MODE をチェックする条件を持ちます。SLEEP_MODE なしで EcuM_CheckWakeup がどのようにトリガーされるか。

それとも、ISR から EcuM_Checkwakeup を呼び出す必要がありますか?


aryandis_0-1764823806561.png

これはRTD 3.0.0のスナップショットです

Re: Wakeup Source Recognition after function reset from standby mode.

こんにちは@aryandis

Icu_CheckWakeup () は、ウェイクアップ後に (通常は EcuM によって) 呼び出され、ICU がソースを検証し、それが有効かどうかを EcuM に通知できるようにするためのパブリック AUTOSAR ICU API です。ドライバがSLEEPモードにあるかどうかには依存しません。

Icu_ReportWakeupAndOverflow () は RTD 内部および非 AUTOSAR であり、割り込みコンテキストからすぐにウェイクアップ (およびオーバーフロー) を報告するロジックをバンドルします。
 
ウェイクアップ後に、Icu_Init() を NORMAL に設定し (IcuWkpuStandbyWakeupSupport = true で WKPU フラグが保持されることを確認)、マップされた EcuM ウェイクアップ ソースを使用して Icu_CheckWakeup() を呼び出すことをお勧めします。これは、Icu_CurrentMode が NORMAL であっても機能します。
 
よろしくお願いします、
ジュリアン
Re: Wakeup Source Recognition after function reset from standby mode.

こんにちは@aryandis

私の見解では、選択肢は 2 つあります。

1.スタンバイ終了後、EcuM ステート マシンが RUN に移行する前に、 EcuM_Checkwakeup () を呼び出します。これにより、スタンバイ中にウェイクアップ ソースが処理されます。ウェイクアップ ソースが有効な場合、ECU は RUN 状態に戻ります。

これは、ECU 状態マネージャの仕様に記載されています。

Julin_AragnM_0-1764878676938.png

2. ISR コンテキストを介してこれを呼び出すと、ウェイクアップ ソースが直ちに処理されます。

よろしくお願いします、
ジュリアン

Tags (1)
No ratings
Version history
Last update:
‎12-04-2025 11:29 PM
Updated by: