こんにちは:
ソフトウェアトリガー を介した電源投入時自己診断テストの ために、S32_SAF (SPD) v1.0.6 の Bist_Run() API を使用して、S32K358 上で STCU2 オンライン BIST (LBIST + MBIST) を実行します 。
RUNSW=0x301 (LBSWPLLEN + MBSWPLLEN が有効): LOCKESW がトリガーされます すぐに STCU起動時。レジスタダンプには、 LB_END0=0x0、 MB_END0=0x0 — テストチャネルは一つも実行されませんでした。これは、PLLロックエラーがBIST実行時ではなく、STCU初期化時に発生したことを示しています。ERR_STAT=0x180000はLOCKESWとWDTOSWが失敗したことを意味します
RUNSW=0x1 (PLL監視なし):PLLが初期化されているかどうかに関わらず、MCUは永久にハングアップし、リセットされません。これはSTCUハードウェアが動作するためにPLLクロックを必要とすることを示唆しているが、 0x1 PLLメンテナンス機構は作動しません。
これにより 矛盾:PLLイネーブルビットを設定すると即座にLOCKESWが発生するが、設定しないとMCUがハングアップする。
私の質問は、S32K358におけるSTCU2ソフトウェアトリガー(RUNSW)の正しい構成とシーケンスは何ですか?ということです。または、特別な設定はありますか?
添付ファイルは私のメインコードです。問題点を確認するのを手伝ってください。よろしくお願いします。
こんにちは、 @danielmartynek さん:
MCU BISTのテストは成功しましたが、結果が正しいかどうか確認していただけますか?Mcu_GetResetReason 関数を使用すると、システムが Bist_Run 関数で停止する理由がわからないため、アドレスを直接読み取ることで今のところは問題ありません。以下は私のbist関数です。
void BSW_BistHandler(void)
ヤージュ
uint32_t stcu_cfg = *(volatile uint32_t *)0x403A000CUL;
if (stcu_cfg == 0U)
ヤージュ
if ((*(volatile uint32_t *)0xE000EDF0UL & 0x1UL) == 0U)
ヤージュ
Bist_Run(BIST_SAFETYBOOT_CFG);
のために(;;) {}
}
それ以外
ヤージュ
Printf("デバッガーが接続されました。BISTはスキップされました\r\n");
}
}
それ以外
ヤージュ
Bist_StatusType ステータス = Bist_GetExecStatus(BIST_SAFETYBOOT_CFG);
uint32_t errStat = Bist_GetRawErrorStatus();
/* 讀取 STCU 一時保存: LBIST/MBIST 完了状態與成功狀状態 */
uint32_t lb_end = *(volatile uint32_t *)(0x403A005CUL); /* LB_END0 */
uint32_t lb_stat = *(volatile uint32_t *)(0x403A004CUL); /* LB_STAT0 (1=合格) */
uint32_t mb_end = *(volatile uint32_t *)(0x403A014CUL); /* MB_END0 */
uint32_t mb_stat = *(volatile uint32_t *)(0x403A010CUL); /* MB_STAT0 (1=合格) */
Printf("=== MCU BIST 結果 ===\r\n");
Printf(" ステータス : %d (%s)\r\n", status,
(ステータス == BIST_OK) ?"わかりました" :
(ステータス == BIST_FAILED) ?"失敗した" :
(ステータス == BIST_ERROR) ?"エラー" :
(ステータス == BIST_NORUN) ?「NORUN」:
(ステータス == BIST_INTEGRITY_FAIL) ?「INTEGRITY_FAIL」:
(ステータス == BIST_BUSY) ?「ビジー」: 「不明」);
Printf(" ERR_STAT : 0x%08X\r\n", errStat);
Printf(" LBIST END : 0x%X STAT: 0x%X (END=0x1、STAT=0x1 が予想されます)\r\n", lb_end, lb_stat);
Printf(" MBIST END : 0x%04X STAT: 0x%04X (END=0x1FFE、STAT=0x1FFE を期待)\r\n", mb_end, mb_stat);
}
そして結果はこうなる
BillWen_0-1778228397922.png
何か見落としている点があれば教えてください。よろしくお願いします。
よろしくお願いします。
BR、ビルウェン
こんにちは、 @BillWen さん。
PLLは前提条件の一つであり、有効にしておく必要があります。
danielmartynek_0-1778146612597.png
システムクロックを設定した後、すぐに電源モードの切り替えを実行しているようですね。
Mcu_SetMode(McuModeSettingConf_0);
この呼び出しを削除して、もう一度テストしていただけますか?
BR、ダニエル
こんにちは、 @danielmartynek さん:
前回の返信で述べたように、私は既にBist_Run関数を実行して結果を取得できています。BISTプロセスが正しいかどうかを確認していただきたいだけです。
よろしくお願いします。
BR、ビルウェン
こんにちは、 @BillWen さん。
Bist_Run() 関数のどの部分で処理が停止してしまうのでしょうか?
こんにちは、 @BillWen さん。
はい、これは正しいようです。期待通りのBIST結果が得られています。
BR、ダニエル