Multi Source Translation Content

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

Multi Source Translation Content

Discussions

Sort by:
S32K388 JumpApp 仅在核心 0 处于活动状态时运行。 我创建了一个引导加载程序,并将其放置在地址 0x400000 到 0x420000 处。每次我通过串口更新程序时,只有核心 0 继续运行。如何才能让其他核心也运行起来? S32_SCB->VTOR = 0x00422000; __asm volatile(         "msr msp, % 0" : : "r" (appStack) : “记忆” ); ((pFunction)appEntry)(); Re: S32K388 JumpApp Only runs with core 0 active. 嗨@zhangyu5454 , 您可以在启动代码中启用核心。请参阅默认 S32DS 项目的启动代码(startup_cm7.s)。 例如,如果 CM7_2_ENABLE == 1,则启动代码将在系统启动期间启用 CM7_2。 也可以稍后通过 CM7_0 应用程序启用内核,方法是直接配置相关寄存器,或者使用 MCU MCAL 驱动程序或 Power_Ip 驱动程序。请参考以下示例: https://community.nxp.com/t5/S32K-Knowledge-Base/S32K358-Multicore-Start-CM7-2-from-CM7-0/ta-p/1923889 BR,丹尼尔 Re: S32K388 JumpApp Only runs with core 0 active. 感谢您的回复。我尝试使用 Power_Ip,但是当程序中出现“Power_Ip_Init(&Power_Ip_HwIPsConfigPB);”这行代码时,调试过程会自动结束。此外,即使我不按下 RESET 按钮,RESET 指示灯仍然亮着,导致设备完全无法运行。当我使用 IP_MC_ME 时,程序运行正常,但没有产生任何结果。其他元器件也无法启动。这段代码似乎对 388 型号不太适用。 Re: S32K388 JumpApp Only runs with core 0 active. 嗨@zhangyu5454 , 如果 MCU 发生系统RESET,则需要读取RESET源。 您可以致电 Power_Ip_GetResetReason(); 在 main() 函数开头之前 Power_Ip_Init(); 根本原因可能是 V15 开关电源——它必须与硬件设计相匹配。 danielmartynek_0-1785236184264.pngdanielmartynek_0-1785236184264.pngdanielmartynek_0-1785236184264.pngdanielmartynek_0-1785236184264.png BR,丹尼尔 Re: S32K388 JumpApp Only runs with core 0 active.#S32K388 根据您的建议,我将在 int main(void) 部分中实现它。调用了 Power_Ip_GetResetReason() 函数。然而,测试结果依然没有改变。   int main(void) { Power_Ip_GetResetReason(); Power_Ip_Init(&Power_Ip_HwIPsConfigPB); Clock_Ip_Init(&Mcu_aClockConfigPB[0]); Power_Ip_SetMode(&Power_Ip_aModeConfigPB[0]); 当(1) { Re: S32K388 JumpApp Only runs with core 0 active.#S32K388 嗨@zhangyu5454 , 那么RESET的原因是什么? 如果让我猜的话,应该是POR/LVR。 V15在PCB板上是如何供电的? 您是否已相应地配置 Power_Ip? 此致, 丹尼尔 谢谢! Re: S32K388 JumpApp Only runs with core 0 active.#S32K388 你好@zhangyu5454 , 我知道您在PCB板上使用了SMPS电源,因此必须在配置工具中启用它: danielmartynek_0-1786525102760.pngdanielmartynek_0-1786525102760.pngdanielmartynek_0-1786525102760.pngdanielmartynek_0-1786525102760.png danielmartynek_1-1786525162418.pngdanielmartynek_1-1786525162418.pngdanielmartynek_1-1786525162418.pngdanielmartynek_1-1786525162418.png 关于SXOSC,请确保已禁用: danielmartynek_2-1786525202445.pngdanielmartynek_2-1786525202445.pngdanielmartynek_2-1786525202445.pngdanielmartynek_2-1786525202445.png Re: S32K388 JumpApp Only runs with core 0 active.#S32K388 谢谢你的回复。我不太了解这些功能。是否有相关的示例或教程文件?我尝试按照 S32K358 的示例进行操作,但没有成功。关于 V15 电源,我发现它是由外部 3.3V 电压通过微控制器控制的晶体管产生 1.5V 电压,同时在微控制器控制下还会产生 1.1V 电压。我还注意到我的硬件设计中没有 32.768 晶振(晶体振荡器),程序卡在了 Clock_Ip_ExtOsc.c 的循环中。 做 { SxoscStatus = ((Clock_Ip_apxXosc[Instance]->STAT & SXOSC_SXOSC_STAT_OSC_STAT_MASK) >> SXOSC_SXOSC_STAT_OSC_STAT_SHIFT); TimeoutOccurred = Clock_Ip_TimeoutExpired(&StartTime, &ElapsedTime, TimeoutTicks); } while ((0U == SxoscStatus) && (FALSE == TimeoutOccurred)); Re: S32K388 JumpApp Only runs with core 0 active.#S32K388 你好@zhangyu5454 , 这两次写入操作中 ConfigValue 的值分别是多少? IP_PMC->CONFIG = ConfigValue; IP_PMC->SMPSCONFIG = ConfigValue; 由于电源模式配置错误,MCU正在复位。 将以下循环放在 main() 函数的开头,以便在重置后进行调试。 volatile uint32_t loop = 1; while (loop) { } 可以通过调试器修改循环变量,以允许程序继续执行。 当代码在循环中停止执行时,调用: Power_Ip_GetResetReason() 它应该返回 MCU_POWER_ON_RESET。 另外,请查阅低电压状态和控制(LVSC)寄存器,以获取有关 RESET 事件的更多信息。 此致, 丹尼尔 Re: S32K388 JumpApp Only runs with core 0 active.#S32K388 zhangyu5454_0-1786934052028.pngzhangyu5454_0-1786934052028.png张宇5454_0-1786934052028.png 您好,我按照您的方法启用了V15并禁用了SXOSC。但是,当调试到达 `Power_Ip_PMC_PowerInit` 中的 `IP_PMC->SMPSCONFIG = ConfigValue;` 行(该行位于 `Power_Ip_Init` 内部)时,调试会话会自动终止,并且板载 RESET 指示灯 LED 会保持微弱而稳定的亮光。 Re: S32K388 JumpApp Only runs with core 0 active.#S32K388 嗨@zhangyu5454 , 我用你分享的配置值在我的EVB上无法重现这个问题。 您使用的是 XS32K388EVB-Q289 吗?如果可以的话,请问您能否告知跳线 J118 的位置? danielmartynek_0-1787229063371.pngdanielmartynek_0-1787229063371.png 如果您使用的是定制电路板,请分享原理图。如果您不想在此处分享,请创建支持工单并将原理图附加到工单中。 谢谢! BR,丹尼尔
View full article
S32K312: NMI は Reset_Handler の実行前にトリガーされ、特定の機能 (SW) リセット後にのみトリガーされます デバイス: S32K312 ツールチェーン:Green Hills ELXR(コンパイラ) HSEファームウェア:s32k312_hse_fw_0.13.0_2.55.0_pb250129.bin デバッガ:Lauterbach TRACE32 ソフトウェア:AUTOSAR RTDベースのブートローダー(FBL)+アプリケーション(APP)、2イメージ構造 問題の概要 一部の生産ユニットでは、機能処理の直後にCPUがハングします (ソフトウェア)リセット。同じユニットは破壊的 (電源投入)リセット。このフリーズは、当社の基準品/正常品では再現しません。 NMIがアプリケーションコード実行前に発生している証拠 1) ハングポイントでキャプチャされるCPUコンテキスト(自動スタックされた例外フレーム): - R0-R3 = 0x00000000、R12 = 0x00000000 - LR = 0xFFFFFFFF(デフォルトリセット -> まだBLが実行されていない) - PC = 0x00416904(Reset_Handlerの最初の命令アドレス) - xPSR = 0x01000000 2) SCB->ICSR = 0x00000802 Chibeom_3-1785136456875.pngChibeom_3-1785136456875.pngChibeom_3-1785136456875.png - VECTACTIVE[8:0] = 2 -> NMI は現在アクティブな例外です - RETTOBASE = 1 これは、CPUが現在NMIハンドラ内で実行されていることを確認するものです。 3) NMIオフセットのベクトルテーブルエントリが自分のオフセットを正しく指している デフォルトの例外ハンドラなので、これはベクターではなく本物のNMIイベントです テーブルの破損。 レジスタはすべて同じハング状態(すべてクリーン/非アクティブと読み取られる)でチェックされました。 - MC_RGM_DES = 0x00000000(破壊的なリセットではない) - MC_RGM_FES = 0x20000000(ビット29のみ)(「ソフトウェア機能リセット」のみ) フラグセット、他の関数なし リセットソースフラグが設定されています) - FCCU:STAT、N2AF_STATUS、A2FF_STATUS、N2FF_STATUS、NCF_S0、IRQ_STAT all = 1 0x00000000 - CMU_FCインスタンス0、3、4:SR = 0x00000000(高低周波数フォルトなし) - PMC LVSC = 0x00000000(LVD/HVDフラグなし、ラッチまたはライブ) - ERM(0x4025C000):良好または故障したユニットで読み取れませんでした (おそらく私たちの設定ではクロックゲートされているため)、ERMの状態は未確認です。 質問 1. FCCU / CMU_FC / PMC / MC_RGM以外にNMIの情報源はありますか? アプリケーションのReset_Handlerが実行する前に、 最初の指示? 2. HSEサブシステムはアプリケーションコアとは独立して動作するため、 アプリケーションコアの機能リセットが可能である(ただし、 リセットHSE)を起動して状態の不一致を作り、NMIをトリガーします。 アプリケーションコア? 3. この症状に一致するS32K312の既知の訂正表はありますか?(NMIのみ) 機能/ソフトウェアのリセットで、電源オン時のリセットは一切ありません)。 追加のレジスターの確認や、ドキュメントについての指針はありますか? FCCU/ERM/CMU_FC/PMC以外のNMIの情報源があれば大変ありがたいです。 Re: S32K312: NMI triggered before Reset_Handler executes, only after Functional (SW) Reset, on speci こんにちは、 @Chibeom さん。 ハング状態のレジスタMU_0.MUB CSSR0とMU_1.MUB CSSR0を読み取り、ビット0(NMIC)がどちらかに設定されているか確認していただけますか? よろしくお願い申し上げます。 Re: S32K312: NMI triggered before Reset_Handler executes, only after Functional (SW) Reset, on speci こんにちは、 @danielmartynek さん、 MU_0.MUB / MU_1.MUB CSSR0 をご指摘いただきありがとうございます。 MU_0.MUBとMU_1.MUBの両方のCSSR0(ビット0、NMIC)0x00000000は ハング状態で故障したユニット、したがってMU->NMIリクエストパス(CCR0[NMI] / CSSR0[NMIC])は保留中ではないようです。 しかし、既知の良品ユニットと 故障したユニット(両方とも同じハング状態のアドレス範囲でキャプチャされました)、 一貫した違いが見られました。                                  良好なユニット 不良ユニット MU_0.MUB VER 0x0300000F 0x0300000F (同一) MU_0.MUB PAR 0x20200404 0x20200404 (同一) MU_0.MUB CR 0x00000000 0x00000000 (同一) MU_0.MUB SR 0x00000000 0x00000002 <- MURIP セット MU_1.MUB VER/PAR/CR: 正常ユニットと故障ユニットで同一 MU_1.MUB SR 0x00000000 0x00000002 <- MURIP セット SO、両方のMUインスタンスで、SRビット1(MURIP)は故障した 部分のみに設定されています。一貫して。リファレンス・マニュアルによると、MURIPは次のように示しています。 「プロセッサA」はMUリセットを発行しており、クリアできるのは システムリセット(多数ユニットリセットによるものではありません)。 CPUはNMIハンドラー内でフリーズし、実行前に何も実行しません アプリケーションコード自体がこのフラグをクリアできなかったはずなので、 この起動シーケンスの前またはその一部として設定されている必要があります。 以下の点についてご意見をお聞かせいただければ幸いです。 1.MU_0.MUBおよびMU_1.MUBの場合、どのプロセッサが「プロセッサA」(すなわち MURIPは誰が設定しているのでしょうか?ヘッダーは「MUB」レジスタブロックのみを公開します。 アプリケーションコアアクセス可能なアドレスは、 アプリケーションコアは常に「プロセッサB」、HSEは常に「プロセッサA」となります こういう場合に? 2. 「システムリセット」(MURIPをクリアするために必要)には機能型/ソフトウェアが含まれますか? アプリケーションコアのリセット、それとも破壊的/PORリセットだけ?もし MURIPは機能リセットによってクリアされないため、 電源投入後はクリアされるが、ソフトウェアリセット後も設定は維持される。 3. NMI の問題とは関係なく、MURIP フラグ自体がセット/スタック状態になっているか。 通常運転中に想定される、あるいは異常とみなされる事象か? 4. CSSR0[NMIC] が現在0を読み取っているため、ハードウェアは NMI例外エントリ時にNMICを車載クリアするのか、それとも以下でのみクリアされるのか 明示的なソフトウェア書き込み(この場合、NMIC=0はMU->NMIチャネルはそもそもアサートされていませんでした)? 改めて、これまでのご助力に感謝します。 Re: S32K312: NMI triggered before Reset_Handler executes, only after Functional (SW) Reset, on speci こんにちは、 @Chibeom さん。 遅れて申し訳ありません。私は2日間オフィスを不在にしていました。 1. はい、HSE_BコアはMU_0とMU_1のMUAインターフェースを制御します。 2. システムリセットはMURIPをリセットする。 3. これは例外的なことだと考えています。私自身はあまり情報を持っていません。 4. これはW1Cレジスタであるため、明示的な書き込みが必要です。 機能リセットがトリガーされた時点でHSE_Bが非アクティブであることを確認できますか? また、アプリケーションがNMIハンドラーに閉じ込められている間、どのような状態HSE_Bですか? MU_0 B面の標準HSE GPR(0x4039_C028)、FSR、GSRレジスタを読めますか? アプリケーションでNMIピンを使っていますか? よろしくお願いいたします。 ダニエル Re: S32K312: NMI triggered before Reset_Handler executes, only after Functional (SW) Reset, on speci こんにちは、ダニエルさん。 添付されている3つの結合レジスタダンプのスクリーンショットをご覧ください。 皆様からのご質問に基づいて整理した調査結果です。 -------------------------------------------------------- 添付ファイル -------------------------------------------------------- 添付資料1:正常なユニット(セキュアデバッグ有効、正常に動作中) Chibeom_3-1785730814252.pngChibeom_3-1785730814252.pngChibeom_3-1785730814252.png 添付資料2:機能リセット直前の故障ユニット トリガーされました(通常動作) Chibeom_4-1785730831377.pngChibeom_4-1785730831377.pngChibeom_4-1785730831377.png 添付資料3:機能リセット後、故障したユニットが NMIハンドラ(ハング状態) Chibeom_5-1785730838688.pngChibeom_5-1785730838688.pngChibeom_5-1785730838688.png -------------------------------------------------------- 調査結果 1) 機能リセットがトリガーされた時点での HSE_B アクティビティ、 2) NMIハンドラで停止している間のHSE_Bの状態: 添付ファイル2(リセット前)と添付ファイル3(リセット後)を比較すると、 故障したユニットでは、ハング状態)で、チェックしたすべてのレジスタが読み取られます。 リセット前とリセット後、全く同じ状態: - MU_0.MUB / MU_1.MUB TSR = 0x0000000F、RSR = 0x00000000(保留なし) 送信/受信チャネル上のメッセージはリセットによって変更されませんでした) - MU_0.MUB GSR = 0x00000000(変更なし) - MU_0.MUB FSR = 0x03600000(変更なし) - HSE GPR(0x4039C028)= 0x000001C1(変更なし) - MU_0.MUB / MU_1.MUB SR ビット1(MURIP)= 0x00000002 -- すでに設定済み リセットがトリガーされる前、そして設定されたまま、変更されず、その後も リセット SO、このリセットサイクルの前にすでにMURIPが設定されており、 機能リセット自体はこれらのHSE関連のいずれも変えません レジスター。 参考までに、同じセキュアデバッグ機能を備えた良質なユニットでは 構成(添付ファイル1)では、MURIPは両方とも0x00000000を読み取ります MU_0.MUBとMU_1.MUBは、HSE GPRとWKPU NCRは同じ内容です。 故障したユニットとしての値。 3) セット/スタックしたMURIPが異常かどうかについて: 承知いたしました。ご確認いただきありがとうございます。 4) NMIピンの使用: WKPUルーティング済みのNMIパスは使っていません(WKPU_IP_USEDは有効ではありません。 WKPUのドライバーコードはブートローダーにコンパイルされていません。 アプリケーション画像)。WKPU NCR (0x402B4008) = 0x60000000 全く同じ 3つの添付ファイルすべてにおいて。NSR = すべての場合において0x00000000。以来 これはすべてのユニットと条件で変更されていません。 外部/WKPU経由のNMIソースが関与しています。 これまでの調査結果の概要 MURIP (MU_0.MUB および MU_1.MUB SR ビット 1) は既に障害発生時に設定されています 機能リセットがトリガーされる前のユニットであり、 吊り下げ期間中、変化はなかった。同じ仕様の良品では0と表示されます セキュアなデバッグ構成。これが唯一一貫して再現可能な方法です 比較したすべてのレジスタ(FCCU、 CMU_FC、PMC、WKPU、MU CSSR0/GSR/TSR/RSR/GPR/FSR)を担当しています。 MURIPは「プロセッサA」(HSE_B)によって設定されており、クリアされるべきです。 あなたの回答によれば「任意のシステムリセット」と呼ばれ、すでに設定されているので 機能リセットがトリガーされます(リセット自体は表示されません) 変更するために)、これはHSE_B以前にMUリセットを発行したことを示唆しています HSE_Bが認識した「システムリセット」で解除されなかったポイントです。 質問 1. HSE側から、何が原因になるのかを判断する方法はありますか? そもそも(プロセッサA)はMUリセットをHSE_Bするのでしょうか?私たちは MURIPがそもそも設定される理由を理解したい。 2. リセットをトリガーする推奨方法はありますかHSE_B アプリケーションから「システムリセット」(MURIPをクリアするため)として認識します ソフトウェア、フル電源サイクル以外は? 3. アプリケーションコア側で詰まったMURIPフラグは、 観測しているNMIでしょうか、それともこれらはより独立している可能性が高いのでしょうか 以前の同じイベント情報の症状? この件に関して引き続きご協力いただき、改めて感謝申し上げます。 Re: S32K312: NMI triggered before Reset_Handler executes, only after Functional (SW) Reset, on speci こんにちは、 @danielmartynek さん、 最新情報のご提供、そしてMURIP/NMIパスのエスカレーションに感謝いたします。 社内の安全衛生チームに質問してください。感謝します、そして待ちます 彼らの意見。 その間に、関連性のある追加のデータポイントを発見しました。 だから待つのではなく、今のうちに共有したいと思いました。 UTEST Flash領域のOTPフィールドを良品と比較すると また、故障したユニットでは、ライフサイクル スロットに違いが見られました。 CUST_DEL (0x1B000220-22F) と OEM_PROD (0x1B000230-23F) は同一です 良品ユニットと 故障したユニット。 違いはIN_FIELDスロット(0x1B000240-24F)にあります。 - 正常ユニット:プログラミングが開始される Chibeom_2-1786069927793.pngChibeom_2-1786069927793.pngChibeom_2-1786069927793.png - ユニットの不具合: プログラムされていない (0xFFFFFFFF) と読み取られます Chibeom_1-1786069910918.pngChibeom_1-1786069910918.pngChibeom_1-1786069910918.png IN_FIELD内の正確なバイトパターンを現在も再確認中です。 我々の側のスロットだが、このスロットでの良し悪しの差は 一貫性のある。 もう少し詳しく教えていただけますか: 1.これは故障したユニットの構成が 移行の途中で破損または不完全になった IN_FIELD? 2. 未完成または欠落したライフサイクルの進展がIN_FIELD この件で調べているNMI/ハングの挙動について説明してください Thread? 3. このライフサイクル進行を安全に確認または完了する方法はありますか? 故障しているユニットに対して、完全な生産リフローなしで? ご協力ありがとうございました。 Re: S32K312: NMI triggered before Reset_Handler executes, only after Functional (SW) Reset, on speci こんにちは、 @Chibeom さん。 メモリビューに基づくと、OEM_PROD = 非アクティブ、IN_FIELD = 消去済みとなります。 まずDCMの登録簿を読んでいただけますか:RM、rev.12、セクション 39.3.1 DCM メモリ マップ。 セクション38.2.3 破壊的リセット時の読み取り専用GPR 3 (DCMROD3) はどうでしょうか? HSE_FW APIを使ってLC属性を取得することもできますよね? よろしくお願い申し上げます。 Re: S32K312: NMI triggered before Reset_Handler executes, only after Functional (SW) Reset, on speci こんにちは、 @Chibeom さん。 詳細なレジスタダンプをありがとうございます。MURIPの動作と、HSE_BとCM7_0間の潜在的なNMI経路に関する疑問点について、社内のHSEチームに報告しました。これは文書化されていないようです。彼らからの意見が届き次第、改めてご連絡いたします。 Re: S32K312: NMI triggered before Reset_Handler executes, only after Functional (SW) Reset, on speci こんにちは、 @danielmartynek さん、 DCMメモリマップとDCMROD3について教えていただき、ありがとうございます。両方のユニットでDCMSTAT(0h)、DCMLCS(8h)、DCMLCS_2(80h)、およびDCMROD3(208h)をキャプチャし、RM rev.9に対してデコードしました。 ---------------------------------------------------- 捕捉された価値 ---------------------------------------------------- 良いユニット: Chibeom_0-1786500129171.pngChibeom_0-1786500129171.pngChibeom_0-1786500129171.png - DCMSTAT (0h) = 0x00000E11 - DCMLCS (8h) = 0x00000000 - DCMLCS_2 (80h) = 0x00000000 - DCMROD3 (208h) = 0x00000000 不具合のあるユニット: Chibeom_1-1786500144600.pngChibeom_1-1786500144600.pngChibeom_1-1786500144600.png - DCMSTAT (0h) = 0x00000E03 - DCMLCS (8h) = 0x06184104 - DCMLCS_2 (80h) = 0x00000006 - DCMROD3 (208h) = 0x00400000 ---------------------------------------------------- デコードされたフィールド(正常なユニットはすべてゼロを読み取るため、故障したユニットのみ) ---------------------------------------------------- DCMSTAT: - bit1 DCMERR = 1 (DCMがエラーで完了) -- 正常なユニットではこのビットは0です - bit4 DCMLCST = 0 (LCスキャン状態が「正常に完了」していない) -- 正常なユニットではこのビットは1になります DCMLCS: - ビット 21-19 DCMLCC4 (IN_FIELD マーキング) = 011b = "領域は消去済み/未使用です" - ビット 15-13 DCMLCC3 (OEM_PROD マーキング) = 010b = "非アクティブとしてマークされています" - ビット 27-25 DCMLCC5 (Pre-FA マーキング) = 011b = "消去済み/未使用" - 関連するすべての *_ECE/*_CFE/*_CSS ビット = 0。 DCMLCS_2: - ビット 3-1 DCMLCC6 (FA マーキング) = 011b = "消去済み/未使用" DCMROD3: - bit22 LC_ERR = 1 ("ライフサイクルスキャン中にエラーが発生しました") これは、以前共有したUTEST OTPダンプと一致しています。故障したユニットのIN_FIELDスロットは、消去済み/未使用と読み取られます。 ---------------------------------------------------- 障害発生ユニットにおけるHSE_FW APIの結果(HseReadLifecycle) ---------------------------------------------------- HseReadLifecycle() は 0x10 = HSE_LC_IN_FIELD を返します。したがって、HSEファームウェアの観点から見ると、現在のライフサイクルはすでに十分IN_FIELDです。 これは上記の DCM/OTP データと矛盾しているようです。DCM の DCMLCC4 フィールドは IN_FIELD として「消去済み/未使用」と表示され、UTEST OTP の IN_FIELD スロット (0x1B000240h 以降) は未プログラム (0xFFFFFFFF) と表示されますが、HSE API はライフサイクルが IN_FIELD として確認されていると報告しています。 HSEがDCMフラッシュマーキングとは独立した別の安全なストレージを通じてライフサイクルを追跡しているのか、あるいはこれがマーキング自体に問題があることを示しているのかが不明なため、結論を出すのではなく、現状のまま共有することにしました。 よろしくお願いいたします。 チボム Re: S32K312: NMI triggered before Reset_Handler executes, only after Functional (SW) Reset, on speci こんにちは、 @Chibeom さん。 データ提供ありがとうございます。 IN_FIELDスロットがまだ消去された状態なので、属性をもう一度設定して進めてみることはできますか? 先ほども述べた通り、この事件は現在内部で議論中です。 新しい情報が入り次第、このThreadを更新します。 Re: S32K312: NMI triggered before Reset_Handler executes, only after Functional (SW) Reset, on speci こんにちは、 @Chibeom さん。 おそらく、ライフサイクル(LC)の推進を担当するHSEサービスが中断されたため、LCがこのような状態に陥ったのだろう。 LCおよびLC制御(DCMLCC)レジスタはHSE_FWと同様に0x77(IN_FIELD)を報告するが、UTEST領域は正しくプログラムされていない。理論上は、デバッガを使ってUTEST IN_FIELDスロットをプログラムでき、DCMエラーをクリアできるはずです。 よろしくお願いいたします。 ダニエル Re: S32K312: NMI triggered before Reset_Handler executes, only after Functional (SW) Reset, on speci こんにちは、 @danielmartynek さん。 ご提案いただいたとおり、不具合が発生しているユニットでIN_FIELD属性を再度設定してみました。 結果: HSE_SRV_RSP_NOT_ALLOWED (0xAA55A21C) よろしくお願いいたします。 チボム Re: S32K312: NMI triggered before Reset_Handler executes, only after Functional (SW) Reset, on speci こんにちは、 @danielmartynek さん。 UTEST IN_FIELDスロットをデバッガを使ってプログラムするというご提案、ありがとうございます。 社内OTPフィールド参照テーブルを確認したところ、IN_FIELDライフサイクルスロット(1B00_0240-024F)は、LC > MCU_PROD(OEM_PROD)以降、HSEを除くすべてのマスタに対して書き込み保護されていると記載されています。このユニットの HseReadLifecycle() は既に IN_FIELD を報告しているため、この LC 条件は既に満たされているようです。 この保護ルールの下で、このスロットにデバッガを書き込むとどのようにして成功することが期待されるのか、説明していただけますか?この場合、デバッガが許可されたマスターとして扱われるには、特定の手続き、モード、認証ステップが必要ですか? それとは別に、LCからIN_FIELDへの昇格がそもそもこのような不完全な状態のまま放置された理由について、何か調査結果は出ていますか?可能であれば、復旧手順だけでなく、根本原因についても理解したいと考えています。 ありがとう、 チボム Re: S32K312: NMI triggered before Reset_Handler executes, only after Functional (SW) Reset, on speci こんにちは、 @Chibeom さん。 情報ありがとうございます。 現時点ではMCUを復元する選択肢はないようです。 考えられる可能性の一つは、LCを進めるためのHSE設定属性サービス要求がシステムリセットによって中断されたことです(IVT内のLCWを使用してLCが進められなかったことは理解しています)。 HSEからのサービスリクエストに対する回答を読みましたか?エラーが発生したかどうかをログに記録していますか? サービスをトリガーする前に、HSE_STATUS_INIT_OKが設定されていることを確認していますか? この問題の影響を受ける基板/MCUの数はいくつですか?ごく一部の端末に限られる現象ですか、それともより多くの端末で確認されていますか? ありがとうございました。 ダニエル
View full article
How to Program a Fresh Ara240 Module on a Custom i.MX95 PCIe Platform? Hello NXP Team, We are using a custom i.MX95-based board (not the FRDM-i.MX95 EVK) and have connected an Ara240 M.2 module through the PCIe M-Key interface. After reviewing the Ara240 Runtime SDK documentation, we understand the normal runtime flow where the Ara240 device is enumerated over PCIe and initialized by the Runtime SDK during system boot. We would like to understand the requirements related to first-time module provisioning/programming for manufacturing and production support. Could you please clarify the following: Does the Ara240 M.2 module come pre-programmed from the factory, or is any initial firmware flashing required before first use? If the module is fresh, blank, or the onboard flash becomes corrupted, what is the recommended recovery or programming procedure? Is there any firmware or software component that needs to be programmed only once during manufacturing? Which components are loaded or initialized automatically during every boot by the Ara240 Runtime SDK? Is there a manufacturing, provisioning, or recovery guide available for customers using custom i.MX95 hardware platforms? Are there any additional steps required when using Ara240 on a custom board compared to the FRDM-i.MX95 reference platform? Any guidance or documentation related to first-time provisioning, firmware recovery, or production deployment would be greatly appreciated. Re: How to Program a Fresh Ara240 Module on a Custom i.MX95 PCIe Platform? The Ara240 M.2 module is normally shipped pre‑programmed, with the Runtime SDK handling initialization at boot, but if the onboard flash is blank or corrupted, recovery requires re‑flashing the firmware using the SDK tools and provisioning steps outlined in NXP’s manufacturing guide. Typically only base firmware is programmed once during production, while runtime components load automatically at each boot. For custom i.MX95 boards, the same provisioning flow applies as with the FRDM‑i.MX95, though you may need to adapt board‑specific PCIe and power sequencing. Official provisioning and recovery documentation from NXP is the recommended reference for manufacturing support.
View full article
如何在定制的 i.MX95 PCIe 平台上对全新的 Ara240 模块进行编程? 您好,NXP团队, 我们使用定制的基于 i.MX95 的板(不是 FRDM-i.MX95 EVK),并通过 PCIe M-Key 接口连接了Ara240 M.2 模块。 在查阅了 Ara240 Runtime SDK 文档后,我们了解了正常的运行时流程,即在系统启动期间,通过 PCIe 枚举 Ara240 设备,并由 Runtime SDK 进行初始化。 我们希望了解与制造和生产支持相关的首次模块配置/编程要求。 请您澄清以下问题: Ara240 M.2 模块出厂时是否已预先编程,还是首次使用前需要进行初始固件刷新? 如果模块是全新的、空白的,或者板载闪存损坏,建议的恢复或编程步骤是什么? 是否存在任何固件或软件组件,只需在生产过程中进行一次编程? Ara240 运行时 SDK 在每次启动时会自动加载或初始化哪些元器件? 是否有针对使用定制 i.MX95 硬件平台的客户的生产、配置或恢复指南? 与 FRDM-i.MX95 参考平台相比,在定制板上使用 Ara240 是否需要任何额外的步骤? 任何与首次配置、固件恢复或生产部署相关的指导或文档都将不胜感激。 Re: How to Program a Fresh Ara240 Module on a Custom i.MX95 PCIe Platform? Ara240 M.2 模块通常出厂时已预先编程,运行时 SDK 会在启动时处理初始化,但如果板载闪存为空或已损坏,则恢复需要使用 SDK 工具和 NXP 制造指南中概述的配置步骤重新刷写固件。通常情况下,生产过程中只会对基础固件进行一次编程,而运行时组件会在每次启动时自动加载。对于定制的 i.MX95 板,配置流程与 FRDM-i.MX95 相同,但您可能需要调整板特定的 PCIe 和电源时序。NXP 官方提供的配置和恢复文档是生产支持的推荐参考资料。
View full article
PN7150: FeliCa Lite-S (RC-S966) で断続的に DISCOVERY_FAILED (0x60 07) が発生し、NDEF データがゼロになる こんにちは。PN7150リーダーICを使用しているのですが、FeliCa Lite-S(RC-S966)タグで不安定な動作が見られます。 タグをアンテナに直接貼り付けた場合でも、次のようなサイクルが繰り返されます。 正しいUIDフレーム 正しいNDEFフレーム NDEFフレームをゼロにリセット 空のNDEFフレーム 0x60 07 (DISCOVERY_FAILED) 通知 CANログの例: UID (C040041): 01 2E 54 F7 C3 59 42 3E (常に安定) NDEF (C060041): 正しい場合: D1 01 09 54 02 65 6E 48 / 65 6C 6C 6F 21 ゼロの場合: 00 00 00 00 00 00 00 00 / 00 00 00 00 00 空の場合 (DLC=0) タグが少し離れた場合(それでも通常のNFC範囲内)、PN7150は頻繁に0x60 07を報告し、検出を再開します。 私の質問は Lite-Sが一時的にポーリングを無効化したり、RFフィールドがやや弱い場合にPN7150が07 0x60報告することは期待されるのでしょうか? ポーリング無効化はPN7150をゼロまたは空のNDEFデータを返すことはありますか? PN7150ファームウェアにおいて、Lite-Sポーリング無効化の動作を処理するための推奨される方法はありますか? 例:存在チェックをスキップ、検出の再開を遅延、再試行戦略 FeliCa Lite-Sの挙動に関するPN7150のアプリケーションノートはありますか? canAnalyzer3 Miniの概要は以下のとおりです。 「いいえ」;「時間(絶対値)」;「状態」;「ID(16進数)」;「DLC」;「データ(16進数)」;「ASCII」 "3.261";"34505.380";" E ";" C040041";"8";"01 2E 54 F7 C3 59 42 3E";"..T..YB>" "3.262";"34505.381";" E ";" C040041";"2";"00 F1";".." "3.263";"34506.401";" E ";" C060041";"0";"";"" "3.264";"34506.645";" E ";" C040041";"8";"01 2E 54 F7 C3 59 42 3E";"..T..YB>" "3.265";"34506.646";" E ";" C040041";"2";"00 F1";".." "3.266";"34506.894";" E ";" C060041";"0";"";"" "3.267";"34507.143";" E ";" C040041";"8";"01 2E 54 F7 C3 59 42 3E";"..T..YB>" "3.268";"34507.143";" E ";" C040041";"2";"00 F1";".." "3.269";"34507.389";" E ";" C060041";"0";"";"" "3.270";"34507.930";" E ";" C040041";"8";"01 2E 54 F7 C3 59 42 3E";"..T..YB>" "3.271";"34507.931";" E ";" C040041";"2";"00 F1";".." "3.272";"34508.979";" E ";" C060041";"8";"00 00 00 00 00 00 00 00";"....." "3.273";"34508.980";" E ";" C060041";"5";"00 00 00 00 00";"...." "3.274";"34509.222";" E ";" C040041";"8";"01 2E 54 F7 C3 59 42 3E";"..T..YB>" "3.275";"34509.222";" E ";" C040041";"2";"00 F1";".." "3.276";"34509.467";" E ";" C060041";"8";"00 00 00 00 00 00 00 00";"....." "3.277";"34509.468";" E ";" C060041";"5";"00 00 00 00 00";"...." "3.278";"34509.713";" E ";" C040041";"8";"01 2E 54 F7 C3 59 42 3E";"..T..YB>" "3.279";"34509.714";" E ";" C040041";"2";"00 F1";".." "3.280";"34509.959";" E ";" C060041";"8";"00 00 00 00 00 00 00 00";"....." "3.281";"34509.960";" E ";" C060041";"5";"00 00 00 00 00";"...." "3.282";"34510.495";" E ";" C040041";"8";"01 2E 54 F7 C3 59 42 3E";"..T..YB>" "3.283";"34510.496";" E ";" C040041";"2";"00 F1";".." "3.284";"34511.516";" E ";" C060041";"0";"";"" "3.285";"34511.759";" E ";" C040041";"8";"01 2E 54 F7 C3 59 42 3E";"..T..YB>" "3.286";"34511.760";" E ";" C040041";"2";"00 F1";".." "3.287";"34512.005";" E ";" C060041";"0";"";"" "3.288";"34512.251";" E ";" C040041";"8";"01 2E 54 F7 C3 59 42 3E";"..T..YB>" "3.289";"34512.252";" E ";" C040041";"2";"00 F1";".." "3.290";"34512.497";"E ";" C060041";"0";"";"" "3.291";"34512.739";" E ";" C040041";"8";"01 2E 54 F7 C3 59 42 3E";"..T..YB>" "3.292";"34512.739";" E ";" C040041";"2";"00 F1";".." "3.293";"34512.985";" E ";" C060041";"8";"D1 01 09 54 02 65 6E 48";"...T.enH" "3.294";"34512.986";"E ";"C060041";"5";"65 6C 6C 6F 21";"こんにちは!「 "3.295";"34513.231";" E ";" C040041";"8";"01 2E 54 F7 C3 59 42 3E";"..T..YB>" "3.296";"34513.232";" E ";" C040041";"2";"00 F1";".." "3.297";"34513.477";" E ";" C060041";"8";"D1 01 09 54 02 65 6E 48";"...T.enH" "3.298";"34513.478";"E ";"C060041";"5";"65 6C 6C 6F 21";"こんにちは!" "3.299";"34513.724";" E ";" C040041";"8";"01 2E 54 F7 C3 59 42 3E";"..T..YB>" "3.300";"34513.724";" E ";" C040041";"2";"00 F1";".."
View full article
S32K3 备用 RAM 数据在 Reset_Handler 之前已修改 你好, 当我使用 PE Micro 调试 S32K344 时,我发现了一个数组(__attribute__ ((section(".standby_data")))位于备用 RAM 段中的 volatile uint32_t WkupSourcestatus1[64];) 在进入 main() 时被意外修改。然后,如附图所示,我手动修改了寄存器,重新初始化了备用 RAM 区域。数据已正确初始化为 0,进入 main() 函数后,一切运行正常。但是,RESET 后,当我进入 Reset_Handler 时,WkupSourcestatus1 数组中的数据又被修改了。为什么会发生这种情况?我注意到数组中出现了大量的 0x5AA55AA5 值。这是否与 SBAF_BOOT_MARKER 有关?我在另一块电路板上测试过,现象相同。 8.png8.png 然后我改用 J-Link 进行调试,发现调试过程中 RESET 时没有出现异常。但是,在重新启动调试会话后,备用 RAM 区域中的所有数据都会变成 0xDEADBEEF。这是预期行为吗? S32K344 S32DS3.6.4 RTD700 PE 版本 6.0.8 BR, 杰森
View full article
(ディープ)パワーダウン状態でJ-Link/OzoneをLPC55(S)28に接続した際のDM-AP接続動作が不安定になる こんにちは、 Debug.SetConnectMode(CM_ATTACH_HALT) を使用して、Ozone (J-Link) を電源オフまたはディープ電源オフモードの LPC5528 または LPC55S28 に接続すると、SWD アタッチ動作が不安定になるという問題が発生しています。私たちは、LPC5528を実行している2つの「同一」なカスタムボードと、すべてリビジョン1BでLPC55S28動作するNXP評価ボードで異なる結果を再現しました。今後、Debug Mailboxの復旧フローについて明確にしたいと思います。 設定 MCU:LPC5528とLPC55S28 デバッグプローブ:J-Link ツール:Ozone、Debug.SetConnectMode(CM_ATTACH_HALT) テストした電源モード:電源停止および深電源停止(POWER_EnterPowerDown() / POWER_EnterDeepPowerDown()で入力) 観察1 — ボードA、カスタムボード、LPC5528、パワーダウンとディープパワーダウンの両方 DM-AP IDCODEが解決されず、4回の再試行後もアタッチが完全に失敗し、リセットも発生しません。 InitTarget() start ERROR: Wrong DM-AP IDCODE detected: 0xFFFFFFFF InitTarget() end - Took 101ms (4回繰り返した後、)   Connection failed. 観察2 — ボードB、カスタムボード、LPC5528、パワーダウンとディープパワーダウンの両方 DM-AP IDCODEの読み取り値 0x00000000 最初の試行では失敗し、2回目の試行では明示的なデバッグメールボックス回復メッセージが報告され、成功します。 InitTarget() start ERROR: Wrong DM-AP IDCODE detected: 0x00000000 InitTarget() end - Took 101ms ConfigTargetSettings() start InitTarget() start CPU halted successfully after enabling debug access InitTarget() end - Took 7.40ms Found SW-DP with ID 0x6BA02477 ... Connected to target device. 観察3 — NXP評価ボード、LPC55S28、Power DownとDeep Power Downの両方 DM-AP IDCODEは 0x00000000 最初の試みで読み取られますが、2回目の試みでは成功 「Enable Debug アクセス」メッセージは 表示 されません — 通常のAPスキャンに直接進みます: InitTarget() start ERROR: Wrong DM-AP IDCODE detected: 0x00000000 InitTarget() end - Took 112ms ConfigTargetSettings() start InitTarget() start InitTarget() end - Took 3.93ms Found SW-DP with ID 0x6BA02477 Scanning AP map to find all available APs AP[0]: AHB-AP (IDR: 0x84770001, ADDR: 0x00000000) ... Connected to target device. ターゲットに到達可能な場合、デバイスは接続の観察可能な副作用としてリセットされ、デバイスは電源ダウン/ディープパワーダウンを終了します。 追加情報 この2枚のカスタムボードは、ハードウェアのリビジョンが同じで、同じソフトウェアと電源オフ/ディープ電源オフ構成で動作します。 評価ボードでは、power_manager_lpc例.cをカスタムボードと同じ(または非常に類似した)Power Down/Deep Power Down構成に修正しました。 すべてのデバイスは設定されたウェイクアップソースで起動でき、稼働中(低消費電力モードではない場合)に正常に接続できます。 すべてのボードは同じSDKバージョン(24.12.00)で動作しています。 質問 パワーダウンまたはディープパワーダウン状態のLPC55S28にデバッガー(SWD/Ozone/J-Link)を接続するには、常にチップの完全リセットが必要ですか?あるいは、これらのモードでリセットせずにコアを検査/停止するためのサポートされている方法はありますか? ターゲットがスリープ状態のとき、DM-AP IDレジスタが0xFFFFFFFFを読み取るか、0x00000000を読み取るかは、何によって決まるのでしょうか? 「デバッグアクセスを有効にした後にCPUが正常に停止した」(観察2)と、そのようなメッセージを一切示さずに静かに回復する(観察3)のデバッグメールボックス復旧パスの違いは何ですか? ターゲットに到達不可能(スリープ状態で、DPが完全に電源が切れている状態)での接続が、デバイスリセットではなく(Observation 1のように)きれいに失敗するようにデバイスやデバッグセッションを設定する方法はありますか?それとも、Observation 1が異常で、健康なハードウェアでは起こらないのでしょうか? よろしくお願いいたします。 ポーラ Re: Inconsistent DM-AP attach behavior when attaching J-Link/Ozone to LPC55(S)28 in (Deep)Power Down Hello デバッグモードはスリープ、ディープスリープ、電源ダウン、ディープ電源ダウンモードではサポートされていません。この情報はLPC552xユーザーマニュアル第13.3.1章からのものです。 LPC55S28にデバッガを接続するには、まず電源オフ状態の場合はリセットを使用してウェイクアップする必要があります。デバイスが電源オフ状態の間は、デバッグセッションを接続することはできません。 DM-AP IDレジスタが0xFFFFFFFFを読み取るか0x00000000かの違いは、0x00000000がコマンド成功、返却を示す応答であり、 UM11126 章50.5.7.2.1の表1064に記載されているように、0xFFFFFFFFは検出されない応答であることにある可能性があります。 観察1は奇妙に思えます。デバイスがまだ電源オフモードにあるため応答がない可能性もありますし、DM-APに正しく入れずデバッグできない可能性があります。選択肢として、ボードAのハードウェア問題でなければ相談してみるのも良いでしょう。ボードBは正常に接続可能です。 敬具、ルイス
View full article
S32N55:如何版本 blob 映像以实现快速唤醒启动。 你好,团队、 众所周知,S32N55 支持快速唤醒启动。 我尝试使用与完全唤醒启动相同的格式构建 blob 映像,但启动过程失败了。 你能否指导我如何正确版本 Fast Wake-up 启动的 blob 镜像? 谢谢! Tangsheng_Zhou_0-1766369489644.pngTangsheng_Zhou_0-1766369489644.png 顺祝商祺! 唐生。 FSS_FW 优先级:中等 Re: S32N55: How to build a blob image for fast wake-up boot. 你好@唐生_周、 该小组已受理此案,并将尽快给出答复。 致以最崇高的敬意, Radu Re: S32N55: How to build a blob image for fast wake-up boot. 你好@RaduBraga 我注意到该票已被关闭。有没有最新进展?   顺祝商祺! 唐生。 Re: S32N55: How to build a blob image for fast wake-up boot. 你好@Tangsheng_Zhou , 我已经接手此案,并将尽快给予答复。   顺祝商祺! 保罗 Re: S32N55: How to build a blob image for fast wake-up boot. 你好@Tangsheng_Zhou , 如果您正在为直接客户提供支持,请提供以下信息: BSSM合同:是/否 客户公司*: 项目名称*: 客户联系人*(姓名和邮箱): 软件和硬件信息: 软件软件包信息*: 硬件*(主板/芯片组/平台): 软件版本*: *必需的 我仍在与开发团队合作处理此案例。 顺祝商祺! 保罗 Re: S32N55: How to build a blob image for fast wake-up boot. 你好@PaulB0bes 此案与任何特定客户或项目无关。但是,我认为客户将来可能会遇到类似的问题,所以我提出了这个请求。   顺祝商祺! 唐生。 Re: S32N55: How to build a blob image for fast wake-up boot. 你好@Tangsheng_Zhou , 感谢您提供的详细信息,我正在处理此案,会尽快给您答复! 顺祝商祺! 保罗 Re: S32N55: How to build a blob image for fast wake-up boot. 你好@PaulB0bes 以下是详细的测试步骤。   1. 在 AOSRAM 内存区域内构建了一个小型 FSS 镜像(保留了 IVT 头部),该镜像的 main.c 文件中只有一个 while 循环。 Tangsheng_Zhou_0-1784553297963.pngTangsheng_Zhou_0-1784553297963.png 2. 构建 FSS 固件镜像时,我需要填写 FRB 阈值寄存器吗?如果需要填写,则需要考虑如何填写或任何特殊事项。 Tangsheng_Zhou_1-1784553422329.pngTangsheng_Zhou_1-1784553422329.png 3. 使用 IVT 工具构建 IVT blob 映像,起始地址为 0x24800000 4. 将 IVT blob 映像写入闪存的 0x D00000 地址。 5. 在系统进入睡眠状态之前,将 IVT blob 映像复制到 AOSRAM 中,并将 FSS_WKUP0 的 WKPU 模式配置为快速唤醒模式。 Tangsheng_Zhou_2-1784553712231.pngTangsheng_Zhou_2-1784553712231.png Tangsheng_Zhou_3-1784553730808.pngTangsheng_Zhou_3-1784553730808.png 5. 通过 FSS_WAKUP0 唤醒系统映像。 FSS 无法到达 while(1) 环。看来在唤醒过程中触发了重置事件,而不是快速唤醒。   感谢您的支持!   顺祝商祺! 唐生。 Re: S32N55: How to build a blob image for fast wake-up boot. 你好@Tangsheng_Zhou , 如果您能分享一下您在尝试构建 blob 镜像时所遵循的具体步骤,那就太好了。我认为那样我们更容易找出问题所在。   顺祝商祺! 保罗 Re: S32N55: How to build a blob image for fast wake-up boot. 嗨@Tangsheng_Zhou , FRB 是 TCM 存储器(ITCM +DTCM)。 理论上我们有两种情况。 1:快速唤醒启动 由于镜像从 AON SRAM 内存启动,因此快速唤醒不需要 FRB。 2:完全唤醒启动 请问您是否要启动到 ITCM?如果是,则需要在 FSS 映像头中提供 FRB 阈值 0,地址采用 12 位掩码,FRB 地址将按 8kb 的倍数计算。 希望这能帮上一点忙。另外,您能否提供一下 IVT blob? 顺祝商祺! 保罗 Re: S32N55: How to build a blob image for fast wake-up boot. 你好@PaulB0bes 不,我只是想在 AO-SRAM 中运行 F-Core。 main_app1.bin 是 FSS 固件映像。 这两个字段应该如何填充?是否应该从 AO_SRAM 地址 0x24800000 开始?我的图像的起始指针和入口指针是 0x24800240。 Tangsheng_Zhou_0-1784682563629.pngTangsheng_Zhou_0-1784682563629.png main_blob1.bin 是包含 IVT 标头的 blob 映像。 谢谢您! 顺祝商祺! 唐生。 Re: S32N55: How to build a blob image for fast wake-up boot. 你好@PaulB0bes 在进入睡眠模式之前,将完整的 IVT 映像(而不是 FSS 固件)复制到 AO_SRAM 中,以测试快速唤醒功能。   谢谢您! 顺祝商祺! 唐盛 Re: S32N55: How to build a blob image for fast wake-up boot. 你好@PaulB0bes 整个 IVT blob 映像被复制到 AO_SRAM 的开头,包括 IVT 头部、FSS FW 头部和 FSS FW 二进制文件。 谢谢您! 顺祝商祺! 唐生。 Re: S32N55: How to build a blob image for fast wake-up boot. 嗨@Tangsheng_Zhou , 为了确保我理解流程,你是将完整的 IVT blob 映像复制到 AO_SRAM 的开头,还是只复制用于快速唤醒启动的 FSS 固件映像? 顺祝商祺! 保罗 Re: S32N55: How to build a blob image for fast wake-up boot. 嗨@Tangsheng_Zhou , 请确认快速唤醒启动是否成功完成?如果确认唤醒过程运行正常,则可能表明映像存在问题。 我想逐步缩小可能的原因范围。   顺祝商祺! 保罗 Re: S32N55: How to build a blob image for fast wake-up boot. 你好@PaulB0bes 我认为WKPU配置是正确的。据我了解,完全唤醒和快速唤醒的主要区别在于 WBMSR 配置。是这样吗? 还有其他需要考虑的设置或因素吗? 另外,能否请您分享正确的步骤,或者提供一张您或您的团队验证过的快速唤醒斑点图片? 感谢您的支持! 顺祝商祺! 唐生。 Re: S32N55: How to build a blob image for fast wake-up boot. 嗨@Tangsheng_Zhou , 团队目前面临着大量的版本发布任务。我会从我这边施加一些压力,进行一些调查,并尽快给你答复。   顺祝商祺! 保罗 Re: S32N55: How to build a blob image for fast wake-up boot. 嗨@Tangsheng_Zhou , WBMSR 是完全唤醒启动和快速唤醒启动之间的主要区别之一。然而,这并非唯一因素。 对于快速唤醒启动,BootROM 期望在进入睡眠状态之前,AON SRAM 中存在有效的映像(IVT + FSS 固件,如果需要,还需有唤醒 DCD)。除了 WBMSR 之外,还应验证唤醒源配置、AON SRAM 保持和有效的 IVT/FSS 标头。 预期的快速唤醒流程如下:   1. 生成包含 IVT + FSS FW 的 IVT 斑点图像。 2. 如有需要,添加唤醒 DCD。 3. 将 blob 图像复制到 AON SRAM 的开头。 4. 将系统配置为快速唤醒模式。 5. 进入睡眠状态并触发唤醒源 关于已验证的快速唤醒 blob 镜像,我正在进行内部核查,如有已验证的参考镜像可用,我会立即通知您。   希望这能帮上一点忙。   顺祝商祺! 保罗 Re: S32N55: How to build a blob image for fast wake-up boot. 嗨@Tangsheng_Zhou , 如果您认为所提供的答案合适,并且您对此工单没有其他疑问,请将答案标记为“接受为解决方案”。 今后请使用 NXP JIRA: Jira 项目 此外,如果我们在接下来的7天内没有收到回复,我们将结案。 顺祝商祺! 保罗 Re: S32N55: How to build a blob image for fast wake-up boot. 你好@PaulB0bes 谢谢你的回复。我按照您提供的步骤测试了快速唤醒功能,但问题仍然存在。请问您那边是否已经成功测试过了?   谢谢! 顺祝商祺! 唐生。
View full article
NXP 希望用户如何将 Mbed TLS 与 Plug & Trust 中间件集成? NXP 是否希望用户使用 Plug & Trust 中间件捆绑的 Mbed TLS 版本?如果是这样,NXP 是否能及时提供包含更新的 Mbed TLS 版本的中间件更新版本?例如,当前中间件捆绑了 Mbed TLS 3.6.2,尽管 Mbed TLS 3.6.7 已经可用。 SE050 Re: How Does NXP Expect Users to Integrate Mbed TLS with the Plug & Trust Middleware? 嗨@ph-yac , 感谢您的联系!我的评论如下: Plug & Trust MW 从下游的 MCUXpresso SDK 获取 Mbed TLS,并且更新遵循 NXP 的 H1/H2 SDK 发布计划,而不是跟踪每个上游 Mbed TLS 补丁版本。目前捆绑的版本是3.6.2,下一次更新将在下一个 SDK 下游版本周期中发布。 中间件已根据捆绑版本进行正式验证,但同一 3.6.x 版本内的补丁级别升级可能存在问题。LTS分支通常风险较低。欢迎客户尝试手动替换捆绑的 Mbed TLS 源文件;只需使用 `SSS_HAVE_MBEDTLS_3_X` CMake 标志验证构建兼容性即可。NXP 不会对 MW 版本之间的每个补丁版本进行正式验证。 最新版 MW 同时支持 Mbed TLS 2.28.x 和 3.6.x 版本。通过 `SSS_HAVE_MBEDTLS_2_X` / `SSS_HAVE_MBEDTLS_3_X` CMake 标志进行分支。请注意,与 Mbed TLS 3.x 集成时应使用 **SSS ALT**(而不是 PSA ALT)。 Plug & Trust 中间件对 Mbed TLS 4.x 的支持目前正在考虑中,预计将于 2027 年第一季度发布。虽然尚未做出正式承诺,但已列入计划。 希望对您有所帮助。 祝你有美好的一天, 坎 ------------------------------------------------------------------------------- 笔记: - 如果此回复解答了您的问题,请点击“标记为正确答案”按钮。谢谢你! - 我们会持续关注帖子,从最后一条回复发出后持续7周,之后的回复将被忽略。 如果您之后有相关问题,请另开新帖并引用已关闭的帖子。 -------------------------------------------------------------------------------
View full article
DESFire EV3 NDA 电子签名请求从未送达 MIFARE DESFire EV3 NDA 已获批准,但 Adobe Sign 请求从未交付——支持部门拒绝将此问题升级至 NXP 合同部门(案例 00996763) 你好, 我正在寻找恩智浦公司内部能够帮助我完成保密协议流程的人,该流程由于恩智浦方面的技术原因而陷入停滞。 背景: 我是一名捷克共和国的软件开发人员,正在开发一款基于 MIFARE DESFire EV3 (MF3DHx3) 的闭环 NFC 支付扩展的移动 POS 应用程序 (Android/iOS)。我需要 DocStore 提供的机密 EV3 文档(完整数据表/命令集、安全消息传递、密钥管理)。 2026 年 8 月 1 日,我通过 NXP 在线流程提交了 NDA 请求(支持案例 #00996763)。 8 月 1 日至 7 日期间,我提供了 NXP 合规部门要求的所有资料:公司网站、官方贸易登记文件、所有权结构、详细的项目描述、数量、设计阶段、最终用途。 8 月 12 日,NXP 技术支持确认 NDA 已获批准,并通过 NXP Contracts / Adobe Acrobat Sign 发送到我的签字邮箱。8月18日,他们确认了第二个电子签名请求。 问题: 两个 Adobe Sign 请求均未送达。收件箱里没有,垃圾邮件里也没有,我的 Adobe Sign 帐户里也没有,而且——最重要的是——在整个期间的 Microsoft 365 Exchange 邮件跟踪中,没有任何来自 adobesign.com / echosign.com 的投递尝试痕迹。交易在到达我的邮件服务器之前就失败了。 技术支持人员表示,“出于网络安全原因,我们无法重新发送文件”,他们“无法进一步验证我的电子邮件地址”,我应该通过授权代理商重新开始。要求将此案直接转交给 NXP Contracts,以便他们检查 Adobe Sign 交易并签发新协议(或将 NDA 以 PDF 格式发送以供手写签名)的请求尚未得到处理。 所涉电子邮件地址是我在我自己域名下的唯一商业地址,并且一直用于处理此事件中的所有其他通信,包括来自 [email protected] 的所有电子邮件。 我所请求的是: NXP Contracts、MIFARE 产品团队或任何有权访问 Adobe Sign 审计跟踪的人员能否查看案例 #00996763,并重新发出电子签名请求或以其他形式提供保密协议?尽职调查已经完成并获得批准——唯一缺少的步骤是提交一份文件。 任何能提供合适联系人的信息都将不胜感激。谢谢。 彼得·扎赫拉德尼克 捷克共和国 Re: DESFire EV3 NDA eSign request never delivered 你好,爱德华多, 谢谢你的回复。我明白,我也很乐意继续参与保密协议相关的讨论——问题是这个讨论实际上已经结束了: 技术支持部门两次回复说他们“无法在线处理”,我应该通过代理商重新开始,而我要求将此案转交给法律/合同团队的请求也没有得到处理。 所以我唯一的要求是:能否请您将案件编号 00996763 转交给内部的法律团队,以便有权限查看 Adobe Sign 交易记录的人员进行查看?保密协议于 8 月 12 日获得批准;但我始终没有收到电子签名请求(我的邮件服务器跟踪中根本没有投递尝试)。重新发出电子签名请求,或者将保密协议以 PDF 格式提供以便手写签名,即可立即解决问题。 我会在工单中添加一条备注,引用这个帖子。谢谢。 彼得 Re: DESFire EV3 NDA eSign request never delivered 你好@clexpert 希望你一切都好。 请接受我的歉意,这不是讨论保密协议相关问题的合适途径。在线提交保密协议表格后,所有流程均由我们的法务团队处理。 如需了解您的申请流程状态的更多信息,请继续通过您的 NDA 工单进行沟通。 问候, 爱德华多。 Re: DESFire EV3 NDA eSign request never delivered 你好,爱德华多, 再次感谢。按照您的建议,我继续处理 NDA 工单(案件 00996763),并明确要求将该案件转交给法律/合同团队,因为您提到他们负责处理这些案件。 今天我收到的唯一回复,也是第三次,只有一行信息:“请联系NXP代理商办理保密协议。”没有转发给法务部门,没有对 Adobe Sign 交付失败做出任何评论,也没有提及我询问的审计跟踪。 总结一下三周后的现状: - 该保密协议已于 8 月 12 日审核、批准并发布。 - 两封 Adobe Sign 请求从未到达我的邮件服务器(已通过完整的邮件跟踪确认 - 根本没有尝试投递)。 - 技术支持无法重新发布,只能重复代理商的建议。 - 我已同时联系了授权代理商,正在等待回复。 请您自行将内部事宜移交给法务/合同部门,或者给我提供该部门的直接联系方式?我希望将已经获得批准的保密协议交付给您——通过重新发出电子签名请求,或者以 PDF 格式手写签名。我尽量保持建设性的语气;我只是需要把这件事告诉能够采取行动的人。 谢谢。 彼得
View full article
AMMCLib 对 S32R294 e200z7 内核的支持 您好,NXP团队, 我们正在为 S32R294 开发一个应用程序,并希望在其 e200z7 内核上使用 AMMCLib。 是否有官方支持 S32R294 的 AMMCLib 版本?如果没有,您能否推荐另一个与 S32R294 e200z7 内核兼容的 NXP 提供的数学库? 另外,请与我们联系是否需要特定的 S32 Design Studio 工具链、SDK 或 RSDK 版本。 谢谢! C|C++库 Re: AMMCLib support for S32R294 e200z7 cores 嗨,彼得, 谢谢你的解释。 我们的目标应用是雷达信号处理流程。我们计划在 S32R294 e200z7 内核上运行以下算法: 基于DML的到达方向估计 少量FFT运算 卡尔曼滤波,包括矩阵乘法、转置和线性系统求解或矩阵求逆 利用向量、矩阵和统计运算进行特征提取和轻量级雷达目标分类 在 e200z7 内核上运行这些算法可以减少 SPT 和 e200z7 之间的数据传输和数据格式转换,从而提高处理效率。 我们正在寻找适用于 S32R294 e200z7 内核的优化 FFT、复数运算、矩阵运算、向量运算和线性代数运算函数。NXP是否为这些应用场景提供合适的数学或DSP库? 顺祝商祺! Re: AMMCLib support for S32R294 e200z7 cores 你好, 目前还没有正式支持 S32R294 平台的 AMMCLib 版本。 AMMCLib 设备支持列表目前包括几个 Power Architecture MCU 系列(例如 MPC577xK/MPC5775E),但 S32R294 未列为支持的目标。 对于 S32R294 开发,NXP 的主要软件产品是 S32R29x 的 Radar SDK 以及 S32 Design Studio 电源架构工具链。 目标应用应该是什么? 顺祝商祺! Peter
View full article
GMAC RX interrupt of S32K328 I use GMAC of S32K328, and want to use interrupt method to receive package from my PC. But found some differnt phenomenon: 1. Interrupt handler GMAC0_CH0_RX_IRQHandler can be called, and receive package normally. 2. Many seconds GMAC0_CH0_RX_IRQHandler called after PC send package. 3. GMAC0_CH0_RX_IRQHandler can't called, and no package receive? What might be the reason? How to solve that? Re: GMAC RX interrupt of S32K328 Hello @zyt , Thank you for sharing the configuration. Since I do not have EB tresos available, I reviewed the GMAC configuration manually from the provided files. I compared your Eth_43_GMAC configuration with a working S32K358 GMAC 1G lwIP FreeRTOS reference project. One significant difference is the Egress FIFO configuration. In your project, the Egress FIFO buffer length is configured to 128 bytes and the MTL Egress queue size is 256 bytes. In the reference project, the Egress FIFO buffer length is 1536 bytes and the MTL Egress queue size is 4096 bytes.   If your application transmits any frames or if the upper layer sends responses, this small TX/Egress configuration may be too limited for standard Ethernet frames, especially in 1G RGMII mode. As a test, please try increasing:   - EthCtrlConfigEgressFifoBufLenByte to 1536 - EthCtrlConfigMTLEgressQueueSizeInBytes to 4096   For the RX path, the RX buffer length itself is 1536 bytes, which looks reasonable. However, your MTL Ingress queue size is also 1536 bytes, while the reference project uses 4096 bytes. Therefore, as another test, please also try increasing:   - EthCtrlConfigMTLIngressQueueSizeInBytes to 4096   In addition, for debugging, please temporarily enable receive-all mode. Your current configuration has PKT_FILTER_RECV_ALL disabled, while the reference project enables it. This can help to exclude MAC filtering from the analysis.   There are also other differences like EthEnableCacheManagement and EthCtrlReleaseResourceAfterReception, but this is not necessarily wrong.   Best regards, Pavel Re: GMAC RX interrupt of S32K328 Hello: I have tried both unicast frames or broadcast frames, the delay between every frame is 1 second, I think it's enough slow. The phenomenon is the same, there is no RxStatsDropEvents at bigining, but it appears after a few frames. My EB configuration is like attachment, please help to check if it's convenience for you. Thanks. Re: GMAC RX interrupt of S32K328 Hello @zyt , RxStatsDropEvents suggests that some frames are seen by the GMAC, but are dropped somewhere in the RX path. This may be related to RX resource availability, RX FIFO/queue handling, descriptor/buffer availability, packet filtering or the upper-layer receive processing.   Please try the following checks:   1. Please send the same unicast frames slowly from the PC, for example one frame at a time or with a larger delay between frames, and compare the RX statistics before and after the test. If RxStatsDropEvents no longer increases, the issue may be related to RX buffer recycling, processing time, or burst traffic from the PC.   2. Please repeat the test with broadcast frames and then with unicast frames addressed exactly to the MAC address configured in the GMAC driver. This will help to exclude a MAC address/filtering issue.   Please also verify the RGMII clock and peripheral configuration. As a reference, I have published an S32K358 GMAC example on the NXP Community: https://community.nxp.com/t5/S32K-Knowledge-Base/Example-S32K358-GMAC-1G-lwIP-FreeRTOS-S32DS-3-6-1-RTD600/ta-p/2355872     Please note that this example is for S32K358, not S32K328, so it must not be copied directly without checking the S32K328 pinout and clock configuration. However, it can be used as a reference for the overall clock setup, Eth_43_GMAC configuration and the DCMRWF register workaround.   If possible, could you please also share your zipped project? Without the project, it is difficult to determine whether the drops are caused by configuration, RX resource handling, queue routing or the application receive path. Best regards, Pavel Re: GMAC RX interrupt of S32K328 Hello: I read the frame info by RTD function Eth_43_GMAC_GetRxStats, it looks has drop event. zyt_0-1787017861198.pngzyt_0-1787017861198.pngzyt_0-1787017861198.pngzyt_0-1787017861198.pngzyt_0-1787017861198.pngzyt_0-1787017861198.pngzyt_0-1787017861198.pngzyt_0-1787017861198.pngzyt_0-1787017861198.png The RX flow all handled by RTD like below, I didn't modify. GMAC0_CH0_RX_IRQHandler -> GMAC_RxIRQHandler -> Eth_43_GMAC_RxIrqCallback -> Eth_43_GMAC_Receive What might be the reason for this? Thanks. Re: GMAC RX interrupt of S32K328 Hello @zyt , Thank you for the details.   Please also check Pins/Clocks/device_init() accordingly to this thread: S32K358 - GMAC Clock Configuration   From the screenshot, the GMAC0 interrupt vectors seem to be configured and mapped to the RTD handlers, including GMAC0_CH_0_RX_IRQHandler. Since this handler is sometimes entered and the frame can be received, the basic interrupt routing does not look completely wrong.   However, when using the AUTOSAR Eth_43_GMAC driver, please also check the receive flow above the low-level IRQ handler. The RX interrupt handler itself is not usually the complete application-level receive processing. The application or upper layer still needs to call the expected Eth_43_GMAC receive API flow, for example Eth_43_GMAC_Receive(), so that the received frame is read from the driver and passed further through the configured callback path.   Please check the following points:   1. Please confirm that Eth_43_GMAC_Receive() is called after the RX interrupt event, or periodically from your main/task context, according to your application design. If the interrupt occurs but the received frame is not consumed from the RX buffers, the following frames may not be received as expected.   2. Please verify that the received unicast frame destination MAC address exactly matches the MAC address configured in the GMAC driver. For debug purposes, you can temporarily enable receive-all/promiscuous mode to exclude MAC filtering as the reason.   3. Please check which RX queue/FIFO is used. Your screenshot shows RX interrupt handlers for CH0, CH1, and CH2. If the packet filter or queue configuration routes frames to another RX queue, the application must call the receive function with the corresponding FIFO index and handle that queue correctly.   4. Please verify RX buffer/descriptor availability. After a received frame is processed, the driver must be able to reuse or obtain RX buffers again. If the RX buffers are exhausted, the first frame may be received correctly, but later frames may be delayed or lost.   5. If cache is enabled, please verify that the GMAC descriptors and RX buffers are placed in a non-cacheable memory region, or that the required cache maintenance is performed. Otherwise, the CPU may see stale descriptor status or stale received data.   6. Since the frames are sent from a Python script as unicast frames, please also confirm by Wireshark that the PC really sends the frames continuously with the expected destination MAC address. If some frames require address resolution or if the destination is not reachable as expected, the PC side may introduce retries or delays, which can look like delayed RX interrupt behavior on the MCU side.   As a reference, I would recommend comparing the project with an adapted S32K3 Ethernet/lwIP example first. This can help to confirm that the RGMII PHY interface, clocks, MAC address, and basic RX path are working before focusing on the custom AUTOSAR Eth_43_GMAC interrupt receive implementation.   If the issue still remains, please share the Eth_43_GMAC receive part of the application, especially where Eth_43_GMAC_Receive() is called, the RX FIFO configuration, MAC address/filter configuration, and the GMAC DMA/MTL/MAC status registers after the failure. Bets regards, Pavel Re: GMAC RX interrupt of S32K328 Hello: 1.I use RGMII 2. I use RTD 6.0.0. 3. I use the Eth_43_GMAC driver. 4. Interruption is like the following: zyt_0-1786962682804.pngzyt_0-1786962682804.pngzyt_0-1786962682804.pngzyt_0-1786962682804.pngzyt_0-1786962682804.pngzyt_0-1786962682804.pngzyt_0-1786962682804.pngzyt_0-1786962682804.pngzyt_0-1786962682804.png 5. I send unicast frames with python script. All the packages I send are the same, and GMAC0_CH0_RX_IRQHandler is from RTD which is the lowest handler like picture above. Re: GMAC RX interrupt of S32K328 Hello @zyt , Could you please provide a few more details about your setup?   1. Which MAC/PHY interface are you using on S32K328, for example MII, RMII or RGMII? 2. Which S32K3 RTD version are you using? 3. Are you using the AUTOSAR MCAL Eth_43_GMAC driver or the lower-level GMAC IP driver? 4. Could you share the relevant interrupt configuration and the implementation of GMAC0_CH0_RX_IRQHandler? 5. What kind of frames are sent from the PC, for example ping/ICMP, UDP, raw Ethernet frames, broadcast or unicast frames?   As a reference test, I would also recommend trying to reproduce the behavior using an adapted S32K3 Ethernet/lwIP example first. This can help to separate a basic GMAC/PHY/clock/configuration issue from an application-specific interrupt or RX-buffer handling issue.     Regarding the symptoms, if the RX interrupt is sometimes called and the frame can be received correctly, the basic RX path is likely at least partially working. However, the inconsistent behavior may still be caused by one of the following points:   - RX buffer or descriptor handling: after a received frame is processed, the RX buffer/descriptor must be returned back to the driver/DMA. If this is not done correctly, RX buffers may become unavailable and further RX interrupts may stop or become inconsistent.   - Interrupt handling: please make sure that the RX interrupt is configured for the correct GMAC channel and that the expected driver interrupt handler/status clearing flow is used. If the interrupt status is not cleared correctly, the following RX events may not be reported as expected.   - Cache/memory coherency: if cache is enabled, please verify that the GMAC descriptors and RX buffers are placed in a suitable non-cacheable memory region, or that the required cache maintenance is performed. Otherwise, the CPU may see stale descriptor status or stale received data.   - Packet filtering/MAC address: for debug purposes, please try enabling receive-all/promiscuous mode temporarily. This helps to check whether the frame is rejected by the MAC address filter, VLAN filter, or another packet filter setting.   - Frame type and PC behavior: if the PC sends IP traffic such as ping, the first frames may be ARP requests/replies before ICMP traffic is sent. If ARP resolution fails or some frames are filtered/dropped, it may look like the interrupt is delayed by several seconds because the PC retransmits ARP or the application retries later.   - PHY link and clocks: please also confirm that the PHY link is up and that the required input clocks for the selected MII/RMII/RGMII interface are present and stable.   Please share the above configuration details and, if possible, the GMAC DMA/MTL/MAC status registers after the failure. This should help identify whether the issue is related to interrupt configuration, RX descriptor/buffer handling, packet filtering, or the external PHY/interface setup. Best regards, Pavel Re: GMAC RX interrupt of S32K328 Hello: I follow the configuration as your advice like below: zyt_0-1787045193851.pngzyt_0-1787045193851.pngzyt_0-1787045193851.pngzyt_0-1787045193851.pngzyt_0-1787045193851.pngzyt_0-1787045193851.pngzyt_0-1787045193851.pngzyt_0-1787045193851.png zyt_1-1787045222335.pngzyt_1-1787045222335.pngzyt_1-1787045222335.pngzyt_1-1787045222335.pngzyt_1-1787045222335.pngzyt_1-1787045222335.pngzyt_1-1787045222335.pngzyt_1-1787045222335.png zyt_2-1787045282610.pngzyt_2-1787045282610.pngzyt_2-1787045282610.pngzyt_2-1787045282610.pngzyt_2-1787045282610.pngzyt_2-1787045282610.pngzyt_2-1787045282610.pngzyt_2-1787045282610.png zyt_3-1787045358003.pngzyt_3-1787045358003.pngzyt_3-1787045358003.pngzyt_3-1787045358003.pngzyt_3-1787045358003.pngzyt_3-1787045358003.pngzyt_3-1787045358003.pngzyt_3-1787045358003.png The EthCtrlReleaseResourceAfterReception is gray could not be modified, because it's only applied when external data buffers are used. zyt_4-1787045508280.pngzyt_4-1787045508280.pngzyt_4-1787045508280.pngzyt_4-1787045508280.pngzyt_4-1787045508280.pngzyt_4-1787045508280.pngzyt_4-1787045508280.pngzyt_4-1787045508280.png After modify these, the result is the same, RxStatsDropEvents appeared. zyt_5-1787045605969.pngzyt_5-1787045605969.pngzyt_5-1787045605969.pngzyt_5-1787045605969.pngzyt_5-1787045605969.pngzyt_5-1787045605969.pngzyt_5-1787045605969.pngzyt_5-1787045605969.png The modified configuration file is like attachment. Could you give some more advice? Thanks. Re: GMAC RX interrupt of S32K328 Sorry, I forget you do not have EB. The attachment is the generated file after modification. Re: GMAC RX interrupt of S32K328 Hello @zyt , Thank you for the update. I reviewed your files again and I haven't seen anything suspicious. If the behavior remains unchanged after increasing the FIFO/queue resources, I would not continue changing configuration parameters blindly. The next step should be to identify which frames are actually counted as RxStatsDropEvents. Please check whether the drop counter increases only when your Python unicast frames are sent or also when no Python traffic is running, as PC-side background traffic or filtered frames may also affect the RX statistics. Bets regards, Pavel Re: GMAC RX interrupt of S32K328 Hello: Base my test, either broadcast or unicast frame can be drop, phenomenon are the same, and the PC will not send any other frames beyond my control. I find one thing special, when sometimes I send a frame, the RTD function  Gmac_Ip_ReadFrame go into below branch: zyt_0-1787101369298.pngzyt_0-1787101369298.pngzyt_0-1787101369298.pngzyt_0-1787101369298.pngzyt_0-1787101369298.png It's because (((Bd->Des3 & GMAC_RDES3_OWN_MASK) != 0U)  zyt_1-1787101442166.pngzyt_1-1787101442166.pngzyt_1-1787101442166.pngzyt_1-1787101442166.pngzyt_1-1787101442166.png The function call flow is like below, all belong to RTD driver: zyt_2-1787101651452.pngzyt_2-1787101651452.pngzyt_2-1787101651452.pngzyt_2-1787101651452.pngzyt_2-1787101651452.png At this time, Eth_43_GMAC_Receive will not read data of GMAC buffer. So after some times, the fifo of GMAC is full, so the frame come later will drop. Do you think my analysis make sense?? If so, why (((Bd->Des3 & GMAC_RDES3_OWN_MASK) != 0U) happened? What might be the reason? Thans. Re: GMAC RX interrupt of S32K328 Hello @zyt , Thank you for the update. Yes, the fact that the issue disappears when D_CACHE_ENABLE is removed strongly indicates a cache coherency or memory-region configuration issue.   However, Gmac_apxState itself does not normally need to be placed in non-cacheable memory. It contains CPU-side driver state and pointers and is not directly accessed by the GMAC DMA. The important objects shared between the CPU and GMAC DMA are the hardware descriptor rings and the RX/TX data buffers.   I checked the generated files shared previously. In Gmac_Ip_Cfg.h, the generated configuration contained:   #define GMAC_HAS_CACHE_MANAGEMENT (STD_OFF)   At the same time, Gmac_Ip_Cfg.c places the GMAC RX/TX descriptors and data buffers into the NO_CACHEABLE MemMap section. Therefore, the generated configuration appears to rely on these objects being mapped to a genuinely non-cacheable memory region rather than on explicit cache maintenance by the GMAC driver.   Please regenerate the complete RTD configuration and perform a clean build after enabling EthEnableCacheManagement. Then please check the value of GMAC_HAS_CACHE_MANAGEMENT in the Gmac_Ip_Cfg.h file that is actually compiled. If it still remains STD_OFF, the checkbox is not enabling the low-level GMAC cache maintenance in the generated build.   Please also share the linker map file and the relevant linker/MPU memory-region configuration. We need to verify the final sections and memory attributes of:   - GMAC_0_RxRing_0_DescBuffer - GMAC_0_RxRing_0_DataBuffer - GMAC_0_TxRing_0_DescBuffer - GMAC_0_TxRing_0_DataBuffer   The generated source places these objects into a non-cacheable section, but the linker script and MPU configuration must also map that section to a genuinely non-cacheable region. Otherwise, the CPU may read a stale cached descriptor value, for example OWN = 1, even after the DMA has updated the descriptor in RAM.   I would not recommend moving Gmac_apxState to non-cacheable memory at this point. The first step is to verify that all DMA-shared descriptors and buffers are placed in the correct non-cacheable MPU region, or alternatively that GMAC cache management is really enabled in the compiled driver configuration. Best regards, Pavel Re: GMAC RX interrupt of S32K328 Hello @zyt , Thank you for the detailed debugging information. Your observation is useful, but I would interpret the OWN bit differently.   When RDES3.OWN is set, the RX descriptor is owned by the DMA, not by the CPU. Therefore, Gmac_Ip_ReadFrame() correctly reports GMAC_STATUS_RX_QUEUE_EMPTY because the current descriptor has not yet been completed and returned to software. An RX descriptor with OWN = 1 is normally available to DMA, so this condition alone does not indicate that the RX ring is blocked or that the GMAC FIFO must become full.   The important question is why the RX interrupt callback is entered while RxCurrentDesc points to a descriptor that is still owned by DMA. The interrupt may have been caused by another RX/DMA status condition, or the completed descriptor may not match the current software descriptor pointer.   The generated code places the GMAC RX descriptors and RX data buffers into a non-cacheable MemMap section. However, I do not see the linker map file in the shared project, so I cannot verify whether this section is actually mapped to a non-cacheable memory region in the final executable.   Could you please share the linker map file generated by the build? In particular, I would like to check the final addresses and sections of:   - GMAC_0_RxRing_0_DescBuffer - GMAC_0_RxRing_0_DataBuffer - GMAC_0_TxRing_0_DescBuffer - GMAC_0_TxRing_0_DataBuffer   Please also confirm whether GMAC_STATUS_RX_QUEUE_EMPTY occurs on the first Gmac_Ip_ReadFrame() call after the RX interrupt or only after one or more frames have already been read successfully. An OWN bit set to 1 may simply indicate the normal end of the receive loop, where the next descriptor is already owned by DMA and waiting for another frame. Best regards, Pavel Re: GMAC RX interrupt of S32K328 Hello: The problem is caused by cache, when I delete macro D_CACHE_ENABLE from my project, all things go normal. Is that mean cache coherency problem? But when I add D_CACHE_ENABLE and Check the box below, the problem also occured. zyt_2-1787215536381.pngzyt_2-1787215536381.png I didn't modify any variable region settings of RTD, and I checked the RTD driver, GMAC_0_Rx/TXRing_0_Desc/DataBuffer is in no_cache region, but others don't, such as Gmac_apxState, it's in mcal_bss which is cached. It that reasonable? zyt_4-1787215940789.pngzyt_4-1787215940789.png So how to solve this problem with D_CACHE_ENABLE added? Thanks.
View full article
S32K328のGMAC RX割り込み 私はS32K328のGMACを使っていて、PCからパッケージを受け取るために割り込み方式を使いたいと思っています。しかし、いくつかの異なる現象が発見された。 1. 割り込みハンドラGMAC0_CH0_RX_IRQHandlerを呼び出し、通常通りパッケージを受信できます。 2. PCがパッケージを送信した後、何秒も通話GMAC0_CH0_RX_IRQHandler。 3. GMAC0_CH0_RX_IRQHandler電話できず、パッケージも届かない? その理由は一体何だろうか?どうすれば解決できるでしょうか? Re: GMAC RX interrupt of S32K328 こんにちは、 @zyt さん。 設定情報を共有していただきありがとうございます。EB tresosが手元にないため、提供いただいたファイルからGMACの設定を手動で確認しました。 あなたのEth_43_GMAC構成を、正常に動作するS32K358 GMAC 1G lwIP FreeRTOSリファレンスプロジェクトと比較しました。大きな違いの一つは、Egress FIFO構成です。あなたのプロジェクトでは、Egress FIFOバッファ長は128バイト、MTL Egressキューサイズは256バイトに設定されています。一方、リファレンスプロジェクトでは、Egress FIFOバッファ長は1536バイト、MTL Egressキューサイズは4096バイトです。   もしアプリケーションがフレームを送信したり、上位層が応答を送る場合、この小さなTX/Egress構成は標準的なイーサネットフレーム、特に1G RGMIIモードでは制限が多すぎる可能性があります。テストとして、以下の値を増やしてみてください。   - EthCtrlConfigEgressFifoBufLenByte を 1536 に変更 - EthCtrlConfigMTLEgressQueueSizeInBytes を 4096 に変更   RXパスの場合、RXバッファの長さ自体は1536バイトで、これは妥当な値に見えます。しかし、あなたのMTLイングレスキューのサイズは1536バイトですが、参照プロジェクトでは4096バイトを使用しています。したがって、別のテストとして、以下の値も増やしてみてください。   - EthCtrlConfigMTLIngressQueueSizeInBytes を 4096 に変更   さらに、デバッグのために、一時的に全受信モードを有効にしてください。現在の設定ではPKT_FILTER_RECV_ALLが無効になっていますが、参照プロジェクトでは有効になっています。これにより、MACフィルタリングを分析から除外することができます。   EthEnableCacheManagementなど、他にも違いがあります。 EthCtrlReleaseResourceAfterReception ですが、これは必ずしも間違っているわけではありません。   よろしくお願いいたします。 パベル Re: GMAC RX interrupt of S32K328 こんにちは: ユニキャストフレームとブロードキャストフレームの両方を試しましたが、各フレーム間の遅延は1秒で、十分遅いと思います。 現象は同じで、最初は RxStatsDropEvents は発生しませんが、数フレーム後に発生します。 私のEB構成は添付ファイルの通りです。ご都合の良い内容かどうかご確認いただけますでしょうか。 ありがとうございます。 Re: GMAC RX interrupt of S32K328 こんにちは、 @zyt さん。 RxStatsDropEventsは、一部のフレームがGMACによって認識されているものの、RXパスのどこかでドロップされていることを示唆しています。これはRXリソースの可用性、RX FIFO/キュー処理、ディスクリプタ/バッファの可用性、パケットフィルタリング、または上位層の受信処理に関連している場合があります。   以下の点を確認してください。   1. PCから同じユニキャストフレームをゆっくりと送信してください。例えば、一度に1フレームずつ送信したり、フレーム間に大きな遅延を設けたりして、テストの前後の受信統計を比較してください。もしRxStatsDropEventsが増加しなくなった場合、その問題はRXバッファのリサイクル、プロセッシング時間、またはPCからのトラフィックのバーストに関連している可能性があります。   2. ブロードキャストフレームでテストを繰り返し、その後GMACドライバで設定されたMACアドレスに正確に割り当てられたユニキャストフレームでテストを繰り返してください。これにより、MACアドレスやフィルタリングの問題を除外することができます。   RGMIIクロックとペリフェラルの設定も必ず確認してください。参考までに、NXPコミュニティでGMACのS32K358例を公開しています: https://community.nxp.com/t5/S32K-Knowledge-Base/Example-S32K358-GMAC-1G-lwIP-FreeRTOS-S32DS-3-6-1-RTD600/ta-p/2355872     この例はS32K358向けでありS32K328用ではないため、S32K328ピン配置とクロック構成を確認せずに直接コピーしないでください。しかし、全体のクロック設定、Eth_43_GMAC設定、DCMRWFレジスタの回避策の参考として利用できます。   可能であれば、あなたのzip化プロジェクトも共有していただけますか?プロジェクトがなければ、ドロップが設定、RXリソース処理、キュールーティング、またはアプリケーションの受信経路によるものかを判断するのは困難です。 よろしくお願いいたします。 パベル Re: GMAC RX interrupt of S32K328 こんにちは: RTD関数のフレーム情報を読みEth_43_GMAC_GetRxStats、ドロップイベントがあるようです。 zyt_0-1787017861198.pngzyt_0-1787017861198.pngzyt_0-1787017861198.pngzyt_0-1787017861198.pngzyt_0-1787017861198.pngzyt_0-1787017861198.pngzyt_0-1787017861198.pngzyt_0-1787017861198.pngzyt_0-1787017861198.png RXフローはすべて以下のようにRTDによって処理され、私は変更していません。 GMAC0_CH0_RX_IRQHandler -> GMAC_RxIRQHandler -> Eth_43_GMAC_RxIrqCallback -> Eth_43_GMAC_Receive その理由は一体何だろうか?ありがとう。 Re: GMAC RX interrupt of S32K328 こんにちは、 @zyt さん。 詳細を教えていただきありがとうございます。   また、このThreadに従ってピン/クロック/device_init()も確認してください: S32K358 - GMACクロック構成   スクリーンショットから判断すると、GMAC0割り込みベクタは、GMAC0_CH_0_RX_IRQHandlerを含むRTDハンドラに設定され、マッピングされているようです。このハンドラが時々入力され、フレームが受信されるため、基本的な割り込みルーティングは完全に間違っているわけではありません。   ただし、AUTOSAR Eth_43_GMACドライバーを使用する際は、低レベルIRQハンドラ上の受信フローも必ず確認してください。RX割り込みハンドラ自体は通常、完全なアプリケーションレベルの受信処理ではありません。アプリケーションや上位層は、例えばEth_43_GMAC_Receive()のように期待されるEth_43_GMAC受信APIフローを呼び出す必要があります。これにより、受信フレームがドライバから読み込まれ、設定済みのコールバックパスをさらに通過します。   以下の点をご確認ください。   1. Eth_43_GMAC_Receive()がRX割り込みイベント情報の後、またはアプリケーションデザインに応じてメイン/タスクコンテキストから定期的に呼び出されるかを確認してください。割り込みが発生したにもかかわらず、受信したフレームがRXバッファから消費されない場合、後続のフレームが期待どおりに受信されない可能性があります。   2. 受信されたユニキャストフレーム宛先MACアドレスがGMACドライバで設定されたMACアドレスと正確に一致しているか確認してください。デバッグの目的で、MACフィルタリングを理由に除外するために、一時的にReceive-all/promiscuousモードを有効にすることができます。   3. どのRXキュー/FIFOが使用されているか確認してください。スクリーンショットには、CH0、CH1、CH2のRX割り込みハンドラが表示されています。パケットフィルタやキュー構成がフレームを別のRXキューにルーティングする場合、アプリケーションは対応するFIFOインデックス付きの受信関数を呼び出し、そのキューを正しく処理しなければなりません。   4. RXバッファ/ディスクリプタが利用可能であることを確認してください。受信フレームが処理された後、ドライバはRXバッファを再利用または取得できる必要があります。受信バッファが枯渇した場合、最初のフレームは正しく受信される可能性がありますが、それ以降のフレームは遅延したり、失われたりする可能性があります。   5. キャッシュが有効になっている場合は、GMAC ディスクリプタと RX バッファがキャッシュ不可能なメモリ領域に配置されているか、必要なキャッシュメンテナンスが実行されていることを確認してください。そうしないと、CPUは古い記述子ステータスや古い受信データを認識する可能性があります。   6. フレームはPythonスクリプトからユニキャストフレームとして送信されるため、PCが期待される宛先MACアドレスでフレームを継続的に送信していることをWiresharkで確認してください。一部のフレームがアドレス解決を必要としたり、宛先に期待通り到達できない場合、PC側は再試行や遅延を導入し、MCU側での遅延RX割り込み動作のように見えることがあります。   参考までに、まずは改造されたS32K3イーサネット/lwIPの例と比較してみることをおすすめします。これにより、RGMII PHYインターフェース、クロック、MACアドレス、基本的なRXパスが動作しているか確認し、カスタムAUTOSAR Eth_43_GMAC割り込み受信実装に注力する前に確認できます。   それでも問題が解決する場合は、Eth_43_GMAC_Receive()が呼び出された場合、RX FIFO設定、MACアドレス/フィルター設定、失敗後のGMAC DMA/MTL/MACステータスレジスタなどのアプリケーションEth_43_GMAC受信部分を共有してください。 よろしくお願いいたします。 パベル Re: GMAC RX interrupt of S32K328 こんにちは: 1.私はRGMIIを使用しています 2. 私はRTD 6.0.0を使用しています。 3. 私はEth_43_GMACドライバを使用しています。 4. 中断とは次のようなものです。 zyt_0-1786962682804.pngzyt_0-1786962682804.pngzyt_0-1786962682804.pngzyt_0-1786962682804.pngzyt_0-1786962682804.pngzyt_0-1786962682804.pngzyt_0-1786962682804.pngzyt_0-1786962682804.pngzyt_0-1786962682804.png 5. Pythonスクリプトを使ってユニキャストフレームを送信します。 私が送信するパッケージはすべて同じで、GMAC0_CH0_RX_IRQHandler は RTD からのもので、上の図のように最も下位のハンドラです。 Re: GMAC RX interrupt of S32K328 こんにちは、 @zyt さん。 あなたのセットアップについてもう少し詳しく教えていただけますか?   1. S32K328で使っているMAC/PHYインターフェースは、例えばMII、RMII、RGMIIのいずれかです。 2. 使用しているS32K3 RTDのバージョンは何ですか? 3. AUTOSAR MCAL Eth_43_GMACドライバーを使っていますか?それとも低レベルのGMAC IPドライバーを使っていますか? 4. 関連する割り込み設定とGMAC0_CH0_RX_IRQHandlerの実装について教えていただけますか? 5. PCから送信されるフレームの種類は、ping/ICMP、UDP、生のイーサネットフレーム、ブロードキャストフレームやユニキャストフレームなどです。   参考テストとして、まずは適応したS32K3イーサネット/lwIPの例を使ってこの挙動を再現してみることもおすすめします。これにより、基本的なGMAC/PHY/クロック/設定の問題と、アプリケーション固有の割り込みやRXバッファの処理問題を区別するのに役立ちます。     症状についてですが、時折RX割り込みが呼び出されフレームが正しく受信できれば、基本的なRXパスは少なくとも部分的に動作している可能性が高いです。しかし、この一貫性のない動作は、以下のいずれかの原因による可能性があります。   - RXバッファまたはディスクリプタ処理:受信フレームが処理された後、RXバッファ/ディスクリプタはドライバ/DMAに戻されなければなりません。これが正しく行われないと、RXバッファが使用できなくなり、その後のRX割り込みが停止したり、不安定になったりする可能性があります。   - 割り込み処理:RX割り込みが正しいGMACチャネルに設定されており、期待されるドライバー割り込みハンドラ/状態クリアリングフローが使用されていることを確認してください。割り込み状態が正しくクリアされていない場合、以下のRXイベント情報が期待通りに報告されないことがあります。   - キャッシュ/メモリの一貫性: キャッシュが有効になっている場合は、GMAC ディスクリプタと RX バッファが適切なキャッシュ不可のメモリ領域に配置されているか、必要なキャッシュメンテナンスが実行されていることを確認してください。そうしないと、CPUは古い記述子ステータスや古い受信データを認識する可能性があります。   - パケットフィルタリング/MACアドレス: デバッグ目的で、一時的に受信全モード/プロミスキャスモードを有効にしてみてください。これは、フレームがMACアドレスフィルタ、VLANフィルタ、またはその他のパケットフィルタ設定によって拒否されたかどうかを確認するのに役立ちます。   - フレームの種類と PC の動作: PC が ping などの IP トラフィックを送信する場合、ICMP トラフィックが送信される前に、最初のフレームは ARP 要求/応答である可能性があります。ARPの解像度が失敗したり、一部のフレームがフィルタリング・ドロップされた場合、PCがARPを再送信したり、アプリケーションが後で再試行したりして割り込みが数秒遅れているように見えることがあります。   - PHYリンクとクロック:PHYリンクが稼働していること、選択したMII/RMII/RGMIIインターフェースに必要な入力クロックが安定していることも確認してください。   上記の構成の詳細と、可能であれば、障害発生後のGMAC DMA/MTL/MACステータスレジスタを共有してください。これにより、問題が割り込み設定、RXディスクリプタ/バッファ処理、パケットフィルタリング、外部PHY/インターフェース設定に関連しているかどうかを特定するのに役立ちます。 よろしくお願いいたします。 パベル Re: GMAC RX interrupt of S32K328 こんにちは: 以下のように、ご指示いただいたとおりに設定しました。 zyt_0-1787045193851.pngzyt_0-1787045193851.pngzyt_0-1787045193851.pngzyt_0-1787045193851.pngzyt_0-1787045193851.pngzyt_0-1787045193851.pngzyt_0-1787045193851.pngzyt_0-1787045193851.png zyt_1-1787045222335.pngzyt_1-1787045222335.pngzyt_1-1787045222335.pngzyt_1-1787045222335.pngzyt_1-1787045222335.pngzyt_1-1787045222335.pngzyt_1-1787045222335.pngzyt_1-1787045222335.png zyt_2-1787045282610.pngzyt_2-1787045282610.pngzyt_2-1787045282610.pngzyt_2-1787045282610.pngzyt_2-1787045282610.pngzyt_2-1787045282610.pngzyt_2-1787045282610.pngzyt_2-1787045282610.png zyt_3-1787045358003.pngzyt_3-1787045358003.pngzyt_3-1787045358003.pngzyt_3-1787045358003.pngzyt_3-1787045358003.pngzyt_3-1787045358003.pngzyt_3-1787045358003.pngzyt_3-1787045358003.png EthCtrlReleaseResourceAfterReceptionは外部データバッファを使用した場合にのみ適用されるため、変更できません。 zyt_4-1787045508280.pngzyt_4-1787045508280.pngzyt_4-1787045508280.pngzyt_4-1787045508280.pngzyt_4-1787045508280.pngzyt_4-1787045508280.pngzyt_4-1787045508280.pngzyt_4-1787045508280.png これらを変更した後も結果は同じで、RxStatsDropEvents が表示されました。 zyt_5-1787045605969.pngzyt_5-1787045605969.pngzyt_5-1787045605969.pngzyt_5-1787045605969.pngzyt_5-1787045605969.pngzyt_5-1787045605969.pngzyt_5-1787045605969.pngzyt_5-1787045605969.png 変更された設定ファイルは添付ファイルのようなものです。 もう少しアドバイスをいただけますか?ありがとう。 Re: GMAC RX interrupt of S32K328 こんにちは、 @zyt さん。 最新情報のご提供ありがとうございます。あなたのファイルを再度確認しましたが、不審な点は何も見つかりませんでした。FIFO/キューのリソースを増やしても動作が変わらない場合は、設定パラメータをむやみに変更し続けるべきではありません。次のステップは、実際にRxStatsDropEventsとしてカウントされるフレームを特定することです。ドロップカウンターが増加するのは、Pythonのユニキャストフレームが送信された時だけなのか、それともPythonのトラフィックが実行されていない時にも増加するのかを確認してください。PC側のバックグラウンドトラフィックやフィルタリングされたフレームも受信統計に影響を与える可能性があるためです。 よろしくお願いいたします。 パベル Re: GMAC RX interrupt of S32K328 すみません、あなたがEBに加入していないことを忘れていました。 添付ファイルは、修正後に生成されたファイルです。 Re: GMAC RX interrupt of S32K328 こんにちは: 私のテストでは、ブロードキャストフレームもユニキャストフレームもドロップでき、pヘノメノンは同じで、PCは私のコントロール外のフレームを送りません。 フレームを送信すると、RTD 関数 Gmac_Ip_ReadFrame が以下の分岐に入るという特別な現象が時々発生します。 zyt_0-1787101369298.pngzyt_0-1787101369298.pngzyt_0-1787101369298.pngzyt_0-1787101369298.pngzyt_0-1787101369298.png それは、(((Bd->Des3 & GMAC_RDES3_OWN_MASK) != 0U) だからです。 zyt_1-1787101442166.pngzyt_1-1787101442166.pngzyt_1-1787101442166.pngzyt_1-1787101442166.pngzyt_1-1787101442166.png 関数コールフローは以下の通りで、すべてRTDドライバーに属します: zyt_2-1787101651452.pngzyt_2-1787101651452.pngzyt_2-1787101651452.pngzyt_2-1787101651452.pngzyt_2-1787101651452.png 現時点では、Eth_43_GMAC_Receive は GMAC バッファのデータを読み取りません。 しばらくするとGMACのFIFOが満タンになると、後から来たフレームが落ちます。 私の分析は理にかなっていると思いますか? もしそうなら、なぜ(((Bd->Des3 & GMAC_RDES3_OWN_MASK) != 0U) が起こったのでしょうか?その理由は一体何だろうか? ありがとう。 Re: GMAC RX interrupt of S32K328 こんにちは: 問題はキャッシュが原因です。プロジェクトからマクロ D_CACHE_ENABLE を削除すると、すべて正常に戻ります。 それはキャッシュコヒーレンシの問題を意味しますか? しかし、D_CACHE_ENABLE を追加して下のチェックボックスをオンにすると、問題も発生しました。 zyt_2-1787215536381.pngzyt_2-1787215536381.pngzyt_2-1787215536381.pngzyt_2-1787215536381.png RTDの可変領域設定は一切変更していませんし、 RTDドライバーを確認したところ、GMAC_0_Rx/TXRing_0_Desc/DataBufferはno_cacheリージョンにありますが、Gmac_apxStateのようにキャッシュされているmcal_bssに入っていません。そんなに妥当なのか? zyt_4-1787215940789.pngzyt_4-1787215940789.pngzyt_4-1787215940789.pngzyt_4-1787215940789.png では、D_CACHE_ENABLEを加えた上でこの問題をどう解決すればいいのでしょうか? ありがとうございます。 Re: GMAC RX interrupt of S32K328 こんにちは、 @zyt さん。 詳細なデバッグ情報をありがとうございました。あなたの指摘は参考になりますが、「OWN」の部分については、私は少し違った解釈をします。   RDES3.OWNが設定されている場合、RXディスクリプタはCPUではなくDMAによって所有されます。したがって、Gmac_Ip_ReadFrame()は現在の記述子がまだ完成してソフトウェアに戻されていないため、正しくGMAC_STATUS_RX_QUEUE_EMPTYを報告します。OWN = 1のRXディスクリプタは通常DMAに利用可能であるため、この条件だけでRXリングがブロックされていることやGMACのFIFOが満杯であることを示すわけではありません。   重要な疑問は、RxCurrentDescがまだDMAによって所有されているディスクリプタを指しているにもかかわらず、なぜRX割り込みコールバックが実行されるのかということである。割り込みは別のRX/DMAステータス条件によって引き起こされた場合や、完了した記述子が現在のソフトウェア記述子ポインタと一致しない可能性があります。   生成されたコードは、GMAC RX ディスクリプタと RX データバッファをキャッシュ不可能な MemMap セクションに配置します。しかし、共有プロジェクトにはリンカーマップファイルが見当たらないため、このセクションが最終実行ファイル内のキャッシュできないメモリ領域に実際にマッピングされているかどうか確認できません。   ビルドで生成されたリンカーマップファイルを共有してもらえますか?特に、以下の最終住所とセクションを確認したいと思います。   - GMAC_0_RxRing_0_DescBuffer - GMAC_0_RxRing_0_DataBuffer - GMAC_0_TxRing_0_DescBuffer - GMAC_0_TxRing_0_DataBuffer   また、GMAC_STATUS_RX_QUEUE_EMPTY が、RX 割り込み後の最初の Gmac_Ip_ReadFrame() 呼び出し時に発生するのか、それとも 1 つ以上のフレームが正常に読み取られた後にのみ発生するのかを確認してください。OWNビットが1に設定されている場合、それは単に受信ループの通常の終了を示している可能性があり、次のディスクリプタは既にDMAによって所有されており、別のフレームを待っている状態です。 よろしくお願いいたします。 パベル Re: GMAC RX interrupt of S32K328 こんにちは、 @zyt さん。 最新情報のご提供ありがとうございます。はい、D_CACHE_ENABLEを削除すると問題が解消されるという事実は、キャッシュの一貫性またはメモリ領域の設定に問題があることを強く示唆しています。   しかし、Gmac_apxState自体は通常、キャッシュ不可能なメモリに配置する必要はありません。CPU側のドライバの状態とポインタを含み、GMAC DMAから直接アクセスされることはありません。CPUとGMAC DMAの間で共有される重要なオブジェクトは、ハードウェア記述子リングとRX/TXデータバッファである。   以前共有された生成ファイルを確認しました。Gmac_Ip_Cfg.h では、生成された設定には以下が含まれていました。   #define GMAC_HAS_CACHE_MANAGEMENT (STD_OFF)   同時に、Gmac_Ip_Cfg.cGMACのRX/TX記述子とデータバッファをNO_CACHEABLE MemMapセクションに配置します。したがって、生成される構成は、これらのオブジェクトが本当にキャッシュできないメモリ領域にマッピングされることに依存しており、GMACドライバーによる明示的なキャッシュ保守に依存していないようです。   EthEnableCacheManagementを有効にした後、RTD構成全体を再生成し、クリーンビルドを実行してください。次に、Gmac_Ip_Cfg.h 内の GMAC_HAS_CACHE_MANAGEMENT の値を確認してください。実際にコンパイルされるファイル。STD_OFFのままの場合、生成されたビルドでは低レベルのGMACキャッシュメンテナンスが有効になっていません。   リンカーマップファイルと、関連するリンカー/MPUメモリ領域の設定も共有してください。以下の最終セクションとメモリ属性を検証する必要があります。   - GMAC_0_RxRing_0_DescBuffer - GMAC_0_RxRing_0_DataBuffer - GMAC_0_TxRing_0_DescBuffer - GMAC_0_TxRing_0_DataBuffer   生成されたソースコードはこれらのオブジェクトをキャッシュ不可能なセクションに配置しますが、リンカースクリプトとMPU構成もそのセクションを真にキャッシュ不可能な領域にマッピングする必要があります。そうしないと、DMAがRAM内の記述子を更新した後でも、CPUは古いキャッシュされた記述子値(例えばOWN = 1)を読み取ってしまう可能性があります。   現時点では、Gmac_apxStateをキャッシュ不可能なメモリに移動することはお勧めしません。最初のステップは、すべてのDMA共有ディスクリプタとバッファが正しい非キャッシュ可能なMPU領域に配置されているか、あるいはコンパイル済みドライバ構成でGMACキャッシュ管理が本当に有効であるかを確認することです。 よろしくお願いいたします。 パベル
View full article
S32N55: How to build a blob image for fast wake-up boot. Hello Team, As we know, the S32N55 supports Fast Wake-up Boot. I tried building a blob image using the same format as Full Wake-up Boot, but the boot process failed. Could you please guide me on how to correctly build a blob image for Fast Wake-up Boot? Thank you! Tangsheng_Zhou_0-1766369489644.pngTangsheng_Zhou_0-1766369489644.png Best regards, Tangsheng. FSS_FW Priority: MEDIUM Re: S32N55: How to build a blob image for fast wake-up boot. Hello @Tangsheng_Zhou, The team has picked up the case and will provide an answer as soon as possible.  Best regards, Radu  Re: S32N55: How to build a blob image for fast wake-up boot. Hello @RaduBraga  I noticed that this ticket has been closed. Is there any update on the progress?   Best regards, Tangsheng. Re: S32N55: How to build a blob image for fast wake-up boot. Hello @Tangsheng_Zhou , I took over the case and will provide a response as soon as possible.   Best regards, Paul Re: S32N55: How to build a blob image for fast wake-up boot. Hello @Tangsheng_Zhou , If you are supporting a Direct Customer, please provide: BSSM Contract: Yes / No Customer Company*: Project Name*: Customer Contact Point* (Name & Email): Software & Hardware Information: SW Package Info*: HW* (Board/Chipset/Platform): SW Version*: *required I am still working with the development team for this case Best regards, Paul Re: S32N55: How to build a blob image for fast wake-up boot. Hello @Tangsheng_Zhou , Thank you for these details, I am working on this case and will provide an answer as soon as possible! Best regards, Paul Re: S32N55: How to build a blob image for fast wake-up boot. Hello @PaulB0bes  This case is not tied to any specific customer or project. However, I believe customers may encounter similar questions in the future, which is why I raised this request.   Best regards, Tangsheng. Re: S32N55: How to build a blob image for fast wake-up boot. Hello @PaulB0bes  Below are the detailed steps for testing.   1. built a small FSS image within AOSRAM memory region(reserved the IVT header), which only have a while loop in main.c Tangsheng_Zhou_0-1784553297963.pngTangsheng_Zhou_0-1784553297963.png 2. build the FSS Firmware image,  do I need to fill the FRB Threshold Reg? If so, how to fill it or any special thing need to be considered. Tangsheng_Zhou_1-1784553422329.pngTangsheng_Zhou_1-1784553422329.png 3. built the IVT blob image in IVT tool, with start address from 0x24800000 4. write the IVT blob image into flash at 0xD00000. 5. before the system enter sleep, copy the IVT blob image into AOSRAM, and configure the WKPU mode for FSS_WKUP0 as fast wake-up mode. Tangsheng_Zhou_2-1784553712231.pngTangsheng_Zhou_2-1784553712231.png Tangsheng_Zhou_3-1784553730808.pngTangsheng_Zhou_3-1784553730808.png 5. wakeup the system image via FSS_WAKUP0. The FSS could not reach the while(1) loop. It appears that a reset event was triggered during the wake-up process instead of a fast wake-up.   Thanks for your support!   Best regards, Tangsheng. Re: S32N55: How to build a blob image for fast wake-up boot. Hello @Tangsheng_Zhou , It would help if you could share the exact steps you followed when you tried to build the blob image. I think it would be easier for us to identify the issue that way.   Best regards, Paul Re: S32N55: How to build a blob image for fast wake-up boot. Hi @Tangsheng_Zhou , FRB is for TCM memory (ITCM +DTCM). In theory we have 2 cases 1: FAST wakeup Boot      for fast wakeup FRB is not needed, due to the fact that image boots from AON SRAM Memory. 2: FULL wakeup Boot      Can you tell me if you want to boot to ITCM? if yes FRB threshold 0 should be provided in FSS Image header, the address is 12 bit masked and address will be calculated as multiple of 8kb for FRB .       Hope this helps a little. Also could you provide me the IVT blob? Best regards, Paul Re: S32N55: How to build a blob image for fast wake-up boot. Hello @PaulB0bes  No, I just want to run the F-Core in AO-SRAM.  main_app1.bin is the FSS firmware image. How to fill these two field, should it be started from AO_SRAM address, 0x24800000? the start pointer and entry pointer of my image is 0x24800240. Tangsheng_Zhou_0-1784682563629.pngTangsheng_Zhou_0-1784682563629.png main_blob1.bin is the blob image that contain IVT header. Thanks! Best regards, Tangsheng. Re: S32N55: How to build a blob image for fast wake-up boot. Hello @PaulB0bes  The complete IVT image rather than the FSS Firmware was copied to AO_SRAM before entering sleep mode to test the fast wake-up functionality.   Thanks! Best regards, Tangsheng Re: S32N55: How to build a blob image for fast wake-up boot. Hello @PaulB0bes  The whole IVT blob image was copied to start of AO_SRAM, including IVT header and FSS FW header, and FSS FW binary. Thanks! Best regards, Tangsheng. Re: S32N55: How to build a blob image for fast wake-up boot. Hi @Tangsheng_Zhou , Just to make sure I understand the flow, are you copying the complete IVT blob image to the beginning of AO_SRAM before sleep, or are you copying only the FSS firmware image for Fast Wake-up Boot? Best regards, Paul Re: S32N55: How to build a blob image for fast wake-up boot. Hi @Tangsheng_Zhou , Could you please confirm that the Fast Wake-up Boot is completing successfully? If the wake-up process is confirmed to be working as expected, this may indicate an issue with the image.  I would like to narrow down the possible causes step by step   Best regards, Paul Re: S32N55: How to build a blob image for fast wake-up boot. Hello @PaulB0bes  I think the WKPU configuration is correct. As I understand it, the main difference between Full Wake-up and Fast Wake-up is the WBMSR configuration. Is that right? Are there any other settings or factors that need to be considered? Also, could you please share the correct steps or a fast wake-up blob image verified by you or your team? Thanks for your support! Best regards, Tangsheng. Re: S32N55: How to build a blob image for fast wake-up boot. Hi @Tangsheng_Zhou , The team is currently overloaded with releases. I’ll apply a bit of pressure on my side, do some investigation and get back to you with an answer as soon as possible.   Best regards, Paul Re: S32N55: How to build a blob image for fast wake-up boot. Hi @Tangsheng_Zhou , WBMSR is one of the key differences between Full Wake-up and Fast Wake-up Boot. However, it is not the only factor. For Fast Wake-up Boot, BootROM expects a valid image (IVT + FSS FW, with Wakeup DCD if required) to be available in AON SRAM before entering sleep. In addition to WBMSR, the wake-up source configuration, AON SRAM retention and valid IVT/FSS headers should also be verified. The expected Fast Wake-up flow is:   1. Generate the IVT blob image containing IVT + FSS FW. 2. Add Wakeup DCD if required. 3. Copy the blob image to the beginning of AON SRAM. 4. Configure the system for Fast Wake-up mode. 5. Enter sleep and trigger the wake-up source Regarding a verified Fast Wake-up blob image, I am checking internally and will update you if a validated reference image is available   Hope this helps a little.   Best regards, Paul Re: S32N55: How to build a blob image for fast wake-up boot. Hello @PaulB0bes  Thanks for your reply. I tested the fast wake-up function following the steps you provided, but the issue is still present. Could you please confirm whether you have tested it successfully on your side?   Thanks!  Best regards, Tangsheng. Re: S32N55: How to build a blob image for fast wake-up boot. Hi @Tangsheng_Zhou , If you believe the provided answer is appropriate and you have no further questions regarding the ticket, please mark the answer as "Accept as Solution". For future cases please use NXP JIRA: Jira Project  Additionally, if we do not receive a response within the next 7 days, we will close the case. Best regards,  Paul 
View full article
i.MX6Q BOOT_CFG4[6] Custom Carrier variant detection Dear NXP Support Team,  one of our i.MX6Quad module customers has the requirement for a custom carrier board variant detection (loading different device tree in U-Boot). The system uses SD Card as boot source only. The customers idea is to use BOOT_CFG4[6] (high or low) to detect the custom board variant. Since BOOT_CFG4[6] is documented as "EEPROM Recovery Enable" and reserved for 'Serial-ROM' boot mode. We are wondering whether there might be any restrictions or problems if this pin is used on customer’s baseboard when booting from SD Card.   Can NXP comment on whether the BOOT_CFG4[6] can be used safely for the board variant detection without any impact on SD card boot.    Thank you in advance  Tim  i.MX6Quad
View full article
SBCFS2613 メインステート障害反応に関する説明が必要 こんにちは、NXPさん。 各レジスタで以下のフォルトに対して デフォルトのフェイルセーフ反応 ( FSXBとRSTBの主張)が設定されているか確認していただけますか? M_TSD_FLG M_REG_FLG M_VSUP_FLG 上記のレジスタの障害はINTB表示を提供するように構成されているため、 FSXBやRSTBのアサートなどのデフォルトのフェイルセーフ反応も備えているかどうかを明確にする必要がある。 ありがとうございます シヴァハリ・G Re: Clarifications required for SBCFS2613 Main state Faults reaction こんにちは、RafaRさん。 あなたがどのPNについて言及しているのか、正確には特定できませんでした。 私はMFS2613AMDA6を使用しています。 FS0B(FSXB)やRSTBアサーションなどのフェイルセーフ反応は、フラグ自体に自動的に関連付けられるわけではなく、対応するフェイルセーフ構成に依存します。 はい、すべてのレギュレータのUV/OV障害には、フェイルセーフ構成レジスタ「 FS_I_OVUV_SAFE_REACTION1」と「FS_I_OVUV_SAFE_REACTION2」があります。しかし、INTBのマスキング/アンマスキング機能でこれらの障害を構成できるのに、すべてのレギュレータの過電流障害に対してフェイルセーフ反応を構成する機能はありますか? OC障害の例(VBSTOV_I、VBSTOC_I、VPREOC_I、TRK1OC_I、COREOC_I) ありがとうございます シヴァハリ・G Re: Clarifications required for SBCFS2613 Main state Faults reaction こんにちは、 シヴァハリ 良い一日! どのPNについて言及されているのか正確には特定できませんでしたが、一般的にはこれはFS26のすべてのバージョンに当てはまります。 RafaR_0-1787266460038.pngRafaR_0-1787266460038.png 要約すると、M_TSD_FLG、M_REG_FLG、およびM_VSUP_FLGのフラグは、デフォルトでは割り込みソースです。FS0B(FSXB)やRSTBアサーションのようなフェイルセーフ反応は、フラグ自体に自動的に関連付けられず、対応するフェイルセーフ構成に依存します。例えば、TSD障害は明確な例であり、ディープフェイルセーフへとエスカレーションする設定が可能です。 この情報がお役に立てば幸いです。他に何かご不明な点がありましたら、お気軽にお問い合わせください。 良い一日をお過ごしください。幸運を祈ります。
View full article
imx8mp-evk SAI5外部I2Sマイク(SPH0645) - クロック生成に失敗しました。正しいクロックについて助けが必要です。 こんにちは、 基板:i.MX8MPLUSLPD4-EVK(8MPLUS-BBベース基板)   SAI5に外部I2S MEMSマイクロフォン(Knowles SPH0645LM4H)を取り付けます。 J21(EXP_CN)に物理的に配線されているSoC側のピンを使用する ベースボードの回路図に従って、レベルシフターU57/U58を介して拡張ヘッダーを接続 (SPF-46370)   1. ハードウェア配線(回路図と照合し、オシロスコープで検証済み)   SPH0645 BCLK -> J21 ピン 40 ("PDM_CLK", SoC パッド SAI5_RXC) SPH0645 LRCL -> J21 ピン 32 ("PWM4_3V3", SoC パッド SAI5_RXFS) SPH0645 DOUT -> J21 ピン 38 ("PDM_STREAM_0"、SoC パッド SAI5_RXD0) SPH0645 SEL - > GND(左チャンネル) SPH0645 3V -> J21 ピン 1 SPH0645 GND  -> J21 ピン 6   外部I2S MEMSマイクロフォン(SPH0645)を接続しようとしています SAI5、J21拡張ヘッダーに配線(BCLK -> SAI5_RXC、LRCL -> SAI5_RXFS、DOUT > SAI5_RXD0、8MPLUS-BB回路図と照合して確認済み (オシロスコープで確認済み)。   私たちはこの問題に直面しており、解決のための支援を必要としています。   サウンドカードは正しく認識されています。   root@imx8mp-LPDDR4-EVK:~# Arecord -l カード2:SPH0645audio [SPH0645-オーディオ]、デバイス0:...   しかし、クロックエラーにより録音が失敗します。   root@imx8mp-lpddr4-evk:~# arecord -D hw:CARD=sph0645audio,DEV=0 \ -f S16_LE -r 48000 -c 1 mic.wav [  140.950940]fsl-sai 30c50000.sai:必要な処方率を算出できませんでした: 3072000 [  140.958042]fsl-sai 30c50000.sai:ASoC: 30c50000.sai の snd_soc_dai_hw_params でエラーが発生しました:-22 arecord: set_params:1435: ハードウェアパラメータをインストールできません   clk_summaryを確認すると、sai5は依然として24MHzから派生していることがわかります。 オーディオPLLではなくオシレーター:   sai_pll_out_div2      0  0  50000  Y   0  0  0  24576000 sai5                  0  0  50000  N   0  0  0  24000000 sai5_root             0  0  50000  N   0  0  0  24000000   現在の&sai5ノード:   &sai5 { #sound-dai-cells = <0> pinctrl-names = "default"; pinctrl-0 = <&pinctrl_sai5>; assignment-clocks = <&clk IMX8MP_CLK_SAI5>; assignment-clock-parents = <&clk IMX8MP_AUDIO_PLL1_OUT>; 割り当てられたクロックレート = <12288000>; fsl、sai-mclk方向出力; fsl、sai非同期; fsl,dataline = <0 0x1 0x0>; ステータス = "okay" };   pinctrl_sai5: sai5grp { fsl,pins = < MX8MP_IOMUXC_SAI5_RXFS__AUDIOMIX_SAI5_RX_SYNC 0xd6 MX8MP_IOMUXC_SAI5_RXC__AUDIOMIX_SAI5_RX_BCLK 0xd6 MX8MP_IOMUXC_SAI5_RXD0__AUDIOMIX_SAI5_RX_DATA00 0xd6 > };   また、pinctrlグループが このボード上のSAI5_RXC/RXD0/RXFSと同じ物理パッドです。   SAI5のクロックをオーディオPLLに正しくルーティングするにはどうすればいいでしょうか。 24MHz発振器を使用する代わりに、3072000Hz(48kHz)を生成する パス?   参考までに画像も添付しました。   ありがとう。 IMG_8200.jpegIMG_8200.jpeg IMG_8205.jpegIMG_8205.jpeg    preview.jpgpreview.jpg preview (1).jpgプレビュー(1).jpg    Re: imx8mp-evk SAI5 external I2S mic (SPH0645) - clock derivation fails, need help with correct cloc こんにちは、 次の設定を試してみることをお勧めします。 &sai5 { #sound-dai-cells = <0>; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_sai5>; assigned-clocks = <&clk IMX8MP_CLK_SAI5>; assigned-clock-parents = <&clk IMX8MP_AUDIO_PLL1_OUT>; assigned-clock-rates = <12288000>; clocks = <&audio_blk_ctrl IMX8MP_CLK_AUDIOMIX_SAI5_IPG>, <&clk IMX8MP_CLK_DUMMY>, <&audio_blk_ctrl IMX8MP_CLK_AUDIOMIX_SAI5_MCLK1>, <&clk IMX8MP_CLK_DUMMY>, <&clk IMX8MP_CLK_DUMMY>, <&clk IMX8MP_AUDIO_PLL1_OUT>, <&clk IMX8MP_AUDIO_PLL2_OUT>; clock-names = "bus", "mclk0", "mclk1", "mclk2", "mclk3", "pll8k", "pll11k"; fsl,sai-asynchronous; fsl,dataline = <0 0x1 0x0>; status = "okay"; }; クロックやクロック名のバインディングがない場合、ドライバは24 MHz発振器にフォールバックします。また、マイクに接続しない場合は、fsl,sai-mclk-direction-outputプロパティは必要ありません。 よろしくお願いいたします。
View full article
S32K344 FlexIO I2C DMA 你好, 我有一些关于S32K344上的FlexIO I2C DMA的问题,希望您能提供一些见解。 1. 当使用 FlexIO 模拟 I2C 时,Tx 长度设置为 尺寸 + 1。这是因为 “发送移位器在 SCL 引脚的最后一个下降沿加载一个额外的字” ? 1.png1.png1.png1.png 2.png2.png2.png2.png 2. 当使用DMA发送数据时, 主要循环计数 也设置为 大小 + 1。这是出于同样的原因吗?使用 DMA 时,所有传输的数据都来自 Master->TxData 。调用时 Flexio_I2c_Ip_MasterSendData ,应该 德州牛 长度为 大小 + 1 ,最后一个字节是否为 0xFF 或者 0x00 ? 3.png3.png3.png3.png 3. 用于接收数据, 主要循环计数 设置为 尺寸 – 1。这是为什么呢? 4. 我在 S32K344 上进行了测试,发现使用 DMA 进行 FlexIO I2C 接收数据时,接收到的数据比预期少一个字节。用示波器观察,最后一个字节的时钟信号只显示大约五六位波形。在 S32K312 上进行同样的测试没有问题。 S32K344 S32DS3.6.4 RTD700   BR, 杰森 Re: S32K344 FlexIO I2C DMA 嗨@Jason07 由于 FlexIO 不是专用的 I2C 外设,因此其实现需要额外的内部步骤才能正确完成 I2C 总线序列。 传输中的 Size + 1U 与 FlexIO 完成 I2C 帧序列所需的最终移位器负载有关。此次额外传输并不代表额外的有效载荷字节。相反,它被 FlexIO 硬件内部用于生成最终时钟脉冲,并将总线正确转换到传输结束状态。 接收端需要使用 1U 的尺寸,因为接收到的最后一个字节需要单独处理。这样,驱动程序就可以在正确的时间生成所需的 NACK 和 STOP 条件。 另外,请注意,使用 DMA 传输模式时,数据传输可能会受到缓存一致性问题的影响。为避免启用 数据缓存 时出现潜在问题,请确保用作 DMA TCD 源和目标的缓冲区分配在不可缓存的内存区域中。 调用 Flexio_I2c_Ip_MasterReceiveData() 函数时,无需增加 TRANSFER_SIZE 参数。驱动程序已经处理了接收序列所需的内部调整。 最后,在检查您的配置时,我注意到相同的 DMA 中断回调被分配给了两个 DMA 通道。根据 Flexio_I2c_Ip.c 中的描述,发送和接收应该使用不同的回调函数: FlexIO_I2c_Ip_DmaTransferCompleteNotificationShifter0() 用于 FlexIO 通道 0/1 TX FlexIO_I2c_Ip_DmaTransferCompleteNotificationShifter1() 用于 FlexIO 通道 0/1 RX BR,VaneB Re: S32K344 FlexIO I2C DMA 您好@VaneB 我找到了“单独处理最后一个接收到的字节”的代码。 然而,关于发送方面我还有一个疑问。使用中断驱动发送时,数据长度设置为 Size + 1。发送过程中,代码会检查是否是最后一个字节;如果是,则发送 0xFF 或 0x00。实际发送的数据长度仍然是 Size。但是,使用 DMA 发送时,DMA 会从发送缓冲区复制 Size + 1 个字节,并且在 Flexio_I2c_Ip_MasterEndDmaTransfer 函数中,也会将 0xFF 或 0x00 填充到 ShiftBuffer 中。这意味着实际发送的数据长度是 Size + 1,而不是 Size。这是为什么呢? 1.png1.png1.png 2.png2.png2.png 我已将附件项目中所有出现的 TRANSFER_SIZE + 1 修改为 TRANSFER_SIZE (8),并按说明修改了 DMA 中断回调。此外,我还禁用了 数据缓存。 在使用 DMA 进行 FlexIO I2C 发送时,我用示波器观察到,在 -Os 优化级别下,时钟信号正常,只有 8 个字节。然而,在 -O0 优化级别下,前 8 个字节的时钟信号正常,但在发送 ACK 之后,并没有按预期生成停止信号;相反,出现了一个额外的 1 位时钟脉冲。 3.jpg3.jpg3.jpg 对于通过 DMA 接收 FlexIO I2C 信号,LPI2C0 用作从设备发送 8 字节(0x10–0x17)。在 -O0 优化级别下,传输第 7 个字节时时钟信号异常,FlexIO 接收缓冲区仅包含 6 个字节(0x10–0x15)。 4.jpg4.jpg4.jpg 在 -Os 优化级别,传输第 8 个字节时时钟信号异常,FlexIO 接收缓冲区仅包含 7 个字节(0x10–0x16)。 5.jpg5.jpg5.jpg 以上所有问题均可可靠地重现。 Re: S32K344 FlexIO I2C DMA 嗨@Jason07 我认为关键在于 I2C 使用的是开漏信号传输: 逻辑 0 会主动将 SDA 拉低。 逻辑 1 释放 SDA,使上拉电阻将线路拉高。 由于 FlexIO 是一个可编程外设,而不是专用的 I2C 控制器,因此驱动程序必须通过控制加载到移位器中的位模式来生成 I2C 协议事件。 因此,最后的 0x00 和 0xFF 值不一定应被视为额外的有效载荷字节。相反,它们用于将 SDA 置于正确的状态以完成循环。 当 Master->SendStop == TRUE 时,驱动程序加载 0x00,强制 SDA 为低电平。当换挡器完成且 FlexIO 释放线路后,上拉电阻会使 SDA 变为高电平,而 SCL 已经为高电平,从而产生所需的停止条件(SDA:低电平 → 高电平,而 SCL 为高电平)。 当 Master>SendStop == FALSE 时,驱动程序加载 0xFF,这将保持 SDA 释放状态。上拉使 SDA 保持高电平,防止出现停止状态,并使总线准备好进行重复启动(SDA:高电平 → 低电平,而 SCL 为高电平)。 另外,我建议启用 DMA 优化模式。线程中提供了一个示例:示例 S32K344 FlexIO I2C 带 DMA 优化选项 S32DS 3.6.0 RTD 6.0.0 。 最后,您使用的是定制电路板还是EVB/FRDM?
View full article
S32K328 的 GMAC RX 中断 我使用的是 S32K328 的 GMAC,想使用中断方法从我的 PC 接收数据包。但发现了一些不同的现象: 1. 可以调用中断处理程序 GMAC0_CH0_RX_IRQHandler,并正常接收数据包。 2. PC 发送数据包后,GMAC0_CH0_RX_IRQHandler 被调用了数秒。 3. GMAC0_CH0_RX_IRQHandler 无法调用,且未收到数据包? 原因可能是什么?如何解决这个问题? Re: GMAC RX interrupt of S32K328 你好@zyt , 感谢您分享配置信息。由于我没有 EB Tresos 设备,所以我根据提供的文件手动检查了 GMAC 的配置。 我将您的 Eth_43_GMAC 配置与一个可正常运行的 S32K358 GMAC 1G lwIP FreeRTOS 参考项目进行了比较。一个显著的区别是出口 FIFO 配置。在您的项目中,出口 FIFO 缓冲区长度配置为 128 字节,MTL 出口队列大小为 256 字节。而在参考项目中,出口 FIFO 缓冲区长度为 1536 字节,MTL 出口队列大小为 4096 字节。   如果您的应用程序发送任何帧或上层发送响应,则这种小型 TX/Egress 配置对于标准以太网帧来说可能过于有限,尤其是在 1G RGMII 模式下。请尝试增加以下数值:   - 将 EthCtrlConfigEgressFifoBufLenByte 设置为 1536 - 将 EthCtrlConfigMTLEgressQueueSizeInBytes 设置为 4096   对于 RX 路径,RX 缓冲区长度本身为 1536 字节,这看起来很合理。但是,您的 MTL Ingress 队列大小也是 1536 字节,而参考项目使用 4096 字节。因此,作为另一项测试,请尝试增加以下数值:   - 将 EthCtrlConfigMTLIngressQueueSizeInBytes 设置为 4096   另外,为了进行调试,请暂时启用接收所有模式。您当前的配置已禁用 PKT_FILTER_RECV_ALL,而参考项目已启用它。这有助于将 MAC 过滤从分析中排除。   此外,还有其他一些区别,例如EthEnableCacheManagement 和 EthCtrlReleaseResourceAfterReception,但这未必是错误的。   顺祝商祺! 帕维尔 Re: GMAC RX interrupt of S32K328 你好: 我尝试过单播帧和广播帧,每帧之间的延迟是 1 秒,我觉得这速度已经够慢了。 现象相同,开始时没有 RxStatsDropEvents,但几帧后就会出现。 我的EB配置如附件所示,请帮忙检查一下是否方便您使用。 谢谢。 Re: GMAC RX interrupt of S32K328 你好@zyt , RxStatsDropEvents 表明 GMAC 接收到了一些帧,但这些帧在接收路径中的某个地方被丢弃了。这可能与接收资源可用性、接收 FIFO/队列处理、描述符/缓冲区可用性、数据包过滤或上层接收处理有关。   请尝试以下检查:   1. 请从 PC 缓慢发送相同的单播帧,例如一次发送一帧或帧之间延迟较大,并比较测试前后的 RX 统计数据。如果 RxStatsDropEvents 不再增加,则问题可能与 RX 缓冲区回收、处理时间或来自 PC 的突发流量有关。   2. 请用广播帧重复测试,然后用精确到 GMAC 驱动程序中配置的 MAC 地址的单播帧重复测试。这有助于排除 MAC 地址/过滤问题。   请同时检查RGMII时钟和外设配置。作为参考,我在NXP社区发布了一个S32K358 GMAC示例: https://community.nxp.com/t5/S32K-Knowledge-Base/Example-S32K358-GMAC-1G-lwIP-FreeRTOS-S32DS-3-6-1-RTD600/ta-p/2355872     请注意,此示例适用于 S32K358,而不是 S32K328,因此未经检查 S32K328 引脚排列和时钟配置,不得直接复制。但是,它可以作为整体时钟设置、Eth_43_GMAC 配置和 DCMRWF 寄存器解决方法的参考。   如果可以的话,能否也分享一下您压缩后的项目文件?如果没有该项目,很难确定丢包是由配置、RX 资源处理、队列路由还是应用程序接收路径引起的。 顺祝商祺! 帕维尔 Re: GMAC RX interrupt of S32K328 你好: 我通过 RTD 函数 Eth_43_GMAC_GetRxStats 读取帧信息,看起来有丢帧事件。 zyt_0-1787017861198.pngzyt_0-1787017861198.pngzyt_0-1787017861198.pngzyt_0-1787017861198.pngzyt_0-1787017861198.pngzyt_0-1787017861198.pngzyt_0-1787017861198.pngzyt_0-1787017861198.pngzyt_0-1787017861198.png RX 流全部由 RTD 处理,如下所示,我没有修改。 GMAC0_CH0_RX_IRQHandler > GMAC_RxIRQHandler > Eth_43_GMAC_RxIrqCallback > Eth_43_GMAC_Receive 造成这种情况的原因可能是什么?谢谢。 Re: GMAC RX interrupt of S32K328 你好@zyt , 谢谢你提供的详细信息。   请同时根据此帖检查 Pins/Clocks/device_init(): S32K358 - GMAC 时钟配置   从截图中可以看出,GMAC0 中断向量似乎已配置并映射到 RTD 处理程序,包括 GMAC0_CH_0_RX_IRQHandler。由于有时会进入此处理程序并接收到帧,因此基本的中断路由看起来并没有完全错误。   但是,在使用 AUTOSAR Eth_43_GMAC 驱动程序时,请同时检查底层 IRQ 处理程序之上的接收流程。RX 中断处理程序本身通常不是完整的应用程序级接收处理。应用程序或上层仍然需要调用预期的 Eth_43_GMAC 接收 API 流程,例如 Eth_43_GMAC_Receive(),以便从驱动程序读取接收到的帧,并通过配置的回调路径进一步传递。   请检查以下几点:   1. 请确认 Eth_43_GMAC_Receive() 是否在 RX 中断事件之后调用,或者根据您的应用程序设计,是否定期从您的主/任务上下文中调用。如果发生中断,但接收到的帧没有从 RX 缓冲区中被消耗,则后续帧可能无法按预期接收。   2. 请验证接收到的单播帧目标 MAC 地址是否与 GMAC 驱动程序中配置的 MAC 地址完全匹配。为了进行调试,您可以暂时启用接收所有/混杂模式,以排除 MAC 过滤作为原因。   3. 请检查使用的是哪个接收队列/FIFO。您的屏幕截图显示了 CH0、CH1 和 CH2 的 RX 中断处理程序。如果数据包过滤器或队列配置将帧路由到另一个 RX 队列,则应用程序必须使用相应的 FIFO 索引调用接收函数并正确处理该队列。   4. 请验证接收缓冲区/描述符的可用性。接收到帧并处理完毕后,驱动程序必须能够再次重用或获取 RX 缓冲区。如果接收缓冲区耗尽,第一帧可能被正确接收,但后面的帧可能会延迟或丢失。   5. 如果启用了缓存,请验证 GMAC 描述符和 RX 缓冲区是否放置在不可缓存的内存区域中,或者是否执行了所需的缓存维护。否则,CPU 可能会看到过时的描述符状态或过时的接收数据。   6. 由于帧是从 Python 脚本以单播帧的形式发送的,请通过 Wireshark 确认 PC 是否确实连续发送了具有预期目标 MAC 地址的帧。如果某些帧需要地址解析,或者目标地址无法按预期到达,则 PC 端可能会引入重试或延迟,这在 MCU 端可能看起来像是延迟的 RX 中断行为。   作为参考,我建议先将该项目与改编的 S32K3 Ethernet/lwIP 示例进行比较。这有助于确认 RGMII PHY 接口、时钟、MAC 地址和基本 RX 路径是否正常工作,然后再关注自定义 AUTOSAR Eth_43_GMAC 中断接收实现。   如果问题仍然存在,请分享应用程序的 Eth_43_GMAC 接收部分,特别是调用 Eth_43_GMAC_Receive() 的位置、RX FIFO 配置、MAC 地址/过滤器配置以及故障后的 GMAC DMA/MTL/MAC 状态寄存器。 贝茨致意, 帕维尔 Re: GMAC RX interrupt of S32K328 Hello: 1. I use RGMII 2. I use  RTD 6.0.0. 3. I use Eth_43_GMAC driver. 4. Interrupt is like below: zyt_0-1786962682804.pngzyt_0-1786962682804.pngzyt_0-1786962682804.pngzyt_0-1786962682804.pngzyt_0-1786962682804.pngzyt_0-1786962682804.pngzyt_0-1786962682804.pngzyt_0-1786962682804.pngzyt_0-1786962682804.png 5. I send unicast frames with python script. All the packages I send are the same, and GMAC0_CH0_RX_IRQHandler is from RTD which is the lowest handler like picture above. Re: GMAC RX interrupt of S32K328 你好@zyt , 您能否提供更多关于您设备配置的详细信息?   1. 你在 S32K328 上使用的是哪个 MAC/PHY 接口,例如 MII、RMII 或 RGMII? 2. 您使用的是哪个版本的S32K3 RTD? 3. 您使用的是 AUTOSAR MCAL Eth_43_GMAC 驱动程序还是底层 GMAC IP 驱动程序? 4. 能否分享一下相关的中断配置以及 GMAC0_CH0_RX_IRQHandler 的实现? 5. PC 发送的是哪种类型的帧,例如 ping/ICMP、UDP、原始以太网帧、广播帧或单播帧?   作为参考测试,我还建议首先尝试使用修改后的 S32K3 Ethernet/lwIP 示例来重现该行为。这有助于将基本的 GMAC/PHY/时钟/配置问题与特定应用中断或 RX 缓冲区处理问题区分开来。     关于症状,如果 RX 中断有时会被调用,并且可以正确接收帧,则基本的 RX 路径可能至少部分有效。然而,这种不一致的行为仍然可能由以下几点之一造成:   - RX 缓冲区或描述符处理:在处理接收到的帧之后,必须将 RX 缓冲区/描述符返回给驱动程序/DMA。如果操作不当,RX 缓冲区可能变得不可用,并且进一步的 RX 中断可能会停止或变得不一致。   - 中断处理:请确保 RX 中断已配置为正确的 GMAC 通道,并且使用了预期的驱动程序中断处理程序/状态清除流程。如果中断状态未正确清除,则以下 RX 事件可能无法按预期报告。   - 缓存/内存一致性:如果启用了缓存,请验证 GMAC 描述符和 RX 缓冲区是否放置在合适的不可缓存内存区域中,或者是否执行了所需的缓存维护。否则,CPU 可能会看到过时的描述符状态或过时的接收数据。   - 数据包过滤/MAC 地址:为了调试目的,请尝试暂时启用接收所有/混杂模式。这有助于检查帧是否被 MAC 地址过滤器、VLAN 过滤器或其他数据包过滤器设置拒绝。   - 帧类型和 PC 行为:如果 PC 发送 ping 等 IP 流量,则在发送 ICMP 流量之前,第一个帧可能是 ARP 请求/回复。如果 ARP 解析失败或某些帧被过滤/丢弃,则中断可能会延迟几秒钟,因为 PC 会重新发送 ARP 或应用程序稍后重试。   - PHY 链路和时钟:请确认 PHY 链路是否正常,以及所选 MII/RMII/RGMII 接口所需的输入时钟是否存在且稳定。   请分享上述配置详情,如果可能,请提供故障发生后的 GMAC DMA/MTL/MAC 状态寄存器。这应该有助于确定问题是与中断配置、RX 描述符/缓冲区处理、数据包过滤还是外部 PHY/接口设置有关。 顺祝商祺! 帕维尔 Re: GMAC RX interrupt of S32K328 你好@zyt , 谢谢你的更新。我再次查看了您的文件,没有发现任何可疑之处。如果在增加 FIFO/队列资源后行为仍然没有改变,我不会盲目地继续更改配置参数。下一步应该是确定哪些帧实际被计为 RxStatsDropEvents。请检查丢包计数器是否仅在发送 Python 单播帧时增加,还是在没有 Python 流量运行时也会增加,因为 PC 端后台流量或过滤帧也可能影响 RX 统计信息。 贝茨致意, 帕维尔 Re: GMAC RX interrupt of S32K328 抱歉,我忘了你没有EB。 附件是修改后生成的文件。 Re: GMAC RX interrupt of S32K328 你好: 我按照您的建议进行了如下配置: zyt_0-1787045193851.pngzyt_0-1787045193851.pngzyt_0-1787045193851.pngzyt_0-1787045193851.pngzyt_0-1787045193851.pngzyt_0-1787045193851.png zyt_1-1787045222335.pngzyt_1-1787045222335.pngzyt_1-1787045222335.pngzyt_1-1787045222335.pngzyt_1-1787045222335.pngzyt_1-1787045222335.png zyt_2-1787045282610.pngzyt_2-1787045282610.pngzyt_2-1787045282610.pngzyt_2-1787045282610.pngzyt_2-1787045282610.pngzyt_2-1787045282610.png zyt_3-1787045358003.pngzyt_3-1787045358003.pngzyt_3-1787045358003.pngzyt_3-1787045358003.pngzyt_3-1787045358003.pngzyt_3-1787045358003.png EthCtrlReleaseResourceAfterReception 为灰色,无法修改,因为它仅在使用外部数据缓冲区时应用。 zyt_4-1787045508280.pngzyt_4-1787045508280.pngzyt_4-1787045508280.pngzyt_4-1787045508280.pngzyt_4-1787045508280.pngzyt_4-1787045508280.png 修改这些设置后,结果仍然一样,出现了 RxStatsDropEvents。 zyt_5-1787045605969.pngzyt_5-1787045605969.pngzyt_5-1787045605969.pngzyt_5-1787045605969.pngzyt_5-1787045605969.pngzyt_5-1787045605969.png 修改后的配置文件就像附件一样。 您还能提供一些建议吗?谢谢。 Re: GMAC RX interrupt of S32K328 你好: 根据我的测试,无论是广播帧还是单播帧都可能丢失,p现象相同,而且 PC 不会发送任何其他超出我控制范围的帧。 我发现一个特殊情况,有时当我发送帧时,RTD 函数 Gmac_Ip_ReadFrame 会进入以下分支: zyt_0-1787101369298.pngzyt_0-1787101369298.pngzyt_0-1787101369298.pngzyt_0-1787101369298.pngzyt_0-1787101369298.png 这是因为 (((Bd->Des3 & GMAC_RDES3_OWN_MASK) != 0U) zyt_1-1787101442166.pngzyt_1-1787101442166.pngzyt_1-1787101442166.pngzyt_1-1787101442166.pngzyt_1-1787101442166.png 函数调用流程如下所示,全部属于RTD驱动程序: zyt_2-1787101651452.pngzyt_2-1787101651452.pngzyt_2-1787101651452.pngzyt_2-1787101651452.pngzyt_2-1787101651452.png 此时,Eth_43_GMAC_Receive 将不会读取 GMAC 缓冲区的数据。 因此,一段时间后,GMAC 的 FIFO 已满,所以后来的帧将被丢弃。 你觉得我的分析有道理吗? 如果是这样,为什么会发生 (((Bd->Des3 & GMAC_RDES3_OWN_MASK) != 0U)?原因可能是什么? 谢谢。 Re: GMAC RX interrupt of S32K328 你好: 问题是由缓存引起的,当我从项目中删除宏 D_CACHE_ENABLE 时,一切就恢复正常了。 那是不是意味着缓存一致性问题? 但是,当我添加 D_CACHE_ENABLE 并选中下面的复选框时,问题仍然存在。 zyt_2-1787215536381.pngzyt_2-1787215536381.pngzyt_2-1787215536381.pngzyt_2-1787215536381.png 我没有修改RTD的任何可变区域设置,并且我检查了RTD驱动程序,GMAC_0_Rx/TXRing_0_Desc/DataBuffer位于no_cache区域,但其他一些变量(例如Gmac_apxState)不在,而是在mcal_bss区域,而mcal_bss区域是缓存的。这合理吗? zyt_4-1787215940789.pngzyt_4-1787215940789.pngzyt_4-1787215940789.pngzyt_4-1787215940789.png 那么,在添加了 D_CACHE_ENABLE 之后,该如何解决这个问题呢? 谢谢。 Re: GMAC RX interrupt of S32K328 你好@zyt , 感谢您提供的详细调试信息。你的观察很有用,但我对“OWN”这部分会有不同的解读。   当设置了 RDES3.OWN 时,RX 描述符归 DMA 所有,而不是归 CPU 所有。因此,Gmac_Ip_ReadFrame() 正确地报告 GMAC_STATUS_RX_QUEUE_EMPTY,因为当前描述符尚未完成并返回给软件。OWN = 1 的 RX 描述符通常可供 DMA 使用,因此仅凭此条件并不能表明 RX 环被阻塞或 GMAC FIFO 必须已满。   关键问题是,为什么在 RxCurrentDesc 指向仍由 DMA 拥有的描述符时,会进入 RX 中断回调。中断可能是由另一个 RX/DMA 状态条件引起的,或者已完成的描述符可能与当前的软件描述符指针不匹配。   生成的代码将 GMAC RX 描述符和 RX 数据缓冲区放入不可缓存的 MemMap 部分。但是,我在共享项目中没有看到链接器映射文件,因此我无法验证该部分是否真的映射到最终可执行文件中不可缓存的内存区域。   请问您能否分享一下构建过程中生成的链接器映射文件?我尤其想核对以下各项的最终地址和部分内容:   - GMAC_0_RxRing_0_DescBuffer - GMAC_0_RxRing_0_DataBuffer - GMAC_0_TxRing_0_DescBuffer - GMAC_0_TxRing_0_DataBuffer   请确认 GMAC_STATUS_RX_QUEUE_EMPTY 是在 RX 中断后的第一次 Gmac_Ip_ReadFrame() 调用时发生,还是仅在成功读取一个或多个帧后发生。OWN 位设置为 1 可能仅仅表示接收循环的正常结束,其中下一个描述符已被 DMA 拥有,并正在等待另一个帧。 顺祝商祺! 帕维尔 Re: GMAC RX interrupt of S32K328 你好@zyt , 谢谢你的更新。是的,移除 D_CACHE_ENABLE 后问题消失这一事实强烈表明存在缓存一致性或内存区域配置问题。   但是,Gmac_apxState 本身通常不需要放在不可缓存的内存中。它包含 CPU 端驱动程序状态和指针,但 GMAC DMA 不会直接访问它。CPU 和 GMAC DMA 之间共享的重要对象是硬件描述符环和 RX/TX 数据缓冲区。   我检查了之前共享的生成文件。在 Gmac_Ip_Cfg.h 中,生成的配置包含:   #define GMAC_HAS_CACHE_MANAGEMENT (STD_OFF)   同时,Gmac_Ip_Cfg.c将 GMAC RX/TX 描述符和数据缓冲区放入 NO_CACHEABLE MemMap 部分。因此,生成的配置似乎依赖于将这些对象映射到真正不可缓存的内存区域,而不是依赖于 GMAC 驱动程序的显式缓存维护。   启用 EthEnableCacheManagement 后,请重新生成完整的 RTD 配置并执行清理构建。然后请检查 Gmac_Ip_Cfg.h 文件中 GMAC_HAS_CACHE_MANAGEMENT 的值。实际编译的文件。如果仍然保持 STD_OFF 状态,则该复选框不会在生成的版本中启用底层 GMAC 缓存维护。   请同时分享链接器映射文件和相关的链接器/MPU内存区域配置。我们需要验证以下部分的最终内容和内存属性:   - GMAC_0_RxRing_0_DescBuffer - GMAC_0_RxRing_0_DataBuffer - GMAC_0_TxRing_0_DescBuffer - GMAC_0_TxRing_0_DataBuffer   生成的源代码将这些对象放入不可缓存的部分,但链接器脚本和 MPU 配置也必须将该部分映射到真正不可缓存的区域。否则,即使 DMA 已更新 RAM 中的描述符,CPU 也可能读取过时的缓存描述符值,例如 OWN = 1。   目前我不建议将 Gmac_apxState 移动到不可缓存的内存中。第一步是验证所有 DMA 共享描述符和缓冲区是否放置在正确的不可缓存 MPU 区域中,或者验证编译后的驱动程序配置中是否真正启用了 GMAC 缓存管理。 顺祝商祺! 帕维尔
View full article
FRDM-KL25Z Documentation for USB-C Version Hi All, Does anyone know where I can find the manual and/or schematic for the USB-C version of the FRDM-KL25Z? nxp.com and their reseller sites appear to only have data on the mini-B USB version of the FRDM-KL25Z. Thanks, Peter Freedom Development Platform
View full article