Multi Source Translation Content

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

Multi Source Translation Content

ディスカッション

ソート順:
rt1186 debug issues After enabling OEM_CLOSE on the FRDM-IMXRT1186 development board, I can no longer debug the device. I saw in the reference manual that nxpdebugmbox can be used to re-enable debugging, but I tried it and was not successful. yanyanwang_0-1788347257012.pngyanyanwang_0-1788347257012.pngyanyanwang_0-1788347257012.pngyanyanwang_0-1788347257012.png Development Board MCXC Security(Edgelock | secure boot | OTP) Re: rt1186 debug issues I have reviewed the links you provided and followed the recommended procedure, but I am still experiencing the same issue. I only signed the image and did not encrypt it. I also set OEM_CLOSE. I am using nxpdebugmbox only to re-enable the debug functionality. I have uploaded the SEC project as an attachment, along with the relevant logs. Could you please help analyze the project and logs and identify the cause of the issue? Re: rt1186 debug issues Hello @yanyanwang  In SEC tool documentation, you can find troubleshooting for debug authentication: https://docs.mcuxpresso.nxp.com/secure/latest/09_troubleshooting.html#debug-authentication Some useful tips can be also found in  https://docs.mcuxpresso.nxp.com/secure/latest/07_generic_workflows.html#debug-authentication-workflow If this does not help, can you provide details about configuration? Could you share the SEC tool workspace settings? Re: rt1186 debug issues @yanyanwang  It seems this problem is related to SEC 26.03. We recommend updating to SEC 26.06.  We are sorry for inconvenience. Note: SEC 26.06 also contains fix for the SPARSE image format Re: rt1186 debug issues Yes, thank you. The authentication was successful, but I still cannot debug the device. The procedure is as follows: 1. Use the SEC tool to perform the authentication. 2. The authentication is successful. 3. Then click the Debug button to start debugging. 4. However, the debugging attempt fails.
記事全体を表示
Consultation on using the master-slave mode of s32k388 6953956c0a213afc6de89697c3d0e88f.png6953956c0a213afc6de89697c3d0e88f.png We have a requirement here, which is for two S32k388s to communicate with each other using SPI communication. Can either one be the master or slave? For example, when I use chip A as the host, the I item in the IOMUX table describes the host input of MISO. If chip A is used as a slave, does this O term describe the slave output of MISO? The pins in our current project are fixed. For example, SOUT: PTA18+GPIO_ALT_FUNC_4 is used on MOSI, SIN: PTA20+239+GPIO_ALT_FUNC_4 is used on MISO. This is based on the current host mode we are using. Can it still work normally when switching to slave mode without changing the pins? Is it sufficient to switch slave mode by simply changing the HRDIR of CFGR0 and the MASTER of CFGR1? Re: Consultation on using the master-slave mode of s32k388 Hello @xlele , You do not need any hardware changes to switch between master and slave mode. In a standard two-chip SPI setup, the pins are always cross-connected between the two devices: Chip A SOUT → Chip B SIN (MOSI line) Chip A SIN ← Chip B SOUT (MISO line) The SOUT pin is always a serial data output and SIN is always a serial data input, regardless of whether the device is operating as master or slave. So when Chip A switches to slave mode, its SIN (PTA20) still correctly receives data from the new master and its SOUT (PTA18) still correctly drives data back — no rewiring needed. Regarding the register changes: CFGR1[MASTER] = 0 — this is the key bit to switch the module into slave mode. CFGR0[HRDIR] —  this bit controls the direction of the HREQ (Host Request) pin, which is multiplexed with PCS[1]. It has no effect on the SOUT/SIN data lines. In slave mode, HRDIR can be set to 1 (output) so that the slave drives the HREQ pin to signal the master that it has data ready to transmit. Note that on S32K388, there is no dedicated external LPSPI_HREQ pin — the host request function uses the LPSPI_PCS[1] mux (enabled via CFGR0[HREN]). If you are not using the host request feature (CFGR0[HREN] = 0), HRDIR is not relevant to your use case and CFGR1[MASTER] alone is sufficient. Best regards, Pavel
記事全体を表示
rt1186 调试问题 在 FRDM-IMXRT1186 开发板上启用 OEM_CLOSE 后,我无法再调试该设备。我在参考手册中看到可以使用 nxpdebugmbox 重新启用调试功能,但我尝试后没有成功。 yanyanwang_0-1788347257012.pngyanyanwang_0-1788347257012.pngyanyanwang_0-1788347257012.pngyanyanwang_0-1788347257012.png 开发板 MCXC 安全(Edgelock | 安全启动 | OTP) Re: rt1186 debug issues 我已查看您提供的链接并按照推荐的步骤操作,但我仍然遇到同样的问题。 我只对图像进行了签名,并没有对其进行加密。我还设置了 OEM_CLOSE。 我使用 nxpdebugmbox 只是为了重新启用调试功能。 我已将高效密码学标准\\(SEC\\)项目及其相关日志作为附件上传。请您帮忙分析项目和日志,找出问题的原因吗? Re: rt1186 debug issues 你好@yanyanwang 在 高效密码学标准\\(SEC\\) 工具文档中,您可以找到有关调试身份验证的故障排除信息: https://docs.mcuxpresso.nxp.com/secure/latest/09_troubleshooting.html#debug-authentication 您还可以在以下位置找到一些有用的技巧: https://docs.mcuxpresso.nxp.com/secure/latest/07_generic_workflows.html#debug-authentication-workflow 如果这样还是不行,能否提供详细的配置信息?能否分享一下高效密码学标准(SEC)工具的工作区设置? Re: rt1186 debug issues @yanyanwang 这个问题似乎与 高效密码学标准\\(SEC\\) 26.03 有关。我们建议更新至高效密码学标准(SEC) 26.06版本。 给您带来的不便,我们深表歉意。 注:高效密码学标准(SEC) 26.06 还包含对 SPARSE 映像格式的修复。 Re: rt1186 debug issues 是的,谢谢。身份验证成功,但我仍然无法调试设备。 具体步骤如下: 1. 使用高效密码学标准(SEC)工具执行身份验证。 2. 身份验证成功。 3. 然后点击调试按钮开始调试。 4.然而,调试尝试失败了。
記事全体を表示
Guideline for Porting a New YOLO Variant - YOLO26 on Ara2 This slides firstly introduce the YOLO26 model, and NXP Ara2 Model Zoo, Ara2 SDK/Runtime. Then it explains the CNN model compilation flow with Ara2 toolchain in SDK package, how to compile the newly added model - Yolo26n, how to setup the inference environment in i.MX95FRDM+Ara2-240 board. Finally present the inference result. Patches and user guide are provided in attachment as well.
記事全体を表示
S32K312: SWT0機能リセットエスカレーション、破壊リセットステータス、およびSRAM保持 NXPチームの皆様、こんにちは。 私はS32K312 Cortex-M7を使い、S32 Design StudioとAUTOSAR RTD 7.0.1 / AUTOSAR 4.9を使って作業しています。 現在、MC_RGMのリセット動作、特にSWT0機能リセット、機能リセットエスカレーション、破壊的リセット、SRAM保持、SBAF/リカバリ動作、およびPower IPリセットAPIのテストを行っています。 1. SWT0機能リセットエスカレーション 私はSWT0タイムアウトを使用して機能リセットを生成しています。 私のMC_RGMの設定は以下のとおりです。 MC_RGM_FRET_FRET((uint32)15U) MC_RGM_DRET_DRET((uint32)0U) 機能リセットカウンタが増加していることを確認しました。 SWT0機能リセット#1 -> FREC = 1 SWT0機能リセット#2 -> FREC = 2 ... SWT0機能リセット#14 -> FREC = 14 次のSWT0リセット後、FRECはクリア/リセットされますが、期待される動作は確認できませんでした。 DES[MC_RGM_FRE] = 1 私の質問は以下のとおりです。 SWT0_RSTは、S32K312のMC_RGM機能リセットエスカレーションカウンタ(FREC)に参加しますか? FRECがFRET=15に達したとき、MC_RGM_FREを生成し、DES[MC_RGM_FRE]を設定すべきでしょうか? エスカレーション直後、FES、DES、FREC、FRET、Power_Ip_GetResetReason() には具体的にどのような値が期待できるでしょうか? SWT0がFRETエスカレーションに参加するために、追加の設定は必要ですか? SBAFやリカバリーハンドリングはFRETのエスカレーションに支障をきたすことはありますか? SWT0/FRETの上昇に関連する既知の不具合やS32K312の挙動はありますか? アプリケーションを継続的に実行すると、15回目の機能リセット後にアプリケーションやデバッガが停止し、期待される破壊的なリセットを観察できません。これがリセットシーケンス、SBAFリカバリ、またはデバッガに関連しているかどうかを知りたいです。 2.すべてのSWT0機能リセットを破壊的なものにしたい テスト目的で、以下のことも達成したいと考えています。 SWT0タイムアウト ↓ 機能リセット ↓ 即時破壊リセット 15回も機能リセットを待つ代わりに。 以下の設定で実現できますか: FRET = 1U; 具体的には: FRET = 1 の場合、最初の適格な SWT0 機能リセットが破壊的なリセットにエスカレートしますか? MC_RGMの追加設定は必要ですか? SWT0は、このエスカレーションの対象となる情報源として確実に認められるのでしょうか? SBAFや回復行動はこれに影響を与えるのでしょうか? これはRTD 7.0.1の設定で直接サポートされていますか? 3. SRAMデータは、機能リセットのたびに消去されます。 私の理解では、S32K3xxリファレンスマニュアルでは、SRAMやシステムメモリは機能リセット後も保持されるべきです。 SRAMテスト変数を作成しました。 #define SRAM_TEST_ADDR ((volatile uint32_t *)0x204007d4U) そして、それを使って機能リセット後のデータ保持状況を確認する。 しかし、機能リセット後にSRAMデータが消去/ゼロに書き換えられていることを確認しました。 私の質問は以下のとおりです。 機能リセットの際にハードウェアがSRAMを保持し、その後ソフトウェアによって上書きされるのでしょうか? S32K312において、機能リセット後も内容が確実に保持されるSRAM領域はどれですか? 関数リセットを通じてその内容を保持するために、SRAMに変数を配置する推奨される方法は何ですか? 専用の.noinitファイルを使うべきでしょうか?または、保持されたSRAMセクション? データ保持に必要なMC_RGM/SRAMの特定の構成はありますか? 機能リセット間でアプリケーションデータを保持するための推奨されるRTD 7.0.1の方法は何ですか? 4. 直接ソフトウェア破壊的リセット また、Power IPを使って直接的なソフトウェア破壊リセットもテストしています: Power_Ip_Init(&Power_Ip_HwIPsConfigPB); gVar= Power_Ip_GetResetReason(); for (count = 0; count < 10125000; count++); Power_Ip_PerformReset(&Power_Ip_HwIPsConfigPB); 現在のMC_RGM構成には以下が含まれます。 static const Power_Ip_MC_RGM_ConfigType Power_Ip_MC_RGM_ConfigPB = ヤージュ (MCU_DEST_RESET) ... MC_RGM_FRET_FRET((uint32)15U) MC_RGM_DRET_DRET((uint32)0U) }; 破壊的なリセットが発生するが、デバッガーは通信を繰り返し失い、再確立する。 次のようなメッセージを見かけます。 情報: DAP IDCODE = 0x6BA02477 情報:DAPの電源投入に成功しました。DP CTRL/STAT = 0xF0000000 複数回繰り返され、続いて次のもの: 割り込みコマンドを受信しました。執行を停止します。 理解したいのは以下の点です。 破壊的なリセット中に、DAPの再接続が繰り返し発生することは想定されていますか? 破壊リセットシーケンス中にCortex-M7に具体的に何が起こるのでしょうか? 破壊的なリセット後、CPUはいつ再び使用可能になりますか? 単一のソフトウェア破壊リセットをデバッグする推奨される方法は何ですか? 5. Power_Ip_PerformReset() 前のブレークポイント挙動 直前にブレークポイントを確実に到達することはできません: Power_Ip_PerformReset(&Power_Ip_HwIPsConfigPB); APIの前に遅延を設定し、デバッガがアクセスを得るのに十分な時間があると期待していました。 場合によっては、ターゲットを手動で一時停止してから実行を再開した後に初めてブレークポイントに到達することがあります。 理解したいのは以下の点です。 リセットAPIの前に遅延があるのに、なぜデバッガはブレークポイントを見逃すのでしょうか? これは、ターゲットが繰り返しリセットされ、デバッガーがDAP経由で再接続されることに関係していますか? 破壊的なリセットの直前や直後にCPUをキャッチする推奨される方法はありますか? RTDのDISABLE_DEBUGGER_TRAPオプションはこの動作に関係していますか? 6. Power IPの初期化とPower_Ip_SetMode() 私のRTDは以下を提供します: void Power_Ip_Init( const Power_Ip_HwIPsConfigType *HwIPsConfigPtr); void Power_Ip_SetMode(const Power_Ip_ModeConfigType *ModeConfigPtr); void Power_Ip_PerformReset( const Power_Ip_HwIPsConfigType *HwIPsConfigPtr ); Power_Ip_ResetType Power_Ip_GetResetReason(void); Power_Ip_RawResetType Power_Ip_GetResetRawValue(void); 現在使用しているもの: Power_Ip_Init(&Power_Ip_HwIPsConfigPB); そして: gVar = Power_Ip_GetResetReason(); 私のモード設定はPOWER_IP_RUN_MODEです。 以下の点についてご説明をお願いします。 Power IPリセットAPIを使用する前に、Power_Ip_Init(&Power_Ip_HwIPsConfigPB)は正しい初期化方法でしょうか? ソフトウェアの機能的/破壊的リセットテストにはPower_Ip_SetMode()が必要ですか? 選択したモードがPOWER_IP_RUN_MODEなら、このリセットテストでPower_Ip_SetMode()を省略してもいいですか? RTD 7.0.1を使って、ソフトウェアの機能リセットとソフトウェア破壊リセットの設定をどうすればよいですか? 環境 MCU:S32K312 コア:Cortex-M7 S32DS:S32 Design Studio AUTOSAR:4.9 RTD: 7.0.1 リセット元: SWT0 フレット: 15 DRET: 0 試験用の申請書を全部ご用意できます、Power_Ip_PBcfg.c。リンカー構成、MC_RGMレジスタキャプチャ、および必要に応じてデバッガーログ。 よろしくお願いします。 Re: S32K312: SWT0 Functional Reset Escalation, Destructive Reset Status and SRAM Retention こんにちは、 @Sharif417 さん。 1. SWT0機能リセットエスカレーション SWT0_RSTdoes S32K312 FRECに参加し、FRECが15に達するとDES[MC_RGM_FRE]が設定されます。Power_Ip_GetResetReason()を呼び出して「MCU_MC_RGM_FRE_RESET」を返すことで読み取れるはずです。 降格されていない機能リセット源(MCRGM.を通じて)はFERD は FREC のインクリメンションの対象となります。 Power_Ip_Init()はMC_RGMをクリアするので覚えておいてください。DES(値を保存した後)なので、電源モジュールを初期化する前にレジスタ値を取得するか、リセット理由を読み込むようにしてください。 回復モードは、閾値が>8の場合、回復モードがデフォルトで「8」に設定されているため、これに影響を与える可能性があります。sBAFはFRETではなくDRETにも干渉することがあります .「0」の場合、0xFに変わるのがわかります:   Julin_AragnM_0-1788816978772.pngJulin_AragnM_0-1788816978772.pngJulin_AragnM_0-1788816978772.pngJulin_AragnM_0-1788816978772.pngJulin_AragnM_0-1788816978772.pngJulin_AragnM_0-1788816978772.pngJulin_AragnM_0-1788816978772.pngJulin_AragnM_0-1788816978772.png アプリケーションを継続的に実行すると、15回目の機能リセット後にアプリケーションやデバッガが停止し、期待される破壊的なリセットを観察できません。これがリセットシーケンス、SBAF復旧、またはデバッガに関連しているのか知りたいです。 デバッガを接続したままにしようとする代わりに、15回目の機能リセット後に接続を試みるか、UARTなどでリセット理由を印刷してみることはできますか? 2. すべてのSWT0機能リセットを破壊的なものにしたい はい、FRET=1であれば、すべての機能リセットで破壊リセットを発行するのに十分です。 追加のMC_RGMは不要です。 sBAF/リカバリーモードはこれに影響を与えないはずです。 はい、POWER モジュール -> 「モジュール設定」 -> 「McuResetConfig」 -> 「機能リセットエスカレーション閾値」で直接設定できます 3. SRAMデータは、機能リセットのたびに消去されます。 その通りです。SRAMは機能リセット後も保持されます。 S32K3は、派生モデルによって、スタンバイRAMとして16KB、32KB、または最大64KBを提供する場合があります。 スタンバイRAMを通じて変数を配置・使用する方法の例をいくつか見つけることができます: [RTD600 MCAL & IP]S32K3 低消費パワーマネージメントANおよびデモ S32K3の低消費電力管理ANとデモ 例:S32K312スタンバイモード、スタンバイRAMおよびPAD(DS3.5 RTD300を維持) スタンバイRAMがクリア/書き換えられる理由は、デフォルトのstartup_cm7.sによるものです。S32DSによって提供される機能は、リセット理由(POR、破壊的、機能的)に関係なく、SRAM全体を初期化します。機能リセットが発生した際に、割り当てられたスタンバイRAMをSRAMの初期化がスキップするように修正する必要があります。以下のコミュニティ投稿を参照してください: S32K311 スタンバイ RAM 保持。 4. 直接ソフトウェア破壊的リセット はい、MCUが機能的/破壊的リセットを発行されると、デバッグサブシステムとクロックはすべて再初期化されるため、デバッガは再びDAPアクセスを再交渉しなければなりません。 破壊的なリセットを行うと、一部のモジュールを除いて、チップの大部分がリセットされます。機能リセットを行うと、すべての通信ペリフェラルやコアがリセットされます。通信プロトコルの健全性は保証されておらず、リセット後に再初期化されることが前提とされています。 接続を維持しようとする代わりに、デバッガの「ターゲットにアタッチ」オプションを使うことができます: Julin_AragnM_1-1788817136992.pngJulin_AragnM_1-1788817136992.pngJulin_AragnM_1-1788817136992.pngJulin_AragnM_1-1788817136992.pngJulin_AragnM_1-1788817136992.pngJulin_AragnM_1-1788817136992.pngJulin_AragnM_1-1788817136992.pngJulin_AragnM_1-1788817136992.png 5. Power_Ip_PerformReset() 前のブレークポイントの動作 おそらく再接続のウィンドウを見落としているだけです。for()ループを使う代わりに、フラグはデバッガで再接続した後に手動で変更する変数であるwhile(flag)を使い、「Expressions」タブから使うことができます。 6. Power IPの初期化とPower_Ip_SetMode() はい、Power APIを使用する前にPower_Ip_Init()を呼び出す必要があります。 そうすることをお勧めします。リセットはPower_Ip_PerformReset()を通じて行うことができますが、破壊的リセットか機能リセットのどちらかをMcuResetConfigコンテナ内で設定できます。代わりに、機能リセット用と破壊リセット用2つのパワーモードを宣言できます。次に、Power_Ip_SetMode(Functional_Reset) または Power_Ip_SetMode(Destructive_Reset) を呼び出します。 省略しても構いませんが、すべてのモジュールが正しくゲート化・設定されているか確認するためにPower_Ip_SetMode(RUN_MODE)を呼び出すと良いでしょう。もしプロジェクトに不要であれば省略しても構いません。 A6.2を参照してください。 簡単なテストを作成し、FRET=1を設定し、Power_Ip_SetMode( ) APIを通じて機能リセットを行うと報告FRE_RESET確認できました: Julin_AragnM_2-1788817284857.pngJulin_AragnM_2-1788817284857.pngJulin_AragnM_2-1788817284857.pngJulin_AragnM_2-1788817284857.pngJulin_AragnM_2-1788817284857.pngJulin_AragnM_2-1788817284857.pngJulin_AragnM_2-1788817284857.pngJulin_AragnM_2-1788817284857.png よろしくお願いします、 ジュリアン Re: S32K312: SWT0 Functional Reset Escalation, Destructive Reset Status and SRAM Retention こんにちは、ジュリアンさん。 ご説明いただきありがとうございます。 S32K312で再度テストを行ったので、2つの点について明確にしておきたいと思います。完全なプロジェクトフォルダを添付しておきますので、設定を確認して動作を再現できます。 1. SWT0機能リセットエスカレーション 設定しました: FRET = 15U;DRET = 0U; そして、 125ミリ秒のタイムアウトを設定したSWT0を使用して、機能リセットを生成します。 機能リセットのたびに FREC が増加しているのが観察できます: SWT0 reset #1 -> FREC = 1 SWT0 reset #2 -> FREC = 2 ... SWT0 reset #14 -> FREC = 14 しかし、次のSWT0機能リセットが発生し、 FRET = 15の閾値に達したときに、期待される破壊的リセット状態を観察することができません。 DES[MC_RGM_FRE] = 1 また、15回目の機能リセット後もMCUは動作を続け、予想される破壊的なリセット動作は見られません。私のSRAMテストパーティションに保存されているSRAMデータも、そのままの状態を保っています。 以下の方法でリカバリ動作を無効にしました。 IP_DCM_GPR->DCMRWP1 |= (3 << 22); 添付のプロジェクトを確認して、もう少し詳しく教えていただけますか: 15回目のSWT0機能リセット後、 DES[MC_RGM_FRE] = 1が観測されないのはなぜですか? FRECがFRET = 15に達した後、MCUは確実に破壊的なリセットに入るべきでしょうか?破壊的なリセットが発生した場合、なぜテストパーティションにSRAMの内容が保持されるのでしょうか? 他にMC_RGM/SBAFの設定で見落としているものはありますか? 2. 機能リセットおよび破壊リセット後のSRAM保持 専用のSRAMパーティション/セクションを作成し、その領域にテストデータを保存しました。 SWT0機能リセットを繰り返してもSRAMの値が保持されることを確認しました。これは想定どおりです。 しかし、FRETエスカレーションによって破壊的なリセットが発生すると予想される15回目の機能リセット後でも、SRAMの値は依然として残っています。 また、直接的なソフトウェア破壊リセットも試しましたが、リセット後もSRAM値は保持されていました。 したがって、私の見解は以下のとおりです。 SWT0 functional reset ↓ SRAM value retained 15th functional reset / expected FRET escalation ↓ SRAM value still retained Direct software destructive reset ↓ SRAM value also retained このSRAMの挙動がS32K312上で予想されるものなのか、また私のSRAMテスト領域が破壊的なリセットを経ても保持されるメモリ領域にある可能性があるのか、教えていただけますか? リンカー構成、RTD構成、MC_RGM構成、SWT0構成、テストアプリケーションを含む S32K312プロジェクトフォルダ全体を添付していますので、実際のメモリ配置とリセット設定を確認できます。 再開まで今しばらくお待ちください。 Re: S32K312: SWT0 Functional Reset Escalation, Destructive Reset Status and SRAM Retention こんにちは、 @Sharif417 さん。 1. SWT0機能リセットエスカレーション 1. 15回目のSWT0機能リセット後、DES[MC_RGM_FRE] = 1が観測されないのはなぜですか? 前述したように、Power_Ip_Init() APIはDESレジスタをクリアするため、リセット理由はPower_Ip_GetResetReason()を使用して読み取る必要があります。 2. FRECがFRET = 15に達した後、MCUは確実に破壊リセットに入るべきか?破壊的なリセットが発生した場合、なぜテストパーティションにSRAMの内容が保持されるのでしょうか? はい。FRECがFRTで設定された閾値に達している限り、MCUは破壊的なリセットを発行すべきです。破壊的なリセットが行われていないか、変数の位置が間違っているかのどちらかです。 3. 他にMC_RGM/SBAFの設定で不足しているものはありますか? いいえ。機能リセットエスカレーションの場合、FRETを設定するだけで十分です。 2. 機能リセットおよび破壊リセット後のSRAM保持 1. このSRAMの挙動がS32K312上で予想されるものか、またSRAMテスト領域が破壊的なリセットを経ても保持されるメモリ領域にある可能性があるのか、明確にしていただけますか? しかし、そうあるべきではありません。破壊的なリセットイベントの後、すべてのSRAMコンテンツは失われます。 直接的なソフトウェア破壊リセットをどのようにテストしているのか教えてもらえますか? プロジェクトで Power_Ip_PerformReset() API を使用している場合、それは破壊的ではなく機能的なリセットとして構成されています。 Julin_AragnM_0-1788891886849.pngJulin_AragnM_0-1788891886849.pngJulin_AragnM_0-1788891886849.pngJulin_AragnM_0-1788891886849.pngJulin_AragnM_0-1788891886849.pngJulin_AragnM_0-1788891886849.png 実は、値を保存してUARTで共有してテストしました。FRDM-A-S32K312はSW2で機能リセットを発行し、FRETは15に設定され、15回のSW機能リセット後にMCU_MC_RGM_FRE_RESETが生成されるのが見えます。これはRTD 6.0.0で発生しています。以下のログをご覧ください。 [RESET] Reason : MCU_F_EXR_RESET (RGM_FES F_FR0) [RESET] FRE Counter: 0 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 1 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 2 [RESET] Reason : MCU_SW_DEST_RESET (RGM_DES F_DR29) [RESET] FRE Counter: 0 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 1 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 2 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 3 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 4 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 5 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 6 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 7 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 8 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 9 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 10 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 11 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 12 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 13 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 14 [RESET] Reason : MCU_MC_RGM_FRE_RESET (RGM_DES F_DR6) [RESET] FRE Counter: 0 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 1 RTD 7.0.1では、あなたが言及したのと同じ挙動が見えます(FREが破壊リセットを主張しなかったり、デバッグャが切断されたりするなど): [RESET] Reason : MCU_SW_DEST_RESET (RGM_DES F_DR29) [RESET] FRE Counter: 0 [RESET] Reason : MCU_SW_DEST_RESET (RGM_DES F_DR29) [RESET] FRE Counter: 0 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 1 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 2 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 3 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 4 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 5 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 6 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 7 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 8 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 9 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 10 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 11 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 12 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 13 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 14 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 0 これにより、RTD 6.0.0とRTD 7.0.1の間にPower ドライバにいくつかの違いがあり、それがこれらの症状の原因になっているのではないかと考えています。これが設定の問題なのかバグなのか特定できていません。分析の時間をいただき、必要なら社内チームに連絡してください。 よろしくお願いします、 ジュリアン Re: S32K312: SWT0 Functional Reset Escalation, Destructive Reset Status and SRAM Retention こんにちは、ジュリアンさん。 ご説明いただきありがとうございます。 ご要望通り、現在使用している ソフトウェアの破壊リセットテストコード/プロジェクト を含むZIPファイルを添付しました。 FRET エスカレーションが RTD 6.0.0で正しく動作するとおっしゃっていましたが、テストで使った RTD 6.0.0の動作するコードやプロジェクト を共有していただけますか? あなたのRTD 6.0.0の動作コードを参考に、私のRTD 7.0.1プロジェクトと比較して、動作の違いを理解したいと考えています。 また、 RTD 6.0.0とRTD 7.0.1の間でパワードライバーに違いや問題がある可能性があるとおっしゃっていましたが、分析が終わったら RTD 7.0.1 の問題についての調査結果を教えていただけますか? 再開まで今しばらくお待ちください。 よろしくお願いします、 シャリフ Re: S32K312: SWT0 Functional Reset Escalation, Destructive Reset Status and SRAM Retention こんにちは、@Sharif417 さん。 Power_Ipドライバーのソースコードを調べたところ、Power_Ip_MC_RGM_GetResetReason()APIで機能リセットエスカレーションカウンタの修正が適用されているのが見えました。そこに3つ目の節が追加され、DESがビットを設定していてFRETレジスタが現在非ゼロを読み取っている場合にFESも入ります。 RTD 6.0.0: /* If the fields of Destructive Event Status Register (DES) are set then the status of FES register must be ignored */ if (((uint32)0U == ActiveValue) || (MCU_POWER_ON_RESET == ResetReason)) { ... } RTD 7.0.1: /* If the fields of Destructive Event Status Register (DES) are set then the status of FES register must be ignored */ /* If functional reset escalation to destructive reset is disabled, then the status of FES register must be ignored if the fields of Destructive Event Status Register (DES) other than DES[F_POR] are set. */ /* If functional reset escalation to destructive reset is enabled and if the fields of Destructive Event Status Register (DES), other than DES[F_POR], are set, then based on these fields user should check if the cause of the destructive reset was due to functional reset escalation or if it was triggered directly by a destructive reset source, in which case FES needs to be ignored */ if (((uint32)0U == ActiveValue) || (MCU_POWER_ON_RESET == ResetReason) || (((uint32)0U != DesResetStatus) && ((uint32)0U != Power_Ip_pxMC_RGM->FRET))) { ... } これがFESフラグが上書きされる理由です。私の理解が正しければ、ハードウェアは破壊的リセットを正しく実行しているにもかかわらず、リセットモジュールは代わりに機能的リセットを報告している。これは、15回目の機能リセット直後のIP_MC_RGM->DESレジスタを読むことで確認できます: Julin_AragnM_0-1788976448272.pngJulin_AragnM_0-1788976448272.pngJulin_AragnM_0-1788976448272.pngJulin_AragnM_0-1788976448272.png 有効な方法は、3番目の節を変更して、MCU_MC_RGM_FRE_RESETイベントがすでに起こっているかどうかを確認することかもしれません。 /* ----------------------------------------------------------------------- * Enter the FES block if: * a) DES is empty (no destructive reset logged), OR * b) DES has only the Power-On Reset bit, OR * c) DES has bits set AND FRE escalation is configured (FRET != 0) * AND the DES reason is NOT already MCU_MC_RGM_FRE_RESET * ----------------------------------------------------------------------- */ if (((uint32)0U == ActiveValue) || (MCU_POWER_ON_RESET == ResetReason) || (((uint32)0U != DesResetStatus) && ((uint32)0U != Power_Ip_pxMC_RGM->FRET) && (MCU_MC_RGM_FRE_RESET != ResetReason))) RTDドライバの修正はサポートされていないことを覚えておいてください。正しい方法は、SWチームからの公式修正を待つことです。この件については社内チームに報告し、もしあれば彼らからのフィードバックも伝えます。この問題をご指摘いただきありがとうございます。 最後に、あなたのプロジェクトについてですが、Power_Ip_PerformReset()を通じてリセットを発行しているのが見えます。先ほども述べた通り、リセット設定内で「機能リセット」が設定されており、ソフトウェア破壊リセットを発行するには「破壊的リセット」に変更する必要があります: Julin_AragnM_2-1788976691375.pngJulin_AragnM_2-1788976691375.pngJulin_AragnM_2-1788976691375.pngJulin_AragnM_2-1788976691375.png または、ModeSettingConf構造体を追加し、DEST_RESETを選択して、代わりにPower_Ip_SetMode()を呼び出します。 Julin_AragnM_3-1788976695121.pngJulin_AragnM_3-1788976695121.pngJulin_AragnM_3-1788976695121.pngJulin_AragnM_3-1788976695121.png よろしくお願いします、 ジュリアン Re: S32K312: SWT0 Functional Reset Escalation, Destructive Reset Status and SRAM Retention こんにちは、ジュリアンさん。 あなたの提案に基づき、Power_Ip_GetResetReason()だけに頼るのではなく、MC_RGM DESレジスタとFESレジスタを直接読み取ることで追加のテストを実施しました。 このテストでは、リセットタイプをFRET = 15のソフトウェア機能リセットとして設定しました。ソフトウェアの機能リセットのたびに、FRECカウンターは増加します。15回目のソフトウェア機能リセット後、main()のClock_Ip_Init()の前にブレークポイントを置き、MC_RGMレジスタを直接読み込みました。 volatile uint32_t regValueDes = 0U;volatile uint32_t regValueFes = 0U; regValueDes = IP_MC_RGM->DES;regValueFes = IP_MC_RGM->FES; gVar = Power_Ip_GetResetReason(); 完全なテストコードは以下のとおりです。 int main(void) { volatile uint32_t regValueDes = 0U; volatile uint32_t regValueFes = 0U; regValueDes = IP_MC_RGM->DES; regValueFes = IP_MC_RGM->FES; gVar = Power_Ip_GetResetReason(); Clock_Ip_Init(&Clock_Ip_aClockConfig[0]); Siul2_Port_Ip_Init( NUM_OF_CONFIGURED_PINS_PortContainer_0_BOARD_InitPeripherals, g_pin_mux_000InitConfigArr_PortContainer_0_BOARD_InitPeripherals); Power_Ip_Init(&Power_Ip_HwIPsConfigPB); gVar = Power_Ip_GetResetReason(); /* Disable recovery mode */ IP_DCM_GPR->DCMRWP1 |= (3 << 22); for (count = 0; count < 10125000; count++); Power_Ip_PerformReset(&Power_Ip_HwIPsConfigPB); } 15回目の機能リセット後、Clock_Ip_Init()の前にIP_MC_RGM->DESを直接読み取ります。しかし、DES[MC_RGM_FRE] = 1 は観測されませんでした。DESの値は0のままですが、FESにはリセット状態(私のテストでは0x20000001)が格納されます。 この観察結果に基づくと、問題はPower_Ip_MC_RGM_GetResetReason()やリセット理由の報告だけに限定されない可能性があると考えられます。クロックと電源の初期化前にMC_RGM DESレジスタを直接読み取っているため、破壊的なエスカレーションが発生した場合はDES[MC_RGM_FRE]がFRETエスカレーションを示すと予想していました。 そこで、15回目の機能リセット後にMC_RGMハードウェアレベルでFRETのエスカレーション自体が起きているのか確認していただけますか?もしこの時点で破壊的なエスカレーションが予想されるなら、なぜIP_MC_RGM->DESが0のままなのか教えていただけますか? また、あなたが指摘したPower_Ip_MC_RGM_GetResetReason()の問題に加えて、FREC/FRETのエスカレーション機構自体に関連する追加のRTD 7.0.1の問題や設定があるかどうかも確認していただけますか? この問題の調査にサポートいただき、ありがとうございます。 Re: S32K312: SWT0 Functional Reset Escalation, Destructive Reset Status and SRAM Retention こんにちは、 @Sharif417 さん。 破壊的なリセットは確かに起きていると信じています。以下のテスト手順に従ってください: FRET=1に設定し、機能リセットごとに機能リセットのエスカレーションが発生します。 2つの変数(1つはDESレジスタ用、もう1つはFESレジスタ用)と、変数を読み取る前にコアを停止するためのwhile()ループを宣言します。 int main(void) { volatile uint8_t debug = 1; while(debug); volatile uint32_t regValueDes = 0; volatile uint32_t regValueFes = 0; regValueDes = IP_MC_RGM -> DES; regValueFes = IP_MC_RGM -> FES; ... }​ コードでMCUをフラッシュした後、デバッグ変数を0に変更してプログラムが実行できるようにし、デバッガを切断します。 機能リセットを実行してください(あなたのプログラムや私が示した例を使ってください)。 「Attached to Running Target(走行中のターゲットにアタッチ)」を選択してMCUに接続します。 実行を一時停止し、デバッグ変数を0に設定し、DESおよびFES変数を読み取ります。 Julin_AragnM_0-1789079229563.pngJulin_AragnM_0-1789079229563.png この方法では、機能リセットを生成し、接続した後、機能リセットエスカレーション手順に関連するDES[MC_RGM_FRE]ビットが見えます。 なぜDES->0を読んでいるのか分かりませんが、デバッガが接続されたままであれば、リセットシーケンスに干渉しリセットが発生するのではないかと思います。私が共有した手順でテストしてみて、DESが実際に設定されているかどうかを確認することをお勧めします。 状況を随時お知らせください。 よろしくお願いします、 ジュリアン
記事全体を表示
CircO2 Nitric Oxide Tablets Review: A Complete Buyer's Guide CircO2 is a nitric oxide support supplement made by Advanced Bionutritionals. Unlike a lot of pills you swallow with water, CircO2 comes in a quick-dissolving tablet (sometimes called a lozenge) that melts in your mouth. This is one of the things that makes it stand out from other CircO2 Tablets on the market. The main idea behind CircO2 Oxygen Booster and Circulation Support is simple: help your body make more nitric oxide, so your blood vessels can relax and widen. When that happens, blood (and the oxygen it carries) can move more freely through your body. That can mean more energy, warmer hands and feet, and better stamina during the day.   Re: CircO2 Nitric Oxide Tablets Review: A Complete Buyer's Guide CircO2 is a nitric oxide support supplement in USA, Canada, UK, Australia and New Zealand from Advanced Bionutritionals designed to promote healthy circulation. Unlike traditional supplements that you swallow with water, ORIGINAL CircO2 comes as a fast-dissolving tablet, or lozenge, that melts in your mouth. This convenient format helps set it apart from many other circulation-support tablets. The goal of CircO2 Oxygen Booster and Circulation Support is to support the body’s natural production of nitric oxide. Nitric oxide helps blood vessels relax and expand, which may allow blood and oxygen to circulate more efficiently throughout the body. By supporting healthy blood flow, CircO2 may help promote everyday energy, stamina, and circulation, including helping hands and feet feel warmer.
記事全体を表示
S32k344 MBIST LBIST 我正在 Green Hills 的一个项目中实施 S32k344 BIST。由于我不使用 Tresos 或 NXP DS,所以我使用的是源代码形式的 SW32K3_SPD_1.0.6_D2512。我能够导入大部分 bist 函数,但有一些我不确定的定义(到处都找不到它们)。请问有人能回答以下问题吗? 1. 当 S32k344 处于锁定步进模式时,我可以运行 LBIST MBIST 吗? 2. 我通过检查代码猜测以下定义是否正确? #define BIST_MBIST_0 1U #define BIST_MBIST_1 2U #define BIST_MBIST_2 3U #define BIST_MBIST_3 4U #define BIST_MBIST_4 5U #define BIST_MBIST_5 6U #define BIST_MBIST_6 7U #define BIST_MBIST_7 8U #define BIST_MBIST_8 9U #define BIST_MBIST_9 10U #define BIST_MBIST_10 11U #define BIST_LBIST_0 0U 我使用的配置数据如下: static const BIST_CHANNEL_CONFIG_TYPE BistConfig[BIST_SAFETYBOOTCFG_NB] = { { (BIST_CHANNEL_TYPE)BIST_MBIST_0, (BIST_CONTROL_TYPE)((0x80100000U) | BIST_MBIST_PTR_VAL(BIST_MBIST_1)) }, { (BIST_CHANNEL_TYPE)BIST_MBIST_1, (BIST_CONTROL_TYPE)((0x80100000U) | BIST_MBIST_PTR_VAL(BIST_MBIST_2)) }, { (BIST_CHANNEL_TYPE)BIST_MBIST_2, (BIST_CONTROL_TYPE)((0x80100000U) | BIST_MBIST_PTR_VAL(BIST_MBIST_3)) }, { (BIST_CHANNEL_TYPE)BIST_MBIST_3, (BIST_CONTROL_TYPE)((0x80100000U) | BIST_MBIST_PTR_VAL(BIST_MBIST_4)) }, { (BIST_CHANNEL_TYPE)BIST_MBIST_4, (BIST_CONTROL_TYPE)((0x80100000U) | BIST_MBIST_PTR_VAL(BIST_MBIST_5)) }, { (BIST_CHANNEL_TYPE)BIST_MBIST_5, (BIST_CONTROL_TYPE)((0x80100000U) | BIST_MBIST_PTR_VAL(BIST_MBIST_6)) }, { (BIST_CHANNEL_TYPE)BIST_MBIST_6, (BIST_CONTROL_TYPE)((0x80100000U) | BIST_MBIST_PTR_VAL(BIST_MBIST_7)) }, { (BIST_CHANNEL_TYPE)BIST_MBIST_7, (BIST_CONTROL_TYPE)((0x80100000U) | BIST_MBIST_PTR_VAL(BIST_MBIST_8)) }, { (BIST_CHANNEL_TYPE)BIST_MBIST_8, (BIST_CONTROL_TYPE)((0x80100000U) | BIST_MBIST_PTR_VAL(BIST_MBIST_9)) }, //#endif { (BIST_CHANNEL_TYPE)BIST_MBIST_9, (BIST_CONTROL_TYPE)((0x80100000U) | BIST_MBIST_PTR_VAL(BIST_MBIST_10)) }, { (BIST_CHANNEL_TYPE)BIST_MBIST_10, (BIST_CONTROL_TYPE)(0x00100000U) }, { (BIST_CHANNEL_TYPE)BIST_LBIST_0, (BIST_CONTROL_TYPE)((0x00001108U) | BIST_LBIST_PTR_VAL(BIST_NIL)) } }; Re: S32k344 MBIST LBIST 你好, 1. 当 S32k344 处于锁定步进模式时,我可以运行 LBIST MBIST 吗? 是的。S32K344 锁步架构不会阻止 STCU2 LBIST/MBIST 的执行。BIST 机制是设备功能安全基础设施的一部分,旨在测试由 STCU2 管理的逻辑和存储器。The S32K3 功能安全 Manual explicitly lists both lockstep and STCU2 LBIST/MBIST as safety mechanisms of the 设备. 2. 我通过检查代码猜测以下定义是否正确? 对于 S32K344 来说,这些数值基本正确,但从功能安全角度来看,在功能安全启动配置中包含 MBIST_10 (HSE_ROM) 并非必需,建议直接使用经过验证的 SPD 配置。 顺祝商祺! Peter Re: S32k344 MBIST LBIST 彼得 非常感谢您的回复。我这几天一直被BIST测试问题困扰着。我正在使用 S32k344 白板进行测试,代码是用 Green Hills Multi IDE rev 8.1 版本 的。安全靴自检未通过。我确信核心和外设都满足最大时钟频率要求。我的核心时钟频率为 160MHz,来自外部晶振 16MHz 和 PLL,AIPS_PLAT_CLK 为 80MHz,AIPS_SLOW_CLK 为 40MHz,DCM_CLK 为 40MHz,LBIST_CLK 为 40MHz,QSPI_MEM_CLK 为 160MHz。当设备从 BIST 运行复位时,出现以下错误:DES 寄存器为 0x00408175,一些保留位被设置,FES 寄存器为 0x2000(这没有意义)。请问您能否回答以下问题? 1. 对于上面提到的所有时钟信号,是否应该通过 MC_CGM->MUX_0_DC_x 寄存器启用它们?我正在获得 信息相互矛盾,目前这些功能已启用。 2. 在参考手册的 STCU2 章节中,有这样一段话:“在 EMAC 时间戳存储器上运行 MBIST 时,应适当配置 MC_CGM.MUX_9_DC_0[DIV],以确保 EMAC_CLK_TS 至少是 AIPS_SLOW_CLK 频率的 1.5 倍。”那是不是意味着我必须配置时钟并在 MC_CGM->MUX_9_DC_0 寄存器中启用它? 3. 如果我想查看 SW32K3_SPD_1.0.6_D2512 软件包中的示例代码 S32_SPD_Demo,我猜我需要安装最新的 NXP Design Studio,将 spd zip 文件作为更新站点导入,还需要 RTD 软件包,是这样吗? 4. 我认为 MBIST 10 是 HSE_RAMS,MBIST 11 是 HSE_ROMS,请参阅 SPD 文档文件夹中的下表。 MBIST BIST ID BIST实例名称 RESET 功能域 安全靴 功能安全诊断 0 SYS0_RAMS 主要 ü ü 1 SYS1_RAMS 主要 ü ü 2 DMA_TCD_RAM 主要 ü ü 3 CM7_0_TOP 主要 ü ü 4 CM7_1_TOP 主要 ü ü 5 FLEX_CAN_RAMS 主要 ü ü 6 QSPI_PERI_RAMS 主要 ü ü 7 EMAC_TSN_RAM 主要 ü ü 8 EMAC_RAMS 主要 ü ü 9 b03_ETF_RAMS 主要 ü ü 10 HSE_RAMS 主要 ü ü 11 HSE_ROMS 主要   ü Re: S32k344 MBIST LBIST 我的问题有了新的进展,在我启用 STCU_RUNSW_REG 中的第 8 位和第 9 位以使用 PLL 之后,我一直看到 DES 寄存器为 0x11,FES 寄存器为 0x10。bist_get_exec_status(BIST_SAFETYBOOT_CFG) 返回值为 NOT RUN (0x03)。BIST ERR_STAT 寄存器中没有任何内容,END 标志也没有设置。FCCU NCF_S0 寄存器中的第 2 位已设置。BIST 似乎没有启动,但我确实看到了 RESET。我通过写入另一侧银行的闪存来捕获寄存器设置。 Re: S32k344 MBIST LBIST 我检查了所有可能的时钟,我相信它们是正确的。我还将寄存器中的配置数据与 NXP studio spd 示例项目中的值进行了比较,它们也是正确的。一条新信息。系统从 BIST RESET 后,我在 DCMROD3 寄存器中看到值 0x18。我该如何解决这个错误?谢谢。 XRen_Parker_0-1788544110794.pngXRen_Parker_0-1788544110794.pngXRen_Parker_0-1788544110794.pngXRen_Parker_0-1788544110794.pngXRen_Parker_0-1788544110794.pngXRen_Parker_0-1788544110794.png Re: S32k344 MBIST LBIST 你好, STCU 自检序列正在进入并到达 ST_DONE RESET 阶段。但是,STCU 还报告了一个不可恢复的故障 (STCU_URF),这就解释了为什么 SAF BIST 驱动程序随后报告 BIST_NORUN。因此,问题似乎是 STCU 执行/配置失败,而不是 BIST 从未触发信号的情况。 在 S32K3 上,同时看到破坏性复位和功能性复位指示通常表明您正在查看复位历史记录,而不是当前的复位源。 既然你在移植软件,我建议先从仅进行 MBIST 测试开始,看看它是否能从 PLL 源通过。 另外,我建议你再检查一下测试的时钟设置。 顺祝商祺! Peter Re: S32k344 MBIST LBIST 你好, 在 S32K344 上,RCCU 报告锁步不匹配,并且当连接到调试器时,经常会出现与 RCCU 相关的故障,而这些故障在独立执行中永远不会发生。 如果您按照示例中的设置进行操作,您将看到完整的 BIST(内置自测试)。 示例已测试,默认情况下完全可用。 但是您的端口报告 URF 故障,这说明并非所有部件都相同。 查阅STCU文档,用户可以设置指向测试的指针。 54.9.4 STCU2 配置 (CFG) petervlna_0-1788766597312.pngpetervlna_0-1788766597312.pngpetervlna_0-1788766597312.pngpetervlna_0-1788766597312.png 您可以先尝试减少测试用例,然后慢慢添加更多测试用例。 在 MBIST 和 LBIST 控制寄存器中,您可以设置哪个测试将是最后一个: petervlna_1-1788766735386.pngpetervlna_1-1788766735386.pngpetervlna_1-1788766735386.pngpetervlna_1-1788766735386.png 例如,通过指向 CFG 寄存器中的某个位置,您可以执行单个 MBIST 分区: petervlna_2-1788766853581.pngpetervlna_2-1788766853581.pngpetervlna_2-1788766853581.pngpetervlna_2-1788766853581.png petervlna_3-1788766973925.pngpetervlna_3-1788766973925.pngpetervlna_3-1788766973925.pngpetervlna_3-1788766973925.png 顺祝商祺! Peter Re: S32k344 MBIST LBIST 我尝试按顺序运行 mbist,也尝试过单独运行 mbist 测试 ID。结果相同,未观察到新的状态。能否在触发之前确认以下用于安全启动的 SCU2 寄存器设置?谢谢。 XRen_Parker_0-1788899133217.pngXRen_Parker_0-1788899133217.pngXRen_Parker_0-1788899133217.png Re: S32k344 MBIST LBIST 这是为社区中在 S32k344 微控制器中实现 LBIST/MBIST 时遇到困难的人们准备的。经过数日毫无进展后,我终于看到测试通过了。我通过对 SPD 驱动程序 1.06 进行自定义移植实现了这一点。驱动程序代码运行正常,只是需要将故障配置为不可恢复故障。以下是需要配置的时钟,如果其中任何一个没有正确设置,测试将失败,状态为 BIST_NORUN(0x03),因为测试序列是并发运行的,看不到其他状态,也没有设置完成位。 1. 配置 FXOSC 模块 CTRL 寄存器以使用外部振荡器或晶体,这是获得 160MHz(S32k344 的最大频率)的唯一方法。 2. 配置 PLL 电路的 PLLDIG 模块,通过配置 PLLDV 寄存器中的 rdiv、mfi 和 odiv2 位,确保输出最大频率。 3. 按照参考手册中的步骤,设置 MC_CGM_MUX_x 寄存器,为 core_clk 和 emac_clk 切换 PLL 时钟。 4. 配置 MC_CGM-MUX_0 和 MC_CGM-MUX_9 寄存器以获取以下时钟信号。 AIPS_PLAT_CLK 设置为 80 MHz AIPS_SLOW_CLK 设置为 40 MHz HSE_CLK 设置为 80 MHz DCM_CLK 设置为 40 MHz LBIST_CLK 设置为 40MHz QSPI_MEM_CLK 设置为 160MHz EMAC_CLK 设置为 80MHz 注意:不要设置 RUNSW 寄存器中的第 8 位和第 9 位,如果设置了它们,测试将失败。SPD驱动程序代码中没有实现这一点。我之所以提到这一点,是因为参考手册中存在相互矛盾的信息。
記事全体を表示
PCF85263AT/AJ -- Minutes value displayed on the screen is showing an arbitrary value As part of the code migration task, we are facing an issue where the BSF flag is being set. Due to the BSF flag being set, the EMON bit in the Minutes register is also getting set. As a result, the Minutes value displayed on the screen is showing an arbitrary value. Additionally, the Year value is not being saved correctly and continuously shows 2000 even after setting the RTC date and time. I tried to test the condition mentioned below, but the problem still persists.  I set the flag register (0x43) to 0x00 and read it immediately; it showed 0x00. However, when I read the register again after 3 seconds, the value was set again to 0x08 (or 0x00).   Re: PCF85263AT/AJ -- Minutes value displayed on the screen is showing an arbitrary value Hello Ris_eek Good day! The BSF flag is not simply failing to clear. Instead, the RTC is detecting a new battery switch-over event and setting BSF again. According to the datasheet, BSF is set whenever the battery switch-over logic detects a power transition event The fact that it re-asserts after ~3 seconds means the VDD supply is repeatedly dropping below the battery switch-over threshold causing repeated VDD>VBAT>VDD transitions. Each transition re-sets the BSF. RafaR_0-1788887610951.pngRafaR_0-1788887610951.pngRafaR_0-1788887610951.pngRafaR_0-1788887610951.pngRafaR_0-1788887610951.png This constant voltage fluctuation causes the RTC to constantly reset, which is why it only shows the year 2000. I recommend checking if there's a problem with the power supply signal. I hope this information has helped you, please let me know if you need help with anything else. Have a great day and best of luck. Re: PCF85263AT/AJ -- Minutes value displayed on the screen is showing an arbitrary value Dear Rafar; Thanks for your mail.    In the hardware, the VDD (4.93 VDC) and VBAT (3.02 VDC) voltages are constant. As a precaution against voltage fluctuations, a 100 nF capacitor is connected across the battery supply. The Battery Switch Register (26h) is set to 0x00. Therefore, the BSM (Battery Switch Mode) is configured to switch at the Vth level. The Vth level is 1.5 V because the BSTH (Battery Switch Threshold Voltage) bit is set to 0. As per Figure 25, referenced in previous email: When VDD < Vth, the BSF is set to 1. When VDD > VBAT, the BSF should be cleared. However, under the power-ON condition, the measured voltage is VDD = 4.93 VDC, which is greater than VBAT = 3.02 V. Even then, the BSF is not cleared. Could you please clarify why the BSF remains set even though VDD is greater than VBAT? Re: PCF85263AT/AJ -- Minutes value displayed on the screen is showing an arbitrary value Hello Ris_eek Good day! The datasheet says the following: The assertion of the flag BSF (register Flags, address 2Bh) can be used to generate an interrupt at pins INTA and INTB. The interrupt can be generated as a pulsed signal or alternatively as a permanently active signal, which follows the condition of bit BSF. BSF remains set until cleared by command. The reference image I sent also indicates the following: "cleared via interface." It’s not automatically, you have to cleared I hope this information has helped you, please let me know if you need help with anything else. Have a great day and best of luck. Re: PCF85263AT/AJ -- Minutes value displayed on the screen is showing an arbitrary value Okay RafaR Thank you for this. But the BSF flag is cleared in software, but after some time, it is set again, as described in my previous post.
記事全体を表示
i.MX8M Plus 上的 U-Boot 进行 SWUpdate A/B OTA 更新 您好,NXP团队: 我正在使用以下方法在i.MX8M Plus LPDDR4 EVK上实现 OTA: 约克托·沃诺斯 Linux 6.18.20 U-Boot 2026.04 SWUpdate 2026.05.1 当前进展 SWUpdate 已成功集成到 Yocto 中。 已成功生成 .swu 文件代码包,软件包. SWUpdate软件包安装正常。 硬件兼容性检查正在进行中。 使用 SWUpdate 成功更新了 /etc/ota-version。 原始文件处理程序正在运行。 现在我想实现生产级别的 A/B OTA,具备自动回滚和签名更新功能。 问题 请问NXP推荐的以下解决方案是什么? A/B 根文件系统分区布局。 基于 U-Boot 启动计数/启动限制的回滚。 SWUpdate 与 U-Boot 环境集成。 更正 fw_env.config / libubootenv 配置。 签名 .swu包裹核实。 防回滚/版本保护。 安全启动 + 软件更新集成。 目前,OTA 更新已完成,但 SWUpdate 报告: Cannot initialize environment from /etc/fw_env.config Cannot persistently store update state NXP是否有关于i.MX8M Plus上SWUpdate + A/B + U-Boot回滚 + 签名OTA的参考设计、应用笔记或示例? 谢谢。 i.MX 8M | i.MX 8M Mini | i.MX 8M Nano Yocto Project Re: SWUpdate A/B OTA with U-Boot on i.MX8M Plus 你好, 我们不提供开箱即用的标准 EVK A/B 更新框架。A/B 更新、回滚策略和断电故障保护启动选择是系统级功能,您必须使用 U-Boot + SWUpdate 来实现。最接近的参考文献有: AN12900 - 使用 CAAM 和 Mender 或 SWUpdate 的 Linux 安全 OTA 原型。 AN13872 - 启用 SWUpdate。 meta-swupdate-imx - 带有 SWUpdate 的 NXP Yocto 层。 顺祝商祺! Re: SWUpdate A/B OTA with U-Boot on i.MX8M Plus 嘿vp1 , 虽然我没有确切的答案,但我希望您知道 Torizon 现在支持任何 i。MX SoC。它已在全球许多关键的 i.MX8MPlus 产品中部署(主要在 Toradex 系统模块上)。它确实具有高度可靠的OTA升级功能(默认是OSTree,但可以更改)。 它包含开箱即用的安全启动、防回滚、漏洞管理(符合欧盟 CRA 标准)等功能。 该操作系统是免费开源的;如果您需要帮助,我们很乐意提供帮助。如果您想在 i.MX8M Plus LPDDR4 EVK 或您自己的硬件上进行尝试,请联系我们。 www.torizon.io 不好意思打个广告,我在Torizon工作,觉得这个话题可能跟我相关。
記事全体を表示
TJA1410_10Base_T1s Hi,NXP I am testing 10BASE-T1S using the S32K5 and TJA1410. Currently, I can see waveforms on the TX pin, and there are also waveforms on the RX and ED pins, which indicates that signals can be received on the MDI. However, the TX pin is unable to send data to the MDI. TX_RX_ED-2026-09-10-19-26-50.bmpTX_RX_ED-2026-09-10-19-26-50.bmp Best Reagrds. xianlong Ethernet PHY Re: TJA1410_10Base_T1s Hello @wuxianlong , How have you measured the MDI? MDI is differential interface so you need to use differential oscilloscope probe. MDI requires proper differential termination - please refer to AN14787 - Application note 10BASE-T1S Ethernet PMD transceiver TJA1410, Rev. 1.0 , chapter 3.3. Best regards, Pavel Re: TJA1410_10Base_T1s Hello @wuxianlong , I hope this email finds you well. I am writing to you in regard to a product currently in your possession – an NPI (New Product Introduction) - S32K5 - which has not been officially launched yet. Please be advised that customers who have been granted early access to such products have assigned their field engineers. Your designated field engineer should serve as your primary support channel for any issues, concerns or queries you may have about this product. Our online support team will be opening a wider range of support for this product once it has been officially released. Until then, we will not be equipped to provide the desired assistance. We appreciate your understanding in this matter. Thank you for your understanding. Best regards, Pavel
記事全体を表示
Audifort评测:它真的能一夜之间消除耳鸣吗? Audifort评测:它真的能一夜之间消除耳鸣吗? 如果你每天都要忍受耳朵里持续不断的铃声、嗡嗡声或咔哒声,你就知道寻求缓解这种痛苦有多么令人绝望。在网上寻找解决方案时,您可能会遇到诸如液体营养滴剂之类的铺天盖地的广告。 奥迪福特 这暗示着可以立即见效或一夜之间缓解耳鸣。 简而言之,答案是否定的:Audifort 并不能在一夜之间消除耳鸣。 没有任何口服补品或天然滴剂能在 24 小时内立即治愈慢性耳鸣或重建受损的听觉神经。 但这并不意味着该公式毫无用处。如果将 Audifort 视为一种天然膳食补充剂而不是灵丹妙药,那么它提供的营养成分可以滋养内耳血管,并随着时间的推移镇静过度活跃的神经信号。 在此 Audifort 评测,我们超越销售营销,分析滴剂的实际作用原理、核心成分、合理的预期时间、潜在的副作用,以及如何避免虚假的在线信息。
記事全体を表示
CircO2 一氧化氮片剂评测:完整购买指南 CircO2 是由 Advanced Bionutritionals 公司生产的一氧化氮支持补充剂。与许多需要用水吞服的药片不同,CircO2 采用速溶片(有时称为锭剂)的形式,可在口中融化。这是它与其他市面上的 CircO2 片剂相比脱颖而出的原因之一。 CircO2 氧气增强剂和循环支持剂背后的主要理念很简单:帮助你的身体产生更多的一氧化氮,从而使你的血管放松和扩张。这时,血液(以及血液携带的氧气)就能更自由地在体内流动。这意味着白天精力更充沛、手脚更温暖、耐力更好。   Re: CircO2 Nitric Oxide Tablets Review: A Complete Buyer's Guide CircO2 是 Advanced Bionutritionals 公司在美国、加拿大、英国、澳大利亚和新西兰销售的一种一氧化氮支持补充剂,旨在促进健康的血液循环。与需要用水吞服的传统补充剂不同, ORIGINAL CircO2是一种速溶片剂或锭剂,可在口中融化。这种便捷的形式使其有别于许多其他促进血液循环的片剂。 CircO2 氧气增强剂和循环支持剂的目标是支持人体自然产生一氧化氮。一氧化氮有助于血管放松和扩张,从而使血液和氧气更有效地在体内循环。CircO2 通过促进健康的血液流动,有助于提升日常精力、耐力和血液循环,包括帮助手脚感觉更温暖。
記事全体を表示
PCF85263AT/AJ -- 画面に表示される分数が任意の値を示しています コード移行作業の一環として、BSFフラグが設定されてしまうという問題に直面しています。BSFフラグが設定されていることにより、分レジスタのEMONビットも設定されます。 その結果、画面に表示される「分」の値は任意の値を示しています。さらに、年の値が正しく保存されず、RTCの日付と時刻を設定した後でも、2000年と表示され続けます。 下記の条件でテストを試みましたが、問題は依然として解決していません。 フラグレジスタ(0x43)を0x00に設定し、すぐに読み取ったところ、0x00が表示されました。しかし、3秒後にレジスタを再度読み取ったところ、値は再び0x08(または0x00)に設定されていた。 Re: PCF85263AT/AJ -- Minutes value displayed on the screen is showing an arbitrary value こんにちは、Ris_eekさん 良い一日! BSFフラグが単にクリアできないというだけではない。代わりにRTCは新しいバッテリー切り替えイベントを検出し、再びBSFを設定しています。データシートによると、バッテリー切り替えロジックが電源遷移イベントを検出したときにBSFが設定されます 約3秒後に再アサートされるという事実は、VDDの電源が繰り返しバッテリー切り替え閾値を下回り、繰り返しVDD>VBAT>VDDの切り替えを引き起こしていることを意味します。各遷移はBSFをリセットします。 RafaR_0-1788887610951.pngRafaR_0-1788887610951.pngRafaR_0-1788887610951.pngRafaR_0-1788887610951.pngRafaR_0-1788887610951.png この絶え間ない電圧変動により、RTC(リアルタイムクロック)が常にリセットされるため、常に2000年と表示されるのです。電源信号に問題がないか確認することをお勧めします。 この情報がお役に立てば幸いです。他に何かご不明な点がありましたら、お気軽にお問い合わせください。 良い一日をお過ごしください。幸運を祈ります。 Re: PCF85263AT/AJ -- Minutes value displayed on the screen is showing an arbitrary value こんにちは、Ris_eekさん 良い一日! データシートには次のように記載されています。 フラグBSF(レジスタフラグ、アドレス2Bh)の主張は、ピンINTAおよびINTBで割り込みを生成するために使用できます。割り込みはパルス信号として生成されるか、あるいはビットBSF条件に従う恒常アクティブ信号として生成されることがあります。BSFはコマンドによって解除されるまで設定されたままになります。 私が送った参照画像には「インターフェース経由でクリア済み」と記載されています。 自動的にクリアされるわけではなく、クリアする必要があります。 この情報がお役に立てば幸いです。他に何かご不明な点がありましたら、お気軽にお問い合わせください。 良い一日をお過ごしください。幸運を祈ります。 Re: PCF85263AT/AJ -- Minutes value displayed on the screen is showing an arbitrary value 親愛なるラファールへ メールありがとうございます。   ハードウェアにおいては、VDD(4.93VDC)とVBAT(3.02VDC)の電圧は一定である。電圧変動を防ぐため、バッテリー供給には100 nFのコンデンサが接続されています。 バッテリースイッチレジスタ(26h)は0x00に設定されています。したがって、BSM(バッテリースイッチモード)はVレベルでスイッチングするように設定されています。Vレベルが1.5Vなのは、BSTH(バッテリースイッチ閾値電圧)ビットが0に設定されているためです。 前回のメールで参照した図25に示すように: VDD < Vth の場合、BSF は 1 に設定されます。 VDD > VBAT の場合、BSF をクリアする必要があります。 しかし、電源投入状態では、測定された電圧はVDD = 4.93 VDCであり、これはVBAT = 3.02 Vよりも大きい。それでも、BSFは許可されない。 なぜBDDがVBATより大きいのにBSFが固定されているのか、説明していただけますか? Re: PCF85263AT/AJ -- Minutes value displayed on the screen is showing an arbitrary value 了解、ラファール ありがとうございます。 しかし、BSFフラグはソフトウェア上でクリアされますが、しばらくするとまた設定されます。これは私の前回の投稿で説明した通りです。
記事全体を表示
S32K312:SWT0 功能 RESET 升级、破坏性 RESET 状态和 SRAM 保持 您好,NXP团队, 我正在使用 S32 Design Studio 和 AUTOSAR RTD 7.0.1 / AUTOSAR 4.9 开发 S32K312 Cortex-M7。 我目前正在测试 MC_RGM 复位行为,特别是 SWT0 功能复位、功能复位升级、破坏性复位、SRAM 保持、SBAF/恢复行为以及电源 IP 复位 API。 1. SWT0 功能重置升级 我使用 SWT0 超时来生成功能性重置。 我的 MC_RGM 配置如下: MC_RGM_FRET_FRET((uint32)15U), MC_RGM_DRET_DRET((uint32)0U) 我观察到功能 RESET 计数器不断增加: SWT0 功能复位 #1 -> FREC = 1 SWT0 功能复位 #2 -> FREC = 2 ... SWT0 功能复位 #14 -> FREC = 14 下一次 SWT0 重置后,FREC 被清除/重置,但我没有观察到预期的结果: DES[MC_RGM_FRE] = 1 我的问题是: SWT0_RST 是否参与 S32K312 上的 MC_RGM 功能复位升级计数器 (FREC)? 当 FREC 达到 FRET = 15 时,是否应该生成 MC_RGM_FRE 并设置 DES[MC_RGM_FRE]? 升级后,FES、DES、FREC、FRET、Power_Ip_GetResetReason() 的确切值应该是什么? SWT0参与FRET升级是否需要任何额外的配置? SBAF/恢复处理是否会干扰FRET增强? 是否存在与 SWT0/FRET 升级相关的已知勘误或已知的 S32K312 行为? 当我连续运行该应用程序时,在第 15 次功能性 RESET 后,应用程序/调试器停止运行,而不是让我观察到预期的破坏性 RESET。我想知道这是否与复位序列、SBAF 恢复或调试器有关。 2.我希望每次 SWT0 功能重置都具有破坏性。 为了测试目的,我还想实现以下目标: SWT0 超时 ↓ 功能复位 ↓ 立即进行破坏性重置 而不是等待 15 次功能性 RESET。 能否通过配置来实现: 共振频率 = 1U; 具体来说: FRET = 1 是否会导致第一次符合条件的 SWT0 功能 RESET 升级为破坏性 RESET? 是否需要进行任何额外的 MC_RGM 配置? SWT0 是否一定符合此次升级的资格要求? SBAF/恢复行为会影响这一点吗? RTD 7.0.1 配置是否直接支持此功能? 3.每次功能 RESET 后,SRAM 数据都会被清除。 根据我对 S32K3xx 参考手册的理解,SRAM/系统存储器在功能复位后应该能够保留。 我创建了一个SRAM测试变量: #define SRAM_TEST_ADDR ((volatile uint32_t *)0x204007d4U) 并用它来验证功能 RESET 后的数据保留情况。 但是,我观察到在功能复位后,SRAM 数据被清除/重写为零。 我的问题是: SRAM 在功能复位期间是否由硬件保留,但之后被软件覆盖? S32K312 中哪些 SRAM 区域能够保证在功能 RESET 后保留其内容? 将变量放入 SRAM 中,使其内容在功能 RESET 后得以保留的推荐方法是什么? 我应该使用专用的 .noinit 吗?或者保留SRAM部分? 保持数据是否需要特定的 MC_RGM/SRAM 配置? 对于 RTD 7.0.1 版本,在功能 RESET 后保留应用程序数据的推荐方法是什么? 4. 直接软件破坏性 RESET 我还在测试使用 Power IP 进行直接软件破坏性重置: Power_Ip_Init(&Power_Ip_HwIPsConfigPB); gVar= Power_Ip_GetResetReason(); for (count = 0; count < 10125000; count++); Power_Ip_PerformReset(&Power_Ip_HwIPsConfigPB); 我当前的 MC_RGM 配置包含: static const Power_Ip_MC_RGM_ConfigType Power_Ip_MC_RGM_ConfigPB = { (MCU_DEST_RESET), ... MC_RGM_FRET_FRET((uint32)15U), MC_RGM_DRET_DRET((uint32)0U) }; 破坏性重置发生,但调试器反复失去通信并重新建立通信。 我看到类似这样的信息: 信息:DAP IDCODE = 0x6BA02477 信息:DAP 已成功启动。DP CTRL/STAT = 0xF0000000 重复多次,随后是: 已收到中断命令。停止执行。 我想了解: 在破坏性 RESET 过程中,DAP 是否会反复重新连接? 在破坏性重置序列中,Cortex-M7 究竟发生了什么? 破坏性 RESET 后,CPU 何时才能再次可用? 调试单个软件破坏性重置的推荐方法是什么? 5. Power_Ip_PerformReset() 之前的断点行为 我无法可靠地在以下位置立即触发断点: Power_Ip_PerformReset(&Power_Ip_HwIPsConfigPB); 我在 API 调用前添加了一个延迟,希望调试器有足够的时间获取访问权限。 有时只有在我手动暂停目标程序并恢复执行后,才能到达断点。 我想了解: 为什么即使 RESET API 之前有延迟,调试器仍然会错过断点? 这是否与目标设备反复重置以及调试器通过 DAP 重新连接有关? 是否有推荐的方法可以在破坏性 RESET 之前或之后立即捕获 CPU 状态? RTD DISABLE_DEBUGGER_TRAP 选项与此行为有关吗? 6.电源 IP 初始化和 Power_Ip_SetMode() 我的RTD产品提供: void Power_Ip_Init( const Power_Ip_HwIPsConfigType *HwIPsConfigPtr); void Power_Ip_SetMode(const Power_Ip_ModeConfigType *ModeConfigPtr); void Power_Ip_PerformReset( const Power_Ip_HwIPsConfigType *HwIPsConfigPtr ); Power_Ip_ResetType Power_Ip_GetResetReason(void); Power_Ip_RawResetType Power_Ip_GetResetRawValue(void); 我目前使用: Power_Ip_Init(&Power_Ip_HwIPsConfigPB); 和: gVar = Power_Ip_GetResetReason(); 我的模式配置为 POWER_IP_RUN_MODE。 我想澄清以下问题: 在使用 Power IP 重置 API 之前,Power_Ip_Init(&Power_Ip_HwIPsConfigPB) 是否是正确的初始化方法? 软件功能/破坏性RESET测试是否需要 Power_Ip_SetMode() 函数? 由于我选择的模式是 POWER_IP_RUN_MODE,那么对于此 RESET 测试,是否可以省略 Power_Ip_SetMode()? 如何使用 RTD 7.0.1 配置单独的软件功能RESET和软件破坏性RESET配置? 环境 MCU:S32K312 核心:Cortex-M7 S32DS:S32 设计工作室 AUTOSAR:4.9 RTD:7.0.1 RESET 源:SWT0 格子:15 DRET:0 我可以提供完整的测试应用程序 Power_Ip_PBcfg.c,链接器配置、MC_RGM 寄存器捕获和调试器日志(如有需要)。 谢谢! Re: S32K312: SWT0 Functional Reset Escalation, Destructive Reset Status and SRAM Retention 你好@Sharif417 , 1. SWT0 功能 RESET 升级 SWT0_RST 参与 S32K312 的 FREC,当 FREC 达到 15 时,DES[MC_RGM_FRE] 将被设置,您可以通过调用 Power_Ip_GetResetReason() 并返回“MCU_MC_RGM_FRE_RESET”来读取该值。 所有未被降级(通过 MCRGM.FERD)的功能复位源均符合递增 FREC 的条件。 请注意,Power_Ip_Init() 会清除 MC_RGM.DES(在保存其值之后),因此请尝试在初始化电源模块之前获取寄存器值,或者直接读取复位原因。 如果阈值大于 8,则恢复模式可能会对此产生影响,因为恢复模式默认设置为“8”。sBAF 也可能干扰DRET,而不是 FRET 。您可以看到,如果阈值为“0”,则会变为 0xF: Julin_AragnM_0-1788816978772.pngJulin_AragnM_0-1788816978772.pngJulin_AragnM_0-1788816978772.pngJulin_AragnM_0-1788816978772.pngJulin_AragnM_0-1788816978772.pngJulin_AragnM_0-1788816978772.pngJulin_AragnM_0-1788816978772.pngJulin_AragnM_0-1788816978772.png 当我连续运行应用程序时,在第 15 次功能性 RESET 后,应用程序/调试器会停止运行,而不是让我观察到预期的破坏性 RESET。我想知道这是否与 RESET 顺序、SBAF 恢复或调试器有关。 与其尝试保持调试器连接,不如尝试在第 15 次功能 RESET 后再连接,或者尝试通过 UART 或类似方式打印 RESET 原因? 2. 我希望每次 SWT0 功能重置都具有破坏性。 是的,FRET=1 足以使每次功能性 RESET都发出破坏性 RESET。 无需额外添加 MC_RGM。 sBAF/恢复模式不应对此产生影响。 是的,您可以直接在 POWER 模块-> “模块配置” -> “MCU 复位配置” -> “功能复位升级阈值”中进行配置。 3. 每次功能RESET后,SRAM 数据都会被清除。 正确,功能复位后 SRAM 数据会被保留。 根据衍生型号的不同,S32K3 可提供 16KB、32KB 或高达 64KB 的待机 RAM。 您可以找到一些关于如何通过待机 RAM 放置和使用变量的示例: [RTD600 MCAL & IP] S32K3 低功耗管理 AN 和演示 S32K3 低功耗管理 AN 和演示 例如 S32K312 待机模式和待机 RAM 和 PAD 保持 DS3.5 RTD300 待机内存被清除/重写的原因是默认的 startup_cm7.s 文件。S32DS 提供的复位功能会初始化所有 SRAM,无论复位原因(POR、破坏性复位、功能性复位)如何。您必须对其进行修改,以便在发出功能 RESET 时,SRAM 初始化跳过已分配的备用 RAM。请参考以下社区帖子: S32K311 待机内存保留。 4. 直接软件破坏性RESET 是的,当 MCU 被发出功能性/破坏性复位指令时,调试子系统和时钟都会被重新初始化,这意味着调试器必须再次重新协商 DAP 访问权限。 破坏性复位会导致芯片的大部分部件(除少数模块外)复位。功能复位会导致所有通信外设和内核复位。通信协议的有效性无法保证,重置后假定它们会被重新初始化。 与其尝试保持连接,不如使用调试器的“附加到目标”选项: Julin_AragnM_1-1788817136992.pngJulin_AragnM_1-1788817136992.pngJulin_AragnM_1-1788817136992.pngJulin_AragnM_1-1788817136992.pngJulin_AragnM_1-1788817136992.pngJulin_AragnM_1-1788817136992.pngJulin_AragnM_1-1788817136992.pngJulin_AragnM_1-1788817136992.png 5. Power_Ip_PerformReset() 之前的断点行为 很可能你只是错过了重新连接的窗口期。你可以不用 for() 循环,而是使用 while(flag),其中flag是一个变量,你需要在重新连接调试器后,通过“表达式”选项卡手动更改它。 6. 电源 IP 初始化和 Power_Ip_SetMode() 是的,在使用电源 API 之前必须调用 Power_Ip_Init()。 我建议这样做。您可以通过 Power_Ip_PerformReset() 执行 RESET,但是您只能在 McuResetConfig 容器中配置破坏性 RESET 或功能性 RESET。您可以声明两种电源模式:一种用于功能性复位,一种用于破坏性复位。然后只需调用 Power_Ip_SetMode(Functional_Reset) 或 Power_Ip_SetMode(Destructive_Reset)。 可以省略,但是,为了确保每个模块都已正确设置和配置,您应该调用 Power_Ip_SetMode(RUN_MODE)。如果你的项目不需要这一步,你可以省略它。 请参阅 A6.2。 我做了一个简单的测试,在设置 FRET=1 并通过 Power_Ip_SetMode() API 执行功能性复位后,可以看到报告了 FRE_RESET: Julin_AragnM_2-1788817284857.pngJulin_AragnM_2-1788817284857.pngJulin_AragnM_2-1788817284857.pngJulin_AragnM_2-1788817284857.pngJulin_AragnM_2-1788817284857.pngJulin_AragnM_2-1788817284857.pngJulin_AragnM_2-1788817284857.pngJulin_AragnM_2-1788817284857.png 此致, 朱利安 Re: S32K312: SWT0 Functional Reset Escalation, Destructive Reset Status and SRAM Retention 你好@Sharif417 , 1. SWT0 功能 RESET 升级 1. 为什么在第 15 次 SWT0 功能 RESET 后,我没有观察到 DES[MC_RGM_FRE] = 1? 正如我之前提到的,Power_Ip_Init() API 会清除 DES 寄存器,这意味着你应该通过Power_Ip_GetResetReason() 来读取复位原因。 2. 当 FREC 达到 FRET = 15 时,MCU 是否必须进入破坏性 RESET?如果发生破坏性重置,为什么我的测试分区中的 SRAM 内容会被保留? 是的。只要 FREC 达到 FRET 中配置的阈值,MCU 就应该发出破坏性 RESET。要么没有发生破坏性重置,要么变量放置错误。 3. 我是否遗漏了其他 MC_RGM/SBAF 配置? 不。对于功能复位升级,只需设置 FRET 即可。 2. 功能RESET和破坏性RESET后的 SRAM 数据保持 1. 请问这种 SRAM 行为在 S32K312 上是否正常?我的 SRAM 测试区域是否可能位于即使在破坏性 RESET 后仍能保留的存储区域中? 不应该出现这种情况。发生破坏性 RESET 事件后,SRAM 中的所有内容都将丢失。 能否详细说明一下您是如何测试直接软件破坏性重置的? 从你的项目中来看,如果你使用的是 Power_Ip_PerformReset() API,它配置为功能性复位,而不是破坏性复位。 Julin_AragnM_0-1788891886849.pngJulin_AragnM_0-1788891886849.pngJulin_AragnM_0-1788891886849.pngJulin_AragnM_0-1788891886849.pngJulin_AragnM_0-1788891886849.pngJulin_AragnM_0-1788891886849.pngJulin_AragnM_0-1788891886849.png 实际上,我通过保存这些值并通过 UART 共享它们来测试这一点,其中 FRDM-A-S32K312 通过 SW2 发出功能复位,FRET 设置为 15,在 15 次 SW 功能复位后,我可以看到 MCU_MC_RGM_FRE_RESET 被生成。这是在RTD 6.0.0版本中出现的问题,请查看以下日志: [RESET] Reason : MCU_F_EXR_RESET (RGM_FES F_FR0) [RESET] FRE Counter: 0 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 1 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 2 [RESET] Reason : MCU_SW_DEST_RESET (RGM_DES F_DR29) [RESET] FRE Counter: 0 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 1 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 2 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 3 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 4 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 5 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 6 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 7 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 8 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 9 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 10 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 11 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 12 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 13 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 14 [RESET] Reason : MCU_MC_RGM_FRE_RESET (RGM_DES F_DR6) [RESET] FRE Counter: 0 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 1 在 RTD 7.0.1 中,我观察到了您提到的同样现象(从 FRE 未发出破坏性复位信号,到调试器断开连接): [RESET] Reason : MCU_SW_DEST_RESET (RGM_DES F_DR29) [RESET] FRE Counter: 0 [RESET] Reason : MCU_SW_DEST_RESET (RGM_DES F_DR29) [RESET] FRE Counter: 0 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 1 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 2 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 3 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 4 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 5 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 6 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 7 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 8 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 9 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 10 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 11 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 12 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 13 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 14 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 0 这让我相信 RTD 6.0.0 和 RTD 7.0.1 的功率驱动器之间存在一些差异,从而导致了这些症状。我目前还无法确定这是配置问题还是程序错误,请给我一些时间进行分析,如有必要,我会联系内部团队。 此致, 朱利安 Re: S32K312: SWT0 Functional Reset Escalation, Destructive Reset Status and SRAM Retention 你好,朱利安, 谢谢你的解释。 我已在我的 S32K312 上重复了测试,并想澄清两点观察结果。我附上了完整的项目文件夹,以便您查看配置并重现该问题。 1. SWT0 功能 RESET 升级 我已配置: FRET = 15U;DRET = 0U; 使用SWT0 和 125 毫秒超时来生成功能性 RESET。 我可以观察到每次功能重置后FREC都会增加: SWT0 reset #1 -> FREC = 1 SWT0 reset #2 -> FREC = 2 ... SWT0 reset #14 -> FREC = 14 然而,当下一次 SWT0 功能 RESET 发生且FRET = 15阈值达到时,我无法观察到预期的破坏性 RESET 状态: DES[MC_RGM_FRE] = 1 此外,在第 15 次功能 RESET 后,MCU 继续运行,我没有观察到预期的破坏性 RESET 行为。我的 SRAM 测试分区中存储的 SRAM 数据也完好无损。 我已使用以下命令禁用恢复行为: IP_DCM_GPR->DCMRWP1 |= (3 << 22); 请您审阅一下我附上的项目文件并提出一些疑问: 为什么在第 15 次 SWT0 功能 RESET 后,我没有观察到DES[MC_RGM_FRE] = 1 ? 当FREC达到FRET = 15 时,MCU 是否必须进入破坏性 RESET?如果发生破坏性重置,为什么我的测试分区中的 SRAM 内容会被保留? 我是否遗漏了其他 MC_RGM/SBAF 配置? 2. 功能RESET和破坏性RESET后的 SRAM 数据保持 我创建了一个专用的 SRAM 分区/区域,并将测试数据存储在该区域中。 我已经确认,在多次SWT0 功能 RESET后,SRAM 值得以保留,这是预期的结果。 然而,即使在第 15 次功能 RESET 之后(我预期 FRET 升级会产生破坏性 RESET),SRAM 值仍然保持不变。 我还测试了直接软件破坏性重置,重置后 SRAM 值仍然保留。 因此,我的观察结果是: SWT0 functional reset ↓ SRAM value retained 15th functional reset / expected FRET escalation ↓ SRAM value still retained Direct software destructive reset ↓ SRAM value also retained 请问这种 SRAM 行为在 S32K312 上是否正常?我的 SRAM 测试区域是否可能位于即使经过破坏性 RESET 也会保留的存储区域中? 我附上了完整的 S32K312 项目文件夹,包括链接器配置、RTD 配置、MC_RGM 配置、SWT0 配置和测试应用程序,以便您可以查看实际的存储器放置和复位配置。 感谢您的支持。 Re: S32K312: SWT0 Functional Reset Escalation, Destructive Reset Status and SRAM Retention 你好,朱利安, 谢谢你的解释。 按照要求,我已附上包含我目前正在使用的软件破坏性重置测试代码/项目的ZIP 文件。 既然您提到 FRET 升级在RTD 6.0.0中运行正常,能否请您分享一下您用于测试的RTD 6.0.0 代码/项目? 我想使用您的 RTD 6.0.0 工作代码作为参考,并将其与我的 RTD 7.0.1 项目进行比较,以了解行为上的差异。 另外,您提到您怀疑RTD 6.0.0 和 RTD 7.0.1 的电源驱动程序可能存在差异或问题,请您在完成分析后告知我您关于RTD 7.0.1 问题的发现? 感谢您的支持。 此致, 谢里夫 Re: S32K312: SWT0 Functional Reset Escalation, Destructive Reset Status and SRAM Retention 你好@Sharif417 , 在查看了 Power_Ip 驱动程序的源代码后,我发现 Power_Ip_MC_RGM_GetResetReason() API 中应用了功能复位升级计数器的修复程序,其中添加了第三个子句,如果 DES 有位设置且 FRET 寄存器当前读取非零,则也会进入 FES。 RTD 6.0.0: /* If the fields of Destructive Event Status Register (DES) are set then the status of FES register must be ignored */ if (((uint32)0U == ActiveValue) || (MCU_POWER_ON_RESET == ResetReason)) { ... } RTD 7.0.1: /* If the fields of Destructive Event Status Register (DES) are set then the status of FES register must be ignored */ /* If functional reset escalation to destructive reset is disabled, then the status of FES register must be ignored if the fields of Destructive Event Status Register (DES) other than DES[F_POR] are set. */ /* If functional reset escalation to destructive reset is enabled and if the fields of Destructive Event Status Register (DES), other than DES[F_POR], are set, then based on these fields user should check if the cause of the destructive reset was due to functional reset escalation or if it was triggered directly by a destructive reset source, in which case FES needs to be ignored */ if (((uint32)0U == ActiveValue) || (MCU_POWER_ON_RESET == ResetReason) || (((uint32)0U != DesResetStatus) && ((uint32)0U != Power_Ip_pxMC_RGM->FRET))) { ... } 这就是 FES 标志被覆盖的原因。如果我理解正确,硬件可以正确发出破坏性 RESET,但是 RESET 模块却报告了功能性 RESET。您可以通过在第 15 次功能 RESET 后直接读取 IP_MC_RGM->DES 寄存器来确认这一点: Julin_AragnM_0-1788976448272.pngJulin_AragnM_0-1788976448272.pngJulin_AragnM_0-1788976448272.pngJulin_AragnM_0-1788976448272.png 我认为一个可行的办法是修改第三条语句,检查 MCU_MC_RGM_FRE_RESET 事件是否已经发生: /* ----------------------------------------------------------------------- * Enter the FES block if: * a) DES is empty (no destructive reset logged), OR * b) DES has only the Power-On Reset bit, OR * c) DES has bits set AND FRE escalation is configured (FRET != 0) * AND the DES reason is NOT already MCU_MC_RGM_FRE_RESET * ----------------------------------------------------------------------- */ if (((uint32)0U == ActiveValue) || (MCU_POWER_ON_RESET == ResetReason) || (((uint32)0U != DesResetStatus) && ((uint32)0U != Power_Ip_pxMC_RGM->FRET) && (MCU_MC_RGM_FRE_RESET != ResetReason))) 请注意,修改 RTD 驱动程序不受支持,正确的做法是等待软件团队发布官方修复程序。我会将此行为报告给内部团队,并提供他们的反馈意见(如有)。感谢您指出这个问题。 最后,关于您的项目,我看到您是通过Power_Ip_PerformReset() 函数执行 RESET 的。正如我之前提到的,您在复位配置中配置了“功能复位”,您必须将其更改为“破坏性复位”才能执行软件破坏性复位: Julin_AragnM_2-1788976691375.pngJulin_AragnM_2-1788976691375.pngJulin_AragnM_2-1788976691375.pngJulin_AragnM_2-1788976691375.png 或者添加一个 ModeSettingConf 结构,选择 DEST_RESET,然后调用 Power_Ip_SetMode() 函数: Julin_AragnM_3-1788976695121.pngJulin_AragnM_3-1788976695121.pngJulin_AragnM_3-1788976695121.pngJulin_AragnM_3-1788976695121.png 此致, 朱利安 Re: S32K312: SWT0 Functional Reset Escalation, Destructive Reset Status and SRAM Retention 你好,朱利安, 根据您的建议,我进行了额外的测试,直接读取 MC_RGM DES 和 FES 寄存器,而不是仅仅依赖于 Power_Ip_GetResetReason()。 在这个测试中,我将复位类型配置为软件功能复位,FRET = 15。每次软件功能 RESET 后,FREC 计数器都会递增。在第 15 次软件功能 RESET 后,我在 main() 函数的 Clock_Ip_Init() 函数之前设置了一个断点,并直接读取了 MC_RGM 寄存器: volatile uint32_t regValueDes = 0U;volatile uint32_t regValueFes = 0U; regValueDes = IP_MC_RGM->DES;regValueFes = IP_MC_RGM->FES; gVar = Power_Ip_GetResetReason(); 完整的测试代码如下: int main(void) { volatile uint32_t regValueDes = 0U; volatile uint32_t regValueFes = 0U; regValueDes = IP_MC_RGM->DES; regValueFes = IP_MC_RGM->FES; gVar = Power_Ip_GetResetReason(); Clock_Ip_Init(&Clock_Ip_aClockConfig[0]); Siul2_Port_Ip_Init( NUM_OF_CONFIGURED_PINS_PortContainer_0_BOARD_InitPeripherals, g_pin_mux_000InitConfigArr_PortContainer_0_BOARD_InitPeripherals); Power_Ip_Init(&Power_Ip_HwIPsConfigPB); gVar = Power_Ip_GetResetReason(); /* Disable recovery mode */ IP_DCM_GPR->DCMRWP1 |= (3 << 22); for (count = 0; count < 10125000; count++); Power_Ip_PerformReset(&Power_Ip_HwIPsConfigPB); } 在第 15 次功能复位后,我在 Clock_Ip_Init() 之前直接读取了 IP_MC_RGM->DES。但是,我没有观察到 DES[MC_RGM_FRE] = 1。DES 值保持为 0,而 FES 包含 RESET 状态(在我的测试中为 0x20000001)。 基于此观察,我认为该问题可能不仅限于 Power_Ip_MC_RGM_GetResetReason() 或 RESET-reason 报告。由于我在时钟和电源初始化之前直接读取 MC_RGM DES 寄存器,因此我期望 DES[MC_RGM_FRE] 指示 FRET 升级(如果发生了破坏性升级)。 因此,请您确认一下,在第 15 次功能 RESET 之后,MC_RGM 硬件层面是否发生了 FRET 升级?如果此时预期会发生破坏性升级,请问为什么 IP_MC_RGM->DES 仍然为 0? 另外,除了您发现的 Power_Ip_MC_RGM_GetResetReason() 问题之外,您能否确认是否存在与 FREC/FRET 升级机制本身相关的其他 RTD 7.0.1 问题或配置问题? 感谢您协助我们调查此事。 Re: S32K312: SWT0 Functional Reset Escalation, Destructive Reset Status and SRAM Retention 你好@Sharif417 , 我相信破坏性重置确实正在发生;您可以按照以下我的测试步骤进行操作: 将 FRET 设置为 1,这样每次功能复位都会触发功能复位升级。 声明两个变量(一个用于 DES 寄存器,一个用于 FES 寄存器),以及一个 while() 循环,用于在读取变量之前停止内核。 int main(void) { volatile uint8_t debug = 1; while(debug); volatile uint32_t regValueDes = 0; volatile uint32_t regValueFes = 0; regValueDes = IP_MC_RGM -> DES; regValueFes = IP_MC_RGM -> FES; ... }​ 将代码烧录到 MCU 后,将调试变量改为 0 以启用程序运行并断开调试器。 执行功能复位(您可以使用自己的程序,或者使用我提供的示例)。 选择“连接到运行目标”将其连接到 MCU。 暂停执行,将调试变量设置为 0,并读取 DES 和 FES 变量: Julin_AragnM_0-1789079229563.pngJulin_AragnM_0-1789079229563.png 通过这种方法,在生成功能复位并附加之后,我可以看到与功能复位升级过程相关的 DES[MC_RGM_FRE] 位。 我不确定你为什么会读取 DES->0,如果调试器一直连接着,我想这会干扰 RESET 序列,并产生 RESET。我建议按照我分享的步骤进行测试,并确认 DES 是否真的被设置好了。 请随时告知我最新情况。 此致, 朱利安
記事全体を表示
S32k344 MBIST LBIST 私は現在、グリーンヒルズプロジェクトにおいてS32k344 BISTの実装を進めているところです。私はTresosやNXP DSを使用していないため、ソースコード形式のSW32K3_SPD_1.0.6_D2512を使用しています。ほとんどのbist関数はインポートできましたが、いくつかの定義だけはどこにも分かりません(どこにも見つかりません)。以下の質問に誰か答えてもらえますか? 1. S32k344がロックステップモードの状態でLBIST MBISTを動かしてもいいですか? 2. コードを調べて推測した以下の定義は正しいでしょうか? #define BIST_MBIST_0 1U #define BIST_MBIST_1 2U #define BIST_MBIST_2 3U #define BIST_MBIST_3 4U #define BIST_MBIST_4 5U #define BIST_MBIST_5 6U #define BIST_MBIST_6 7U #define BIST_MBIST_7 8U #define BIST_MBIST_8 9U #define BIST_MBIST_9 10U #define BIST_MBIST_10 11U #define BIST_LBIST_0 0U 私が使用した設定データは以下のとおりです。 static const BIST_CHANNEL_CONFIG_TYPE BistConfig[BIST_SAFETYBOOTCFG_NB] = ヤージュ ヤージュ (BIST_CHANNEL_TYPE)BIST_MBIST_0、 (BIST_CONTROL_TYPE)((0x80100000U) | BIST_MBIST_PTR_VAL(BIST_MBIST_1)) }、 ヤージュ (BIST_CHANNEL_TYPE)BIST_MBIST_1、 (BIST_CONTROL_TYPE)((0x80100000U) | BIST_MBIST_PTR_VAL(BIST_MBIST_2)) }、 ヤージュ (BIST_CHANNEL_TYPE)BIST_MBIST_2、 (BIST_CONTROL_TYPE)((0x80100000U) | BIST_MBIST_PTR_VAL(BIST_MBIST_3)) }、 ヤージュ (BIST_CHANNEL_TYPE)BIST_MBIST_3、 (BIST_CONTROL_TYPE)((0x80100000U) | BIST_MBIST_PTR_VAL(BIST_MBIST_4)) }、 ヤージュ (BIST_CHANNEL_TYPE)BIST_MBIST_4、 (BIST_CONTROL_TYPE)((0x80100000U) | BIST_MBIST_PTR_VAL(BIST_MBIST_5)) }、 ヤージュ (BIST_CHANNEL_TYPE)BIST_MBIST_5、 (BIST_CONTROL_TYPE)((0x80100000U) | BIST_MBIST_PTR_VAL(BIST_MBIST_6)) }、 ヤージュ (BIST_CHANNEL_TYPE)BIST_MBIST_6、 (BIST_CONTROL_TYPE)((0x80100000U) | BIST_MBIST_PTR_VAL(BIST_MBIST_7)) }、 ヤージュ (BIST_CHANNEL_TYPE)BIST_MBIST_7、 (BIST_CONTROL_TYPE)((0x80100000U) | BIST_MBIST_PTR_VAL(BIST_MBIST_8)) }、 ヤージュ (BIST_CHANNEL_TYPE)BIST_MBIST_8、 (BIST_CONTROL_TYPE)((0x80100000U) | BIST_MBIST_PTR_VAL(BIST_MBIST_9)) }、 //#endif ヤージュ (BIST_CHANNEL_TYPE)BIST_MBIST_9、 (BIST_CONTROL_TYPE)((0x80100000U) | BIST_MBIST_PTR_VAL(BIST_MBIST_10)) }、 ヤージュ (BIST_CHANNEL_TYPE)BIST_MBIST_10、 (BIST_CONTROL_TYPE)(0x00100000U) }、 ヤージュ (BIST_CHANNEL_TYPE)BIST_LBIST_0、 (BIST_CONTROL_TYPE)((0x00001108U) | BIST_LBIST_PTR_VAL(BIST_NIL)) } }; Re: S32k344 MBIST LBIST こんにちは、 1. S32k344がロックステップモードの状態でLBIST MBISTを動かしてもいいですか? はい。S32K344のロックステップアーキテクチャは、STCU2 LBIST/MBISTの実行を妨げません。BIST機構はデバイスセーフティインフラストラクチャの一部であり、STCU2で管理される論理とメモリをテストするために設計されています。S32K3セーフティマニュアルには、ロックステップとSTCU2 LBIST/MBISTの両方が装置のセーフティ機構として明示されています。 2. コードを調べて推測した以下の定義は正しいでしょうか? 数値値は基本的にS32K344に正確ですが、セーフティ上の観点からセーフティブート構成にMBIST_10(HSE_ROMs)を含める必要はなく、推奨されるパスは検証済みのSPD構成を直接利用することです。 よろしくお願いいたします。 ピーター Re: S32k344 MBIST LBIST ピーター、 ご返信いただき、誠にありがとうございます。ここ数日間、BISTテストの問題で行き詰まっています。私はS32k344ホワイトボードでテストしており、コードはGreen HillsのマルチIDE rev 8.1で構築しています。セーフティブーツのBISTが通っていません。コアやペリフェラルの最大クロック要件は満たされていると思います。外部水晶発振器16MHzとPLLからcore_clkを160MHzに設定し、AIPS_PLAT_CLKは80MHz、AIPS_SLOW_CLKは40MHz、DCM_CLKは40MHz、LBIST_CLKは40MHz、QSPI_MEM_CLKは160MHzに設定しています。bist 実行からユニットをリセットすると、DES レジスタが 0x00408175 になり、いくつかの予約ビットが設定され、FES レジスタが 0x2000 になります (意味がわかりません)。以下の質問にお答えいただけますでしょうか? 1. 上記のすべてのクロック信号は、MC_CGM->MUX_0_DC_x レジスタを介して有効化する必要がありますか?私は手に入れている 情報が矛盾していますが、現在有効になっています。 2. リファレンス・マニュアルのSTCU2章には、「EMACタイムスタンプメモリ上でMBISTを実行する際、MC_CGM MUX_9_9_DC_0[DIV]はEMAC_CLK_TS AIPS_SLOW_CLK周波数の少なくとも1.5倍であるべきであるように適切に設定されるべきである。」つまり、クロックを設定して、MC_CGM->MUX_9_DC_0レジスタで有効にする必要があるということですか? 3. SW32K3_SPD_1.0.6_D2512パッケージでS32_SPD_Demo例コードを見たい場合は、最新のNXP Design Studioをインストールし、spd zipファイルを更新サイトとしてインポートし、RTDパッケージも同時にインポートする必要があると思います。それで合っていますか? 4. MBIST 10はHSE_RAMS、MBIST 11はHSE_ROMSだと思います。SPDドキュメントフォルダにある以下の表を参照してください。 MBIST BIST ID BISTインスタンス名 ドメインのリセット セーフティブーツ セーフティ診断 0 SYS0_RAMS 主要 ü ü 1 SYS1_RAMS 主要 ü ü 2 DMA_TCD_RAM 主要 ü ü 3 CM7_0_TOP 主要 ü ü 4 CM7_1_TOP 主要 ü ü 5 フレックス・キャン・ラムズ 主要 ü ü 6 QSPI_PERI_RAMS 主要 ü ü 7 EMAC_TSN_RAM 主要 ü ü 8 EMAC_RAMS 主要 ü ü 9 b03_ETF_RAMS 主要 ü ü 10 HSE_RAMS 主要 ü ü 11 HSE_ROMS 主要   ü Re: S32k344 MBIST LBIST 私の問題に関する最新情報です。STCU_RUNSW_REGのビット8と9を有効にしてPLLを使用するようにした後、DESレジスタが常に0x11、FESレジスタが0x10になっていることが確認されています。bist_get_exec_status(BIST_SAFETYBOOT_CFG) の戻り値は NOT RUN (0x03) です。BIST ERR_STATレジスタには何も格納されておらず、ENDフラグも設定されていません。FCCU NCF_S0レジスタでは、ビット2がセットされています。BISTは開始されなかったようですが、リセットは確認できました。私は、別のバンクのフラッシュメモリに書き込むことで、レジスタ設定を取得しました。 Re: S32k344 MBIST LBIST 考えられるすべての時計を確認しましたが、どれも正確だと思います。レジスタ内の設定データをNXP Studio SPDのサンプルプロジェクトの値と比較してみましたが、それらも正しかったです。新しい情報が1つあります。システムがBISTリセットから復帰した後、DCMROD3レジスタに値0x18が記録されているのを確認しました。このエラーを解決するにはどうすればよいですか?ありがとう。 XRen_Parker_0-1788544110794.pngXRen_Parker_0-1788544110794.pngXRen_Parker_0-1788544110794.pngXRen_Parker_0-1788544110794.pngXRen_Parker_0-1788544110794.pngXRen_Parker_0-1788544110794.png Re: S32k344 MBIST LBIST こんにちは、 STCUの自己診断シーケンスが開始され、ST_DONEリセットフェーズに到達しました。しかし、STCUは回復不能な故障(STCU_URF)も報告しており、これがSAFのBISTドライバがその後BIST_NORUNを報告する理由を説明しています。したがって、この問題はBISTが一度もトリガーされなかったCASEではなく、STCUの実行・設定失敗であるようです。 S32K3では、破壊リセットと機能リセットの両方の表示が同時に見られる場合、それはリセット履歴を表示している可能性が高く、必ずしも直接のリセット元を表示しているとは限りません。 ソフトウェアを移植するとのことですので、まずはPLLから取得したデータでMBISTテストのみを実行して、合格するかどうかを確認してみることをお勧めします。 また、テスト時の時計設定を再度確認してください。 よろしくお願いいたします。 ピーター Re: S32k344 MBIST LBIST こんにちは、 S32K344では、RCCUがロックステップの不一致を報告し、デバッガと接続すると、単独実行では決して起こらないRCCU関連の故障が発生することも珍しくありません。 例の設定に従うなら、フルBISTです。 この例はテスト済みで、デフォルト設定で完全に動作します。 しかし、あなたのポートはURFエラーを報告しているので、すべてが同じではないことがわかります。 STCUのドキュメントを見ると、ユーザーはテストへのポインタを設定できます。 54.9.4 STCU2 設定 (CFG) petervlna_0-1788766597312.pngpetervlna_0-1788766597312.pngpetervlna_0-1788766597312.pngpetervlna_0-1788766597312.png まずは検査を縮小してから、徐々に検査を増やす方法もあります。 MBISTおよびLBIST制御レジスタでは、どのテストが最後に行われるかを設定できます: petervlna_1-1788766735386.pngpetervlna_1-1788766735386.pngpetervlna_1-1788766735386.pngpetervlna_1-1788766735386.png 例えばCFGレジスタで を指し示すことで、単一のMBISTパーティションを実行できます: petervlna_2-1788766853581.pngpetervlna_2-1788766853581.pngpetervlna_2-1788766853581.pngpetervlna_2-1788766853581.png petervlna_3-1788766973925.pngpetervlna_3-1788766973925.pngpetervlna_3-1788766973925.pngpetervlna_3-1788766973925.png よろしくお願いいたします。 ピーター Re: S32k344 MBIST LBIST mbistを順番に実行してみたり、個別のmbistテストIDを使って実行してみたりしました。結果は同じで、新たな状態は観察されなかった。トリガー設定直前のセーフティブート用の以下のSCU2レジスタ設定を確認できますか?ありがとう。 XRen_Parker_0-1788899133217.pngXRen_Parker_0-1788899133217.pngXRen_Parker_0-1788899133217.png Re: S32k344 MBIST LBIST これは、S32k344マイクロコントローラでLBIST/MBISTの実装に苦労しているコミュニティの方々のためのものです。何日も進展がなかった後、ようやく試験に合格することができました。SPDドライバー1.06のカスタム移植でそうしました。ドライバーコードは動作しますが、故障を回復不能な障害に設定する必要があります。以下は設定が必要なクロックです。これらのいずれかが正しく設定されていない場合、テストシーケンスが同時に実行され、他のステータスが表示されず、完了ビットが設定されないため、テストは BIST_NORUN(0x03) ステータスで失敗します。 1. FXOSCモジュールのCTRLレジスタを設定して外部オシレーターまたは水晶発振器を使用するようにします。これがS32k344で最大160MHzを得る唯一の方法です。 2. PLL回路用にPLLDIGモジュールを設定し、PLLDVレジスタのrdiv、mfi、およびodiv2ビットを設定して、最大周波数が出力されるようにします。 3. PLLクロックをcore_clkとemac_clkのリファレンス・マニュアルの手順に従って切り替え、MC_CGM_MUX_xレジスタ設定を行います。 4. MC_CGM->MUX_0 レジスタと MC_CGM->MUX_9 レジスタを設定して、以下のクロック信号を取得します。 AIPS_PLAT_CLKを80MHzに設定 AIPS_SLOW_CLKを40MHzに設定 HSE_CLKを80MHzに設定 DCM_CLKを40MHzに設定 LBIST_CLKは40MHz QSPI_MEM_CLKを160MHzに設定 EMAC_CLKは80MHz     注: RUNSW レジスタのビット 8 と 9 を設定しないでください。設定するとテストが失敗します。これはSPDドライバーコードには記載されていません。リファレンス・マニュアルには矛盾した情報があるため、これを言及します。
記事全体を表示
S32K312: SWT0 Functional Reset Escalation, Destructive Reset Status and SRAM Retention Hello NXP Team, I am working with an S32K312 Cortex-M7 using S32 Design Studio and AUTOSAR RTD 7.0.1 / AUTOSAR 4.9. I am currently testing the MC_RGM reset behavior, particularly SWT0 functional reset, functional reset escalation, destructive reset, SRAM retention, SBAF/recovery behavior, and the Power IP reset APIs. 1. SWT0 functional reset escalation I am using SWT0 timeout to generate functional resets. My MC_RGM configuration is: MC_RGM_FRET_FRET((uint32)15U), MC_RGM_DRET_DRET((uint32)0U) I observe the functional reset counter increasing: SWT0 functional reset #1 -> FREC = 1 SWT0 functional reset #2 -> FREC = 2 ... SWT0 functional reset #14 -> FREC = 14 After the next SWT0 reset, FREC is cleared/reset, but I do not observe the expected: DES[MC_RGM_FRE] = 1 My questions are: Does SWT0_RST participate in the MC_RGM functional reset escalation counter (FREC) on S32K312? When FREC reaches FRET = 15, should MC_RGM_FRE be generated and should DES[MC_RGM_FRE] be set? What exact values should I expect for FES, DES, FREC, FRET, Power_Ip_GetResetReason() immediately after the escalation? Is any additional configuration required for SWT0 to participate in FRET escalation? Can SBAF/recovery handling interfere with FRET escalation? Is there any known erratum or known S32K312 behavior related to SWT0/FRET escalation? When I run the application continuously, after the 15th functional reset the application/debugger stops instead of allowing me to observe the expected destructive reset. I would like to know whether this is related to the reset sequence, SBAF recovery, or the debugger. 2. I want every SWT0 functional reset to become destructive For testing purposes, I would also like to achieve: SWT0 timeout ↓ Functional reset ↓ Immediate destructive reset instead of waiting for 15 functional resets. Can this be achieved by configuring: FRET = 1U;  Specifically: Does FRET = 1 cause the first qualifying SWT0 functional reset to escalate to a destructive reset? Is any additional MC_RGM configuration required? Is SWT0 guaranteed to be a qualifying source for this escalation? Can SBAF/recovery behavior affect this? Is this supported directly through RTD 7.0.1 configuration? 3. SRAM data is cleared after every functional reset According to my understanding of the S32K3xx Reference Manual, SRAM/system memory should be preserved across a functional reset. I created an SRAM test variable: #define SRAM_TEST_ADDR ((volatile uint32_t *)0x204007d4U) and use it to verify retention across functional resets. However, I observe that the SRAM data is being cleared/re-written to zero after a functional reset. My questions are: Is SRAM preserved by the hardware during functional reset but overwritten afterward by software? Which SRAM regions are guaranteed to retain their contents across functional reset on S32K312? What is the recommended way to place a variable in SRAM so that its contents are retained across functional reset? Should I use a dedicated .noinit or retained SRAM section? Is there any specific MC_RGM/SRAM configuration required for retention? What is the recommended RTD 7.0.1 method for retaining application data across functional reset? 4. Direct software destructive reset I am also testing a direct software destructive reset using the Power IP: Power_Ip_Init(&Power_Ip_HwIPsConfigPB); gVar= Power_Ip_GetResetReason(); for (count = 0; count < 10125000; count++); Power_Ip_PerformReset(&Power_Ip_HwIPsConfigPB); My current MC_RGM configuration contains: static const Power_Ip_MC_RGM_ConfigType Power_Ip_MC_RGM_ConfigPB = { (MCU_DEST_RESET), ... MC_RGM_FRET_FRET((uint32)15U), MC_RGM_DRET_DRET((uint32)0U) }; The destructive reset occurs, but the debugger repeatedly loses and re-establishes communication. I see messages such as: INFO: DAP IDCODE = 0x6BA02477 INFO: DAP successfully powered up. DP CTRL/STAT = 0xF0000000 repeated multiple times, followed by: Interrupt command received. Halting execution. I would like to understand: Is repeated DAP reconnection expected during a destructive reset? What exactly happens to the Cortex-M7 during the destructive-reset sequence? When does the CPU become available again after the destructive reset? What is the recommended way to debug a single software destructive reset? 5. Breakpoint behavior before Power_Ip_PerformReset() I cannot reliably hit a breakpoint immediately before: Power_Ip_PerformReset(&Power_Ip_HwIPsConfigPB); I added a delay before the API, expecting the debugger to have enough time to gain access. Sometimes the breakpoint is only reached after I manually pause the target and then resume execution. I would like to understand: Why can the debugger miss the breakpoint even though there is a delay before the reset API? Is this related to the target repeatedly resetting and the debugger reconnecting through DAP? Is there a recommended method for catching the CPU immediately before or immediately after a destructive reset? Is the RTD DISABLE_DEBUGGER_TRAP option relevant to this behavior? 6. Power IP initialization and Power_Ip_SetMode() My RTD provides: void Power_Ip_Init( const Power_Ip_HwIPsConfigType *HwIPsConfigPtr); void Power_Ip_SetMode(const Power_Ip_ModeConfigType *ModeConfigPtr); void Power_Ip_PerformReset( const Power_Ip_HwIPsConfigType *HwIPsConfigPtr ); Power_Ip_ResetType Power_Ip_GetResetReason(void); Power_Ip_RawResetType Power_Ip_GetResetRawValue(void); I currently use: Power_Ip_Init(&Power_Ip_HwIPsConfigPB); and: gVar = Power_Ip_GetResetReason(); My mode configuration is POWER_IP_RUN_MODE. I would like clarification on: Is Power_Ip_Init(&Power_Ip_HwIPsConfigPB) the correct initialization before using the Power IP reset APIs? Is Power_Ip_SetMode() required for software functional/destructive reset testing? Since my selected mode is POWER_IP_RUN_MODE, can Power_Ip_SetMode() be omitted for this reset test? How should I configure separate software functional-reset and software destructive-reset configurations using RTD 7.0.1? Environment MCU: S32K312 Core: Cortex-M7 S32DS: S32 Design Studio AUTOSAR: 4.9 RTD: 7.0.1 Reset source: SWT0 FRET: 15 DRET: 0 I can provide the complete test application, Power_Ip_PBcfg.c, linker configuration, MC_RGM register captures, and debugger logs if required. Thank you. Re: S32K312: SWT0 Functional Reset Escalation, Destructive Reset Status and SRAM Retention Hello @Sharif417, 1. SWT0 functional reset escalation SWT0_RSTdoes participate in FREC for S32K312, and when FREC reaches 15, DES[MC_RGM_FRE] is set, which you should be able to read by calling Power_Ip_GetResetReason(), and returning "MCU_MC_RGM_FRE_RESET". All functional reset sources that are not demoted (through MCRGM.FERD) qualify for incrementing FREC. Keep in mind that Power_Ip_Init() clears MC_RGM.DES (after saving its value), so try to get the register values before initializing Power module or simply read reset reason. Recovery Mode may affect this, if the threshold is >8, as Recovery Mode is set to '8' by default. sBAF also may interfere with DRET, not FRET. You can see it is changed to 0xF if it is '0':   Julin_AragnM_0-1788816978772.pngJulin_AragnM_0-1788816978772.pngJulin_AragnM_0-1788816978772.pngJulin_AragnM_0-1788816978772.pngJulin_AragnM_0-1788816978772.pngJulin_AragnM_0-1788816978772.pngJulin_AragnM_0-1788816978772.pngJulin_AragnM_0-1788816978772.png When I run the application continuously, after the 15th functional reset the application/debugger stops instead of allowing me to observe the expected destructive reset. I would like to know whether this is related to the reset sequence, SBAF recovery, or the debugger. Instead of trying to keep the debugger connected, can you try attaching after a 15th functional reset, or try printing the reset reason through UART or similar? 2. I want every SWT0 functional reset to become destructive Yes, FRET=1 is enough for every functional reset to issue a destructive reset. No additional MC_RGM necessary. sBAF/Recovery Mode should not affect this. Yes, you can configure it directly in POWER module -> "Module Configuration" -> "McuResetConfig" -> "Functional Reset Escalation Threshold" 3. SRAM data is cleared after every functional reset Correct, SRAM is preserved after functional reset. Depending on the derivative, S32K3 may provide 16KB, 32KB or up to 64KB for Standby RAM. You can find some examples on how to place and use a variable through Standby RAM: [RTD600 MCAL & IP] S32K3 Low Power Management AN and demos S32K3 Low Power Management AN and demos Example S32K312 Standby mode & Standby RAM and PAD keeping DS3.5 RTD300 The reason that Standby RAM is being cleared/re-written, is because the default startup_cm7.s provided by S32DS initializes all of SRAM, regardless of reset reason (POR, Destructive, Functional). You must modify it so that if a functional reset is issued, SRAM initialization skips the allocated Standby RAM. Please refer to the following community post: S32K311 standby ram retention. 4. Direct software destructive reset Yes, when MCU is issued a functional/destructive reset, the debug subsystem and clocks are all re-initialized, meaning the debugger must re-negotiate DAP access again. A destructive reset leads most parts of the chip, except a few modules, to reset. While a functional reset leads all the communication peripherals and cores to reset. The communication protocols' sanity is not guaranteed and they are assumed to be reinitialized after reset. Instead of trying to keep the connection, you can use the 'Attach to Target' option for the debugger: Julin_AragnM_1-1788817136992.pngJulin_AragnM_1-1788817136992.pngJulin_AragnM_1-1788817136992.pngJulin_AragnM_1-1788817136992.pngJulin_AragnM_1-1788817136992.pngJulin_AragnM_1-1788817136992.pngJulin_AragnM_1-1788817136992.pngJulin_AragnM_1-1788817136992.png 5. Breakpoint behavior before Power_Ip_PerformReset() Most likely you are simply missing the window to reconnect. Instead of using a for() loop, you can simply use while(flag), where flag is a variable you will change manually after reconnecting with the debugger, through the 'Expressions' tab. 6. Power IP initialization and Power_Ip_SetMode() Yes, Power_Ip_Init() must be called before using the Power APIs. I suggest doing so. You can perform resets through Power_Ip_PerformReset(), however, you can only configure either destructive or functional reset in McuResetConfig container. You can instead declare two power modes: one for functional reset, and one for destructive reset. Then simply call Power_Ip_SetMode(Functional_Reset) or Power_Ip_SetMode(Destructive_Reset). It can be omitted, however, you should call Power_Ip_SetMode(RUN_MODE) just to make sure every module is correctly gated and configured. If this is not needed in your project, you can omit it. Please se A6.2. I've made a simple test, and I can see FRE_RESET reported after setting FRET=1, and performing a functional reset through Power_Ip_SetMode() API: Julin_AragnM_2-1788817284857.pngJulin_AragnM_2-1788817284857.pngJulin_AragnM_2-1788817284857.pngJulin_AragnM_2-1788817284857.pngJulin_AragnM_2-1788817284857.pngJulin_AragnM_2-1788817284857.pngJulin_AragnM_2-1788817284857.pngJulin_AragnM_2-1788817284857.png Best regards, Julián Re: S32K312: SWT0 Functional Reset Escalation, Destructive Reset Status and SRAM Retention Hello Julián, Thank you for the clarification. I have now repeated the tests on my S32K312 and would like to clarify two observations. I am attaching the complete project folder so that you can review the configuration and reproduce the behavior. 1. SWT0 functional reset escalation I configured: FRET = 15U;DRET = 0U; and use SWT0 with a 125 ms timeout to generate functional resets. I can observe FREC increasing after each functional reset: SWT0 reset #1 -> FREC = 1 SWT0 reset #2 -> FREC = 2 ... SWT0 reset #14 -> FREC = 14 However, when the next SWT0 functional reset occurs and the FRET = 15 threshold is reached, I am not able to observe the expected destructive-reset status: DES[MC_RGM_FRE] = 1 Also, after the 15th functional reset, the MCU continues running and I do not observe the expected destructive-reset behavior. The SRAM data stored in my SRAM test partition also remains intact. I have disabled the recovery behavior using: IP_DCM_GPR->DCMRWP1 |= (3 << 22); Could you please review my attached project and clarify: Why am I not observing DES[MC_RGM_FRE] = 1 after the 15th SWT0 functional reset? After FREC reaches FRET = 15, should the MCU definitely enter a destructive reset? If a destructive reset occurs, why my SRAM contents is retained in my test partition ? Is there any additional MC_RGM/SBAF configuration that I am missing? 2. SRAM retention after functional and destructive reset I created a dedicated SRAM partition/section and stored test data in that region. I have confirmed that the SRAM value is retained across the repeated SWT0 functional resets, which is expected. However, even after the 15th functional reset, where I expect FRET escalation to generate a destructive reset, the SRAM value still remains. I also tested a direct software destructive reset, and the SRAM value was still retained after that reset as well. My observation is therefore: SWT0 functional reset ↓ SRAM value retained 15th functional reset / expected FRET escalation ↓ SRAM value still retained Direct software destructive reset ↓ SRAM value also retained Could you please clarify whether this SRAM behavior is expected on the S32K312, and whether my SRAM test region may be located in a memory area that is retained even across a destructive reset? I am attaching the complete S32K312 project folder, including the linker configuration, RTD configuration, MC_RGM configuration, SWT0 configuration, and test application, so you can review the actual memory placement and reset configuration. Thank you for your support. Re: S32K312: SWT0 Functional Reset Escalation, Destructive Reset Status and SRAM Retention Hello @Sharif417, 1. SWT0 functional reset escalation 1. Why am I not observing DES[MC_RGM_FRE] = 1 after the 15th SWT0 functional reset? As I've mentioned, Power_Ip_Init() API clears DES register, meaning you should read reset reason through Power_Ip_GetResetReason() instead.  2. After FREC reaches FRET = 15, should the MCU definitely enter a destructive reset? If a destructive reset occurs, why my SRAM contents is retained in my test partition? Yes. As long as FREC reaches the threshold configured in FRET, MCU should issue a destructive reset. Either a destructive reset is not occurring, or variable is wrongly placed.  3. Is there any additional MC_RGM/SBAF configuration that I am missing? No. For Functional Reset Escalation, simply setting FRET should suffice.  2. SRAM retention after functional and destructive reset 1. Could you please clarify whether this SRAM behavior is expected on the S32K312, and whether my SRAM test region may be located in a memory area that is retained even across a destructive reset? This should not be the case. All SRAM content is lost after a destructive reset event. Can you share how exactly are you testing the direct software destructive reset? From your project, if you are using Power_Ip_PerformReset() API, it is configured as functional reset, not destructive. Julin_AragnM_0-1788891886849.pngJulin_AragnM_0-1788891886849.pngJulin_AragnM_0-1788891886849.pngJulin_AragnM_0-1788891886849.pngJulin_AragnM_0-1788891886849.pngJulin_AragnM_0-1788891886849.png Actually, I tested this by saving the values and share them through UART, where FRDM-A-S32K312, issues a functional reset through SW2, FRET is set to 15, and after 15 SW functional resets, I can see MCU_MC_RGM_FRE_RESET being generated. This is in RTD 6.0.0, please see my log below: [RESET] Reason : MCU_F_EXR_RESET (RGM_FES F_FR0) [RESET] FRE Counter: 0 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 1 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 2 [RESET] Reason : MCU_SW_DEST_RESET (RGM_DES F_DR29) [RESET] FRE Counter: 0 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 1 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 2 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 3 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 4 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 5 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 6 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 7 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 8 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 9 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 10 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 11 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 12 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 13 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 14 [RESET] Reason : MCU_MC_RGM_FRE_RESET (RGM_DES F_DR6) [RESET] FRE Counter: 0 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 1 In RTD 7.0.1, I can see the same behavior you mention (from FRE not asserting destructive reset, to debugger disconnecting): [RESET] Reason : MCU_SW_DEST_RESET (RGM_DES F_DR29) [RESET] FRE Counter: 0 [RESET] Reason : MCU_SW_DEST_RESET (RGM_DES F_DR29) [RESET] FRE Counter: 0 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 1 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 2 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 3 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 4 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 5 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 6 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 7 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 8 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 9 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 10 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 11 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 12 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 13 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 14 [RESET] Reason : MCU_SW_FUNC_RESET (RGM_FES F_FR29) [RESET] FRE Counter: 0 This leads me to believe that there are some differences in Power driver between RTD 6.0.0 & RTD 7.0.1 which leads to these symptoms. I have not been able to pinpoint if this is an issue with configuration, or a bug, please give me some time to analyze and contact the internal team if needed. Best regards, Julián Re: S32K312: SWT0 Functional Reset Escalation, Destructive Reset Status and SRAM Retention Hello Julián, Thank you for the clarification. As requested, I have attached the ZIP file containing the software destructive-reset test code/project that I am currently using. Since you mentioned that the FRET escalation works correctly with RTD 6.0.0, could you please share the working RTD 6.0.0 code/project that you used for your test? I would like to use your RTD 6.0.0 working code as a reference and compare it with my RTD 7.0.1 project to understand the difference in behavior. Also, as you mentioned that you suspect there may be a difference or issue in the Power driver between RTD 6.0.0 and RTD 7.0.1, could you please let me know your findings regarding the RTD 7.0.1 issue once you have completed the analysis? Thank you for your support. Best regards, Sharif Re: S32K312: SWT0 Functional Reset Escalation, Destructive Reset Status and SRAM Retention Hi @Sharif417, After going through the source code for Power_Ip driver, I can see a fix for Functional Reset Escalation Counter was applied in Power_Ip_MC_RGM_GetResetReason() API, where a third clause was added, it also enter FES if DES has bits set AND the FRET register currently reads non-zero. RTD 6.0.0: /* If the fields of Destructive Event Status Register (DES) are set then the status of FES register must be ignored */ if (((uint32)0U == ActiveValue) || (MCU_POWER_ON_RESET == ResetReason)) { ... } RTD 7.0.1: /* If the fields of Destructive Event Status Register (DES) are set then the status of FES register must be ignored */ /* If functional reset escalation to destructive reset is disabled, then the status of FES register must be ignored if the fields of Destructive Event Status Register (DES) other than DES[F_POR] are set. */ /* If functional reset escalation to destructive reset is enabled and if the fields of Destructive Event Status Register (DES), other than DES[F_POR], are set, then based on these fields user should check if the cause of the destructive reset was due to functional reset escalation or if it was triggered directly by a destructive reset source, in which case FES needs to be ignored */ if (((uint32)0U == ActiveValue) || (MCU_POWER_ON_RESET == ResetReason) || (((uint32)0U != DesResetStatus) && ((uint32)0U != Power_Ip_pxMC_RGM->FRET))) { ... } This is why FES flag is overwritten. If I am correct, destructive reset is issued correctly by hardware, however, Reset module reports a functional reset instead. You can confirm this by reading the IP_MC_RGM->DES register directly after the 15th functional reset: Julin_AragnM_0-1788976448272.pngJulin_AragnM_0-1788976448272.pngJulin_AragnM_0-1788976448272.pngJulin_AragnM_0-1788976448272.png I guess a valid approach could be to change the third clause to check if MCU_MC_RGM_FRE_RESET event has already happened: /* ----------------------------------------------------------------------- * Enter the FES block if: * a) DES is empty (no destructive reset logged), OR * b) DES has only the Power-On Reset bit, OR * c) DES has bits set AND FRE escalation is configured (FRET != 0) * AND the DES reason is NOT already MCU_MC_RGM_FRE_RESET * ----------------------------------------------------------------------- */ if (((uint32)0U == ActiveValue) || (MCU_POWER_ON_RESET == ResetReason) || (((uint32)0U != DesResetStatus) && ((uint32)0U != Power_Ip_pxMC_RGM->FRET) && (MCU_MC_RGM_FRE_RESET != ResetReason))) Keep in mind that modifying the RTD drivers is not supported, and the correct approach is to wait for an official fix from the SW team. I will flag this behavior with the internal team, and provide their feedback, if any. Thank you for pointing this issue out. Lastly, regarding your project, I can see you are issuing a reset through Power_Ip_PerformReset(). As I've mentioned, you have 'Functional Reset' configured inside the Reset configuration, you must change it to 'Destructive Reset' in order to issue a Software Destructive Reset: Julin_AragnM_2-1788976691375.pngJulin_AragnM_2-1788976691375.pngJulin_AragnM_2-1788976691375.pngJulin_AragnM_2-1788976691375.png or add a ModeSettingConf structure, select DEST_RESET, and call Power_Ip_SetMode() instead: Julin_AragnM_3-1788976695121.pngJulin_AragnM_3-1788976695121.pngJulin_AragnM_3-1788976695121.pngJulin_AragnM_3-1788976695121.png Best regards, Julián Re: S32K312: SWT0 Functional Reset Escalation, Destructive Reset Status and SRAM Retention Hello Julián, Based on your recommendation, I performed an additional test by directly reading the MC_RGM DES and FES registers, rather than relying only on Power_Ip_GetResetReason(). In this test, I configured the reset type as software functional reset with FRET = 15. After each software functional reset, the FREC counter increments. After the 15th software functional reset, I placed a breakpoint in main() before Clock_Ip_Init() and directly read the MC_RGM registers: volatile uint32_t regValueDes = 0U;volatile uint32_t regValueFes = 0U; regValueDes = IP_MC_RGM->DES;regValueFes = IP_MC_RGM->FES; gVar = Power_Ip_GetResetReason(); The complete test code is as follows: int main(void) { volatile uint32_t regValueDes = 0U; volatile uint32_t regValueFes = 0U; regValueDes = IP_MC_RGM->DES; regValueFes = IP_MC_RGM->FES; gVar = Power_Ip_GetResetReason(); Clock_Ip_Init(&Clock_Ip_aClockConfig[0]); Siul2_Port_Ip_Init( NUM_OF_CONFIGURED_PINS_PortContainer_0_BOARD_InitPeripherals, g_pin_mux_000InitConfigArr_PortContainer_0_BOARD_InitPeripherals); Power_Ip_Init(&Power_Ip_HwIPsConfigPB); gVar = Power_Ip_GetResetReason(); /* Disable recovery mode */ IP_DCM_GPR->DCMRWP1 |= (3 << 22); for (count = 0; count < 10125000; count++); Power_Ip_PerformReset(&Power_Ip_HwIPsConfigPB); } After the 15th functional reset, I directly read IP_MC_RGM->DES before Clock_Ip_Init(). However, I did not observe DES[MC_RGM_FRE] = 1. The DES value remains 0, while FES contains the reset status (0x20000001 in my test). Based on this observation, I believe the issue may not be limited to Power_Ip_MC_RGM_GetResetReason() or reset-reason reporting. Since I am directly reading the MC_RGM DES register before the clock and Power initialization, I expected DES[MC_RGM_FRE] to indicate the FRET escalation if the destructive escalation had occurred. Therefore, could you please confirm whether the FRET escalation itself is occurring at the MC_RGM hardware level after the 15th functional reset? If the destructive escalation is expected at this point, could you please advise why IP_MC_RGM->DES remains 0? Also, could you please confirm whether there is any additional RTD 7.0.1 issue or configuration related to the FREC/FRET escalation mechanism itself, in addition to the Power_Ip_MC_RGM_GetResetReason() issue you identified? Thank you for your support in helping us investigate this issue. Re: S32K312: SWT0 Functional Reset Escalation, Destructive Reset Status and SRAM Retention Hello @Sharif417, I believe the destructive reset is indeed happening; you can follow my test procedure below: Set FRET=1, so each functional reset triggers a Functional Reset Escalation. Declare two variables (one for DES, and one for FES registers), as well as a while() loop for stopping the core before reading the variables. int main(void) { volatile uint8_t debug = 1; while(debug); volatile uint32_t regValueDes = 0; volatile uint32_t regValueFes = 0; regValueDes = IP_MC_RGM -> DES; regValueFes = IP_MC_RGM -> FES; ... }​ After flashing the MCU with the code, change debug variable to 0 to enable the program to run and disconnect the debugger.  Perform the functional reset (you can use your program, or the example I've provided). Attach to the MCU by selecting "Attach to Running Target". Pause the execution, set debug variable to 0, and read DES & FES variables: Julin_AragnM_0-1789079229563.pngJulin_AragnM_0-1789079229563.png With this method, after generating the functional reset, and attaching, I can see DES[MC_RGM_FRE] bit related to the Functional Reset Escalation procedure. I'm not sure why you are reading DES->0, if debugger was kept connected, I imagine this meddles with the reset sequence, and generated resets. I suggest testing it with the steps I shared and confirm if DES is really being set or not. Please keep me informed. Best regards, Julián
記事全体を表示
SWUpdate A/B OTA with U-Boot on i.MX8M Plus Hi NXP Team, I am implementing OTA on i.MX8M Plus LPDDR4 EVK using: Yocto Wrynose Linux 6.18.20 U-Boot 2026.04 SWUpdate 2026.05.1 Current Progress SWUpdate integrated successfully into Yocto. Successfully generated .swu packages. SWUpdate package installation is working. Hardware compatibility checking is working. Successfully updated /etc/ota-version using SWUpdate. rawfile handler is working. Now I want to implement production-level A/B OTA with automatic rollback and signed updates. Questions Could you please guide me on the recommended NXP approach for: A/B rootfs partition layout. U-Boot bootcount/bootlimit based rollback. SWUpdate integration with U-Boot environment. Correct fw_env.config / libubootenv configuration. Signed .swu package verification. Anti-rollback/version protection. Secure Boot + SWUpdate integration. Currently, the OTA update completes, but SWUpdate reports: Cannot initialize environment from /etc/fw_env.config Cannot persistently store update state Is there an NXP reference design, application note, or example for SWUpdate + A/B + U-Boot rollback + signed OTA on i.MX8M Plus? Thanks. i.MX 8M | i.MX 8M Mini | i.MX 8M Nano Yocto Project Re: SWUpdate A/B OTA with U-Boot on i.MX8M Plus Hello, We do not provide a standard EVK A/B update framework out of the box. A/B update, rollback policy, and power-fail-safe boot selection are system-level features you must implement using U-Boot + SWUpdate. The closest references are: AN12900 - Secure OTA prototype for Linux using CAAM and Mender or SWUpdate. AN13872 - Enabling SWUpdate. meta-swupdate-imx - NXP Yocto layer with SWUpdate. Best regards. Re: SWUpdate A/B OTA with U-Boot on i.MX8M Plus Hey vp1, While I do not have an exact answer, I would like to make you aware that Torizon now supports any i. MX SoCs. It's deployed in many critical i.MX8MPlus products worldwide (mostly on Toradex SoMs). It does feature highly reliable OTA (default is OSTree but can be changed)  It includes out-of-the-box secure boot, anti-rollback, vulnerability management (for EU CRA compliance), and more.  The OS is free and open source; we are happy to help if you like. Contact us if you like to give it a try on the i.MX8M Plus LPDDR4 EVK or your own HW. www.torizon.io  Sorry for the pitch, i work for Torizon and this seemed relevant. 
記事全体を表示
PCF85263AT/AJ——屏幕上显示的分钟数为任意值。 在代码迁移任务中,我们遇到了 BSF 标志被设置的问题。由于 BSF 标志被设置,分钟寄存器中的 EMON 位也被设置。 因此,屏幕上显示的分钟数是一个任意值。此外,年份值无法正确保存,即使在设置了 RTC 日期和时间之后,年份值仍然持续显示 2000。 我尝试测试了下面提到的条件,但问题仍然存在。 我将标志寄存器(0x43)设置为 0x00 并立即读取它;它显示 0x00。然而,3秒后我再次读取寄存器时,其值又被设置为0x08(或0x00)。 Re: PCF85263AT/AJ -- Minutes value displayed on the screen is showing an arbitrary value 你好 Ris_eek 再会! BSF 标志并非只是无法清除。相反,RTC 检测到新的电池切换事件,并再次设置 BSF。根据数据手册,当电池切换逻辑检测到电源转换事件时,BSF 将被设置。 它在大约 3 秒后重新确立的事实意味着 VDD 电源反复降至电池切换阈值以下,导致反复出现 VDD>VBAT>VDD 转换。每次转换都会重置 BSF。 RafaR_0-1788887610951.pngRafaR_0-1788887610951.pngRafaR_0-1788887610951.pngRafaR_0-1788887610951.pngRafaR_0-1788887610951.png 这种持续的电压波动导致 RTC 不断 RESET,这就是为什么它只显示 2000 年的原因。我建议检查一下电源信号是否存在问题。 希望这些信息对您有所帮助,如果您还需要其他帮助,请告诉我。 祝你今天过得愉快,一切顺利。 Re: PCF85263AT/AJ -- Minutes value displayed on the screen is showing an arbitrary value 亲爱的拉法尔; 谢谢你的来信。   在硬件方面,VDD(4.93 VDC)和VBAT(3.02 VDC)电压是恒定的。为防止电压波动,在电池电源两端并联了一个 100 nF 的电容。 电池开关寄存器(26h)设置为 0x00。因此,BSM(电池开关模式)配置为在 Vth 电平进行切换。Vth 电平为 1.5 V,因为 BSTH(电池开关阈值电压)位设置为 0。 如图 25 所示(如前一封邮件中所述): 当 VDD < Vth 时,BSF 设置为 1。 当 VDD > VBAT 时,BSF 应被清除。 然而,在通电状态下,测得的电压为 VDD = 4.93 VDC,大于 VBAT = 3.02 V。即使如此,边防部队也未能通过清剿。 请问为什么即使 VDD 大于 VBAT,BSF 仍然保持设置状态? Re: PCF85263AT/AJ -- Minutes value displayed on the screen is showing an arbitrary value 你好 Ris_eek 再会! 数据手册上写着: 声明标志 BSF(寄存器标志,地址 2Bh)可用于在引脚 INTA 和 INTB 上产生中断。中断可以生成为脉冲信号,也可以生成为持续有效的信号,该信号遵循位 BSF 的条件。BSF 保持设置状态,直至接到命令解除。 我发送的参考图像还显示以下内容:“通过接口清除。” 这不会自动完成,你需要手动清除。 希望这些信息对您有所帮助,如果您还需要其他帮助,请告诉我。 祝你今天过得愉快,一切顺利。 Re: PCF85263AT/AJ -- Minutes value displayed on the screen is showing an arbitrary value 好的,拉法尔 谢谢。 但是,BSF 标志在软件中被清除,但过一段时间后,它会再次被设置,正如我在之前的帖子中描述的那样。
記事全体を表示
TJA1410_10Base_T1s 您好,NXP 我正在使用 S32K5 和 TJA1410 测试 10BASE-T1S。目前,我可以在 TX 引脚上看到波形,RX 和 ED 引脚上也有波形,这表明 MDI 可以接收到信号。但是,TX 引脚无法向 MDI 发送数据。 TX_RX_ED-2026-09-10-19-26-50.bmpTX_RX_ED-2026-09-10-19-26-50.bmp 此致敬礼。 显龙 以太网 PHY Re: TJA1410_10Base_T1s 你好@wuxianlong , 你是如何测量MDI的?MDI是差分接口,所以你需要使用差分示波器探头。MDI 需要正确的差分终端匹配 - 请参阅 AN14787 - 应用笔记 10BASE-T1S 以太网 PMD 收发器 TJA1410,修订版 1.0,第 3.3 章。 顺祝商祺! 帕维尔 Re: TJA1410_10Base_T1s 你好@wuxianlong , 希望你一切安好。我写信给您是关于您目前拥有的一款产品——NPI(新产品导入)——S32K5——该产品尚未正式发布。 请注意,已获准提前体验此类产品的客户已指派了现场工程师。您指定的现场工程师应作为您解决有关本产品任何问题、疑虑或疑问的主要支持渠道。 我们的在线支持团队将在该产品正式发布后,提供更广泛的支持服务。在此之前,我们将无法提供所需的帮助。 感谢您的理解。 感谢您的理解。 顺祝商祺! 帕维尔
記事全体を表示
S32k344 MBIST LBIST I'm in the process of implementing S32k344 BISTs in a green hills project. I'm using  SW32K3_SPD_1.0.6_D2512 in the source code form since I don't use Tresos or NXP DS. I was able to import most of the bist functions, except few defines that I'm not sure about (can't find them anywhere). Can anybody answer below questions. 1. Can I run LBIST MBIST while S32k344 is in lock step mode? 2. Is the following defines correct, I guessed by examining the code? #define BIST_MBIST_0 1U #define BIST_MBIST_1 2U #define BIST_MBIST_2 3U #define BIST_MBIST_3 4U #define BIST_MBIST_4 5U #define BIST_MBIST_5 6U #define BIST_MBIST_6 7U #define BIST_MBIST_7 8U #define BIST_MBIST_8 9U #define BIST_MBIST_9 10U #define BIST_MBIST_10 11U #define BIST_LBIST_0 0U the config data I used are as follows: static const BIST_CHANNEL_CONFIG_TYPE BistConfig[BIST_SAFETYBOOTCFG_NB] = { { (BIST_CHANNEL_TYPE)BIST_MBIST_0, (BIST_CONTROL_TYPE)((0x80100000U) | BIST_MBIST_PTR_VAL(BIST_MBIST_1)) }, { (BIST_CHANNEL_TYPE)BIST_MBIST_1, (BIST_CONTROL_TYPE)((0x80100000U) | BIST_MBIST_PTR_VAL(BIST_MBIST_2)) }, { (BIST_CHANNEL_TYPE)BIST_MBIST_2, (BIST_CONTROL_TYPE)((0x80100000U) | BIST_MBIST_PTR_VAL(BIST_MBIST_3)) }, { (BIST_CHANNEL_TYPE)BIST_MBIST_3, (BIST_CONTROL_TYPE)((0x80100000U) | BIST_MBIST_PTR_VAL(BIST_MBIST_4)) }, { (BIST_CHANNEL_TYPE)BIST_MBIST_4, (BIST_CONTROL_TYPE)((0x80100000U) | BIST_MBIST_PTR_VAL(BIST_MBIST_5)) }, { (BIST_CHANNEL_TYPE)BIST_MBIST_5, (BIST_CONTROL_TYPE)((0x80100000U) | BIST_MBIST_PTR_VAL(BIST_MBIST_6)) }, { (BIST_CHANNEL_TYPE)BIST_MBIST_6, (BIST_CONTROL_TYPE)((0x80100000U) | BIST_MBIST_PTR_VAL(BIST_MBIST_7)) }, { (BIST_CHANNEL_TYPE)BIST_MBIST_7, (BIST_CONTROL_TYPE)((0x80100000U) | BIST_MBIST_PTR_VAL(BIST_MBIST_8)) }, { (BIST_CHANNEL_TYPE)BIST_MBIST_8, (BIST_CONTROL_TYPE)((0x80100000U) | BIST_MBIST_PTR_VAL(BIST_MBIST_9)) }, //#endif { (BIST_CHANNEL_TYPE)BIST_MBIST_9, (BIST_CONTROL_TYPE)((0x80100000U) | BIST_MBIST_PTR_VAL(BIST_MBIST_10)) }, { (BIST_CHANNEL_TYPE)BIST_MBIST_10, (BIST_CONTROL_TYPE)(0x00100000U) }, { (BIST_CHANNEL_TYPE)BIST_LBIST_0, (BIST_CONTROL_TYPE)((0x00001108U) | BIST_LBIST_PTR_VAL(BIST_NIL)) } }; Re: S32k344 MBIST LBIST Hello, 1. Can I run LBIST MBIST while S32k344 is in lock step mode? Yes. The S32K344 lockstep architecture does not prevent execution of STCU2 LBIST/MBIST. The BIST mechanism is part of the device safety infrastructure and is designed to test logic and memories managed by STCU2. The S32K3 Safety Manual explicitly lists both lockstep and STCU2 LBIST/MBIST as safety mechanisms of the device. 2. Is the following defines correct, I guessed by examining the code? The numerical values are essentially correct for S32K344, but including MBIST_10 (HSE_ROMs) in the Safety Boot configuration is not required from a safety perspective, and the recommended path is to use the validated SPD configurations directly. Best regards, Peter Re: S32k344 MBIST LBIST Peter,   Thank you very much for replying. I have been stuck with this BIST test issues for few days now. I'm testing with S32k344 White board, code is build with green hills multi IDE rev 8.1. The safety boot BIST is not passing. I'm sure the max clock requirement is met for core and peripherals. I have core_clk at 160Mhz from external crystal 16Mhz and PLL, AIPS_PLAT_CLK is 80Mhz, AIPS_SLOW_CLK is 40Mhz, DCM_CLK as 40 MHz, LBIST_CLK is 40Mhz,  QSPI_MEM_CLK is 160Mhz. I have this error when unit reset from bist run, DES register has 0x00408175, few reserved bits get set, and FES register has 0x2000 (doesn't make sense). would you kindly answer following questions? 1. with all the clock signals mentioned above, should they be enabled through MC_CGM->MUX_0_DC_x registers? I'm getting conflicting information, currently they are enabled. 2. In the reference manual, STCU2 chapter, there is this "While running MBIST on EMAC time stamp memory, MC_CGM.MUX_9_DC_0[DIV] should be appropriately configured to ensure EMAC_CLK_TS should be at least 1.5 times the AIPS_SLOW_CLK frequency." does that mean I have to config configure the clock and enable it in the MC_CGM->MUX_9_DC_0 register? 3. If I want to see the example code S32_SPD_Demo in SW32K3_SPD_1.0.6_D2512 package, I guess I need to install latest NXP design studio, import the spd zip file as update site, and also the RTD package, is that right? 4. I believe MBIST 10 is HSE_RAMS, MBIST 11 is HSE_ROMS, please see the table below from SPD doc folder. MBIST BIST ID BIST Instance Name Reset Domain Safety Boot Safety Diagnostic 0 SYS0_RAMS Main ü ü 1 SYS1_RAMS Main ü ü 2 DMA_TCD_RAM Main ü ü 3 CM7_0_TOP Main ü ü 4 CM7_1_TOP Main ü ü 5 FLEX_CAN_RAMS Main ü ü 6 QSPI_PERI_RAMS Main ü ü 7 EMAC_TSN_RAM Main ü ü 8 EMAC_RAMS Main ü ü 9 b03_ETF_RAMS Main ü ü 10 HSE_RAMS Main ü ü 11 HSE_ROMS Main   ü Re: S32k344 MBIST LBIST An update to my problem, after I enabled bit 8 and 9 in the STCU_RUNSW_REG to use PLL, I'm consistently seeing DES register 0x11 and FES register of 0x10. The bist_get_exec_status(BIST_SAFETYBOOT_CFG) return value is NOT RUN (0x03). There is nothing in the BIST ERR_STAT register, none of the END flag is set. In the FCCU NCF_S0 register, bit 2 is set. It seems BIST didn't start, but I do see the reset. I captured the register setting by writing to flash in the other bank. Re: S32k344 MBIST LBIST Hello, the STCU self-test sequence is being entered and reaches the ST_DONE reset phase. However, the STCU also reports an unrecoverable fault (STCU_URF), which explains why the SAF BIST driver subsequently reports BIST_NORUN. The issue therefore appears to be an STCU execution/configuration failure rather than a case where BIST was never triggered. On S32K3, seeing both a destructive and functional reset indication simultaneously is often a sign that you are looking at a reset history, not necessarily the immediate reset source Since you are porting the SW, I would start with simply just MBIST only test to see if it pass sourced from PLL. Also I would double check the clock settings for the tests. Best regards, Peter Re: S32k344 MBIST LBIST I checked the all possible clocks, I believe they are correct. I also compared the config data in the register with values from NXP studio spd example project, they are also correct. One new information. After system come back from BIST reset, I see value 0x18 in DCMROD3 register. How do I resolve this error? Thanks. XRen_Parker_0-1788544110794.pngXRen_Parker_0-1788544110794.pngXRen_Parker_0-1788544110794.pngXRen_Parker_0-1788544110794.pngXRen_Parker_0-1788544110794.png Re: S32k344 MBIST LBIST Hello, On S32K344, RCCU reports lockstep mismatches, and when connected with a debugger, it is not uncommon to get RCCU-related faults that would never occur in standalone execution. In case you follow the setting from example, you are looking at full BIST. Example is tested and it is fully working by default. But your port reporting URF fault, which tells me not everything is identical. Looking at STCU documentation user can set pointer to tests. 54.9.4 STCU2 Configuration (CFG) petervlna_0-1788766597312.pngpetervlna_0-1788766597312.pngpetervlna_0-1788766597312.pngpetervlna_0-1788766597312.png You can try shrinking tests first and the slowly add more tests. In MBIST and LBIST control registers you can set which test will be last: petervlna_1-1788766735386.pngpetervlna_1-1788766735386.pngpetervlna_1-1788766735386.pngpetervlna_1-1788766735386.png By pointing to for example in CFG register you can execute single MBIST partition: petervlna_2-1788766853581.pngpetervlna_2-1788766853581.pngpetervlna_2-1788766853581.pngpetervlna_2-1788766853581.png petervlna_3-1788766973925.pngpetervlna_3-1788766973925.pngpetervlna_3-1788766973925.pngpetervlna_3-1788766973925.png Best regards, Peter Re: S32k344 MBIST LBIST I tried to run mbist sequentially, and also tried individual mbist test ID. The outcome is the same, no new status observed. Can you confirm the following SCU2 register settings for safety boot right before trigger is set? Thanks. XRen_Parker_0-1788899133217.pngXRen_Parker_0-1788899133217.pngXRen_Parker_0-1788899133217.png Re: S32k344 MBIST LBIST This is for people in the community who are struggling with implementing LBIST/MBIST in the S32k344 microcontroller. After days of no progress made, I was able to see the test pass. I did with custom porting of the SPD driver 1.06. The driver code works except the fault need to be configured to unrecoverable fault. The following are the clocks that need to be configured, if any one of them is not set up correctly, the test will fail with BIST_NORUN(0x03) status because test sequence runs concurrently, no other status is seen, no completion bits set. 1. Config FXOSC module CTRL register to use external oscillator or crystal, this is the only way to get 160MHz, max for S32k344. 2. Config PLLDIG module for the PLL circuit, make sure max frequency is the output by configuring rdiv, mfi, and odiv2 bits in the PLLDV register. 3. Switch in the PLL clock for core_clk and emac_clk by following the reference manual steps,  MC_CGM_MUX_x registers setting. 4. config MC_CGM->MUX_0 and MC_CGM->MUX_9 registers to get following clock signals.   AIPS_PLAT_CLK as 80 MHz   AIPS_SLOW_CLK as 40 MHz   HSE_CLK as 80 MHz   DCM_CLK as 40 MHz   LBIST_CLK as 40MHz   QSPI_MEM_CLK as 160MHz    EMAC_CLK as 80MHz     Note: DON'T SET BIT 8 AND 9 IN THE RUNSW REGISTER, THE TEST WILL FAIL IF THEY ARE SET. This is not done in the SPD driver code. I mention this because there is conflicting info in the reference manual.
記事全体を表示