Multi Source Translation Content

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

Multi Source Translation Content

讨论

排序依据:
カスタムのi.MX95 PCIeプラットフォーム上で新しいAra240モジュールをプログラムするにはどうすればいいですか? NXPチームの皆様、こんにちは。 カスタムの i.MX95ベース基板 (FRDM-i.MX95 EVKではありません)を使用し、PCIe M-Keyインターフェースを通じて Ara240 M.2モジュール を接続しています。 Ara240 Runtime SDKのドキュメントを確認した結果、通常のランタイムフローを理解しました。Ara240デバイスはPCIe上で列挙され、システム起動時に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モジュールは通常、起動時に初期化をRuntime SDKが担当する事前プログラム状態で出荷されますが、オンボードフラッシュが空白または破損している場合は、復元にはSDKツールでファームウェアを再フラッシュし、NXPの製造ガイドに記載されたプロビジョニング手順が必要です。通常、製造時にプログラムされるのは基本ファームウェアのみで、ランタイムコンポーネントは起動時に自動的にロードされます。カスタムi.MX95ボードの場合、FRDM-i.MX95と同じプロビジョニングフローが適用されますが、ボード固有のPCIeおよび電源シーケンスを調整する必要がある場合があります。製造サポートには、NXPの公式プロビジョニングおよび復旧ドキュメントが推奨されています。
查看全文
LPC55S69: Core 1 never starts despite fully verified CPBOOT/CPUCTRL/CPUCFG sequence LPC55S69: Core 1 never begins execution despite fully verified boot sequence (MCMGR and hand-written register writes both fail identically) Environment Board: LPC55S69-EVK (LPCXpresso55S69), LPC55S69JBD100 IDE: MCUXpresso IDE v25.6 [Build 136] [2025-06-27] OS: Linux (openSUSE) Toolchain: GNU ARM Embedded (bundled), GCC 14.2.1 Debug probe: onboard LPC-Link2, LinkServer backend SDK components used: driver.flexcomm, driver.mailbox, middleware.multicore.mcmgr_lpc55s69, freertos_kernel + cm33_non_trustzone_port (master only) Summary Core 0 (master, cm33_core0) runs correctly. Core 1 (slave, cm33_core1, role M33SLAVE) never appears to execute even the first instruction of its own main(), despite every element of the boot sequence being independently verified correct at the register and memory level, across two separate clean-room project builds (one hand-written register sequence, one using NXP's own MCMGR middleware). Both attempts reach an identical dead end. What Has Been Independently Verified Correct Attempt 1 — Hand-written boot sequence SYSCON->CPBOOT set to the real, linker-confirmed address of the embedded slave image (verified via objdump -h section VMA, cross-checked against nm symbol addresses — not a symbol that resolves to 0x0, an actual non-zero embed location) SYSCON->CPUCTRL read back as 0x08 (bit 3 CPU1CLKEN set, bit 5 CPU1RSTEN clear) immediately after the release write, captured in-band (written into shared memory by the same function that performed the write, not read later via a possibly-stale debugger session) SYSCON->CPUCFG bit 2 (CPU1ENABLE) confirmed set (0x04) Vector table at the confirmed boot address independently verified valid: initial stack pointer computed correctly (top of Core 1's relocated SRAM region), reset vector address matches the real ResetISR symbol from nm (confirmed by disassembling the target address and finding genuine, sensible Cortex-M startup code: cpsid i → SystemInit() → data_init/bss_init loops → cpsie i → __main → _initio → application main()) Confirmed shared-memory struct resolves to the identical physical address in both cores' independently compiled .map files Confirmed Core 1's private SRAM/stack region does not overlap Core 0's (relocated to a separate physical SRAM bank) Confirmed the embedded slave image's .data section (non-zero-initialized globals) does not land inside Core 0's live memory (required a custom linker script fragment using INSERT BEFORE .data, since the default linker script has no placement rule for the objcopy-renamed multicore section and it otherwise falls into Core 0's SRAM as an "orphan section") Despite all of the above, a diagnostic value written as the literal first line of Core 1's main() (into memory confirmed shared and correctly addressed) never changes from its initial value. Attempt 2 — Fresh project using NXP's mcmgr_lpc55s69 middleware Rebuilt from scratch using MCMGR_Init() / MCMGR_StartCore() / MCMGR_TriggerEvent() instead of hand-written register writes, to rule out a mistake in our own register sequence. Read mcmgr_internal_core_api_lpc55s69.c directly: confirmed mcmgr_start_core_internal() performs the same CPUCFG → CPBOOT → CPUCTRL sequence, using the correct SDK macros (SYSCON_CPUCTRL_CPU1RSTEN_MASK, etc.) Discovered MCMGR_Init() (called from main()) does not call MCMGR_EarlyInit() / mcmgr_early_init_internal(). The latter is a separate public function whose own source comment states it is "intended to be called as close to the reset entry as possible, (within the startup sequence in SystemInitHook)" — but nothing in the generated project wires this up automatically. SystemInitHook() is __attribute__((weak)) in the generic device startup file and defaults to an empty stub. Added our own SystemInitHook() override on both cores calling mcmgr_early_init_internal(MCMGR_GetCurrentCore()). Confirmed via .map file that this override genuinely links in as the real function (not the weak stub) on both projects. Re-applied and re-confirmed every fix from Attempt 1 (embed-address stability across iterative rebuilds, .data section redirect via the same linker fragment technique, Core 1 SRAM relocation, CPUCFG/CPBOOT/CPUCTRL register values all identical to Attempt 1's results) MCMGR_BUSY_POLL_COUNT is undefined by default, so MCMGR_StartCore(..., kMCMGR_Start_Synchronous) blocks with no timeout at all in mcmgr.c's internal wait loop (while (s_mcmgrCoresContext[coreNum].state != kMCMGR_RunningCoreState)), confirmed by reading the macro's conditional compilation directly in mcmgr.h Result: identical outcome. Core 0 blocks forever inside MCMGR_StartCore(). A diagnostic shared-memory value (confirmed identical address in both cores' .map files, in a genuinely shared SRAM bank, .noinit so unaffected by C-runtime init) written as literally the first executable line of Core 1's main() never leaves its initial value of 0. Question Given CPUCFG, CPBOOT, and CPUCTRL all read back exactly as the reference implementation (mcmgr_internal_core_api_lpc55s69.c) intends, and the embedded image at the boot address is independently confirmed to be a valid, correctly-linked Cortex-M binary — is there an additional step required to actually start Core 1's instruction fetch on this part that is not captured by these three register writes alone? Specifically: Is there a known silicon errata for LPC55S69 (any revision) affecting CPBOOT/CPUCTRL-based secondary core boot? Does starting Core 1 genuinely require a debug-probe-level action (e.g., an SWD attach/resume specifically targeting the second SWD device enumerated on this part) in addition to the application-level register sequence? This is suggested by the fact that NXP's own multicore SDK examples (e.g. freertos_message_buffers_secondary_core), when debugged via the IDE's normal single-project "Debug" flow, appear to bring up Core 1 successfully with no separate Launch Group configuration — implying MCUXpresso's debug launch itself may be performing an additional step beyond what application code alone can trigger. Is there a required minimum delay, ordering constraint, or additional register (e.g. in the power/clock domain) between these three writes that isn't reflected in the reference mcmgr_internal_core_api_lpc55s69.c implementation? Happy to provide full project files, .map files, or a minimal reproduction project on request. LPC55xx Re: LPC55S69: Core 1 never starts despite fully verified CPBOOT/CPUCTRL/CPUCFG sequence Resolved — root cause was a false negative in my own diagnostic, not a Core 1 boot failure Posting the resolution in case anyone finds this thread later with a similar symptom. The actual root cause Core 1 was booting and running correctly the entire time, in every version of this project. The problem was never CPUCFG/CPBOOT/CPUCTRL, the vector table, memory placement, or anything else in the boot sequence - it was a bug in my own diagnostic instrumentation that made it look like Core 1 never executed anything. I was using a small shared-memory struct (placed via __attribute__((section(".noinit.$SRAM4")))) written by Core 1 and read by Core 0, to observe boot progress. This technique only lands in genuinely shared memory if the project's generated linker script actually defines a region named SRAM4. My from-scratch wizard-created projects did define that region, so the technique worked there structurally - but when I later built a version on top of NXP's own working hello_world example project (which uses differently-named regions, Ram1/rpmsg_sh_mem, not SRAM4), the same attribute silently fell through to each core's own private .noinit memory instead of throwing an error. Core 0 and Core 1 were each reading/writing their own separate copy of the "shared" struct, with no compiler or linker warning that anything was wrong. Net effect: my diagnostic reported 0 (no progress) on every single test across two independent boot implementations (hand-written CPUCFG/CPBOOT/CPUCTRL registers, and NXP's own MCMGR middleware) and multiple project configurations, because the two cores were never actually looking at the same memory address to begin with - regardless of whether Core 1 was really running. How it was actually found By copying NXP's working hello_world example verbatim and only adding diagnostic writes to the existing, unmodified, proven-working main.c (rather than replacing it), I could visually confirm via the onboard LED that Core 1 was genuinely executing the full sequence - yet the shared-memory counter still read 0. That contradiction (physical proof of execution vs. a diagnostic saying otherwise) was what exposed that the diagnostic itself, not Core 1, was broken. Fixing the section name to match that project's actual region (.noinit.$rpmsg_sh_mem instead of .noinit.$SRAM4) immediately produced correct, incrementing values. Lesson for anyone else debugging multicore boot on LPC55xx If you're using a .noinit.$ section attribute for inter-core shared memory, verify the region name against that specific project's own generated _Debug_memory.ld rather than assuming a name (like SRAM4) that worked in a different project. A mismatch here fails completely silently - no build warning, no link error, no runtime fault - and produces symptoms that look exactly like a genuine boot failure (register/vector-table-level debugging will all check out fine, because the actual problem is entirely at the diagnostic layer). Thanks to everyone who read through the earlier posts - the CPUCFG/CPBOOT/CPUCTRL/vector-table verification work wasn't wasted; confirming all of that was correct is ultimately what forced the investigation toward the diagnostic mechanism itself as the remaining unverified piece. Re: LPC55S69: Core 1 never starts despite fully verified CPBOOT/CPUCTRL/CPUCFG sequence Update: Isolated the issue to project/linker configuration, not application code Since posting, I ran a decisive test that narrows this down significantly. Test: Does NXP's own unmodified multicore example work on this exact hardware? Imported multicore_examples/hello_world (primary + secondary) for LPCXpresso55S69 fresh, completely unmodified, and debugged it as-is. Result: it works. The onboard RGB LED blinks at a clean, regular 500ms on/500ms off rate — confirmed by comparing directly against my own project flashed onto the same board (LED off with my project, LED blinking with the unmodified example, LED off again when I re-flash my own project). This is conclusive: dual-core execution is possible on this exact board, probe, and IDE installation. Test: Does the example's own application code work inside my project's configuration? To isolate whether the problem was in my application code or my project's build/link configuration, I copied the working example's secondary-core main.c, app.h, and hardware_init.c verbatim (byte-for-byte, unmodified) into my own slave project, replacing my own application code entirely. Result: the LED does not blink. Identical, unmodified NXP code that works in the original example project fails to start Core 1 when built inside my own project's configuration. What this proves The issue is not in application-level code (confirmed twice now - independently in a hand-written register implementation and in an MCMGR-based implementation, and now a third time with literally the example's own source files). It is something specific to how my project's Multicore linker settings / memory region configuration differs from the working example's, despite my best efforts to match it point-for-point: CPUCFG, CPBOOT, CPUCTRL all read back exactly as intended after MCMGR_StartCore() The embedded image's vector table is independently verified valid (correct stack pointer, correct reset handler address matching the real ResetISR symbol) Master Memory Region is set to a RAM region (not PROGRAM_FLASH), matching the working example's approach of embedding Core 1's image in RAM rather than flash Core 1's own private memory does not overlap Core 0's One structural difference I've found but not yet resolved: the working example's secondary core project has no PROGRAM_FLASH memory region override at all in its .cproject (only two custom RAM-derived regions). My from-scratch wizard-created slave project has three regions including a relocated PROGRAM_FLASH. Attempting to remove that region entirely (to match the working example precisely) crashes MCUXpresso's MCU Settings page (NullPointerException: this.mcuPage is null), suggesting the IDE's tooling doesn't gracefully support a project with no flash region defined - which may itself be relevant to why matching the working example's exact configuration by hand has been difficult. Question Is there a specific, documented multicore project configuration (beyond what the wizard's "M33SLAVE" role + Multicore linker settings produce) required to get a from-scratch project into the same working state as the SDK's own hello_world example? Or is there a known limitation/bug in MCUXpresso IDE v25.6.136's project wizard for multicore LPC55S69 projects that the example's project files work around in a way the wizard doesn't replicate? Happy to share both projects' complete .cproject files for direct comparison if useful.
查看全文
i.MX6ULL REFTOP_VBGADJ 对内部 PLL 和时钟输出的影响 大家好,/亲爱的社区成员们, 我们在产品中使用了 i.MX6ULL,想了解 REFTOP_VBGADJ 的行为。 问题及解决方案: 我们之前遇到过电路板上的 USB 设备识别失败的情况。将 CCM_ANALOG_MISC0n 寄存器上的 REFTOP_VBGADJ 从默认值 (0b000) 更改为 0b110 成功解决了该问题。 问题: 我们的客户询问修改 REFTOP_VBGADJ 是否会对 i.MX6ULL 的内部 PLL 或时钟输出产生任何副作用。 请问有人能解释一下这个设置是否会影响锁相环/时钟电路吗?如果确实如此,我们应该预期模拟行为会受到哪些具体影响或变化? 任何见解或相关文献资料都将不胜感激。 提前致谢, Re: Impact of i.MX6ULL REFTOP_VBGADJ on Internal PLL and Clock Output 你好@Ichitaro_K 在 i.MX6ULL 上,低压差线性稳压器(LDO) 1.2V 带隙电压高出 30 mV。因此,需要将 REFTOP_VBGADJ(CCM_ANALOG_MISC0n 寄存器)位设置为 2b'110 进行调整。而且它对PLL没有影响。 B.R
查看全文
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.
查看全文
NXP S32M276CHABMKHSR 構造に関する質問 NXPの技術者さん、こんにちは。 こちらはMelecs Wuxiのテッドです。お会いできて嬉しいです。 S32M276 ICの構造について質問があります。(お願いします。添付ファイル(回路図 - S32M276)を参照してください。 設計はデータシートの推奨通りに行い、9ピンVDD_AE10、12ピン、25ピン、37ピンVDD_HV_Aをビーズで接続しました。私の理解では、9ピンVDD_AE10 P5V出力電圧は内部レギュレーターで生成され、その後VDD_HV_AピンのMCUダイに供給されます。 しかしL300を外したところ、その後PCBAは通常通り動作できました。 そこで質問ですが、VDD_AE10ピンとVDD_HV_Aピンは内部で接続されているのでしょうか?そうでなければ、L300システムを取り外した後もシステムが動作し続けることになり、それは理にかなっていません。 Re: NXP S32M276CHABMKHSR Structure question こんにちは、テッドさん。 L300を取り外した場合、VDD_HV_Aで測定される電圧はいくつになりますか? MCU側の電源領域VDD_HV_Aは、すべてのGPIOがVDD_HV_Aにクランプされているため、MCU側とAE側で共有されるGPIOを通じて電力供給されている可能性が高いです。言い換えれば、VDD_HV_Aはどのピンにも電圧がVDD_HV_Aより高ければ電源を供給できます。したがって、VDD_HV_A = VDD_AE10 - Vf と測定するべきであり、VDD_HV_A = VDD_AE10 と測定するべきではありません。 ありがとうございました。 BR、ダニエル Re: NXP S32M276CHABMKHSR Structure question こんにちは、ダニエルさん。 ご返信ありがとうございます。 つまり、VDD_AE10とVDD_HV_Aは内部的に繋がっているということですか? そして私はこの文の意味が理解できませんでした [そして、VDD_AE10を測ってください。- VDD_HV_Aで心室計を測定してください。- これは装置を傷つける可能性があります。] もう少し説明していただけますか? Re: NXP S32M276CHABMKHSR Structure question こんにちは、テッドさん。 AEダイはVDD_AE10を生成します。 AE側では、VDD_AE10はAEポートの電源であり、すべてのポートはVDD_AE10にクランプされます。 MCU側では、VDD_HV_AはMCUポートの電源で、すべてのポートはVDD_HV_Aにクランプされています。 これら2つの金型は相互に接続されている。 もし任意のMCUポートの入力電圧がクランプのVDD_HV_A + Vfより高ければ、VDD_HV_A領域は注入された電流によって電力供給されます。そしてVDD_AE10を測定してください。VDD_HV_AのVfを測ってください。これはデバイスを傷める可能性があります。 よろしくお願いいたします。 ダニエル Re: NXP S32M276CHABMKHSR Structure question こんにちは、ダニエルさん。 ご返信ありがとうございます。 L300を取り外した状態で、VDD_HV_Aの電圧を測定したところ4.98V、VDD_AE10の電圧を5.02Vと測定しました。 ですから、VDD_HV_AとVDD_AE10は内面的に繋がっていると言ってもいいでしょうか。 そして、それらを接続して低インピーダンスにする必要があります。
查看全文
Impact of i.MX6ULL REFTOP_VBGADJ on Internal PLL and Clock Output Hi all, / Dear Community, We are using i.MX6ULL in our product and would like to clarify the behavior of REFTOP_VBGADJ. Issue & Solution: We previously experienced a USB device recognition failure on our board. Changing REFTOP_VBGADJ on CCM_ANALOG_MISC0n register from the default value (0b000) to 0b110 successfully resolved the issue. Question: Our customer asked whether modifying REFTOP_VBGADJ has any side effects on the i.MX6ULL's internal PLL or clock output. Could someone please clarify whether this setting affects the PLL/clock circuitry? If it does, what specific impacts or changes in analog behavior should we expect? Any insights or documentation references would be greatly appreciated. Thanks in advance, Re: Impact of i.MX6ULL REFTOP_VBGADJ on Internal PLL and Clock Output Hi @Ichitaro_K  On the i.MX6ULL, the LDO 1.2V bandgap voltage is 30 mV higher. Therefore, the REFTOP_VBGADJ (CCM_ANALOG_MISC0n register) bit needs to be set to 2b'110 for adjustment. And It has no impact on PLL. B.R
查看全文
SDKの例:フラッシュとLWIPハードフォールト こんにちは、 「frdmimxrt1186_lwip_ipv4_ipv6_echo_freertos_cm33」と「frdmimxrt1186_flexspi_nor_polling_transfer_cm33」という2つのSDK例を組み合わせると、「FLEXSPI_SoftwareReset(base);」という関数を実行した後に最終的にハードフォルトが発生します。また、「ベース」アドレス0x445E0000が変化することも確認しました。私はFRDM-RT1186 EVAキットを使用しています。これは何が原因でしょうか? 私はMCUXpressoIDE_25.6.136を使用しています。 フィードバックありがとうございます。 Re: SDK example flash and LWIP hard-fault こんにちは、パブロさん。 連絡してくれてありがとう。 私はSDK 26.03.00(928 2026-03、Manifest バージョン3.15.0)を使っています。 「frdmimxrt1186_lwip_ipv4_ipv6_echo_freertos_cm33」から始めます。 これは特定の条件なしに、常に発生する現象です。 例「frdmimxrt1186_flexspi_nor_polling_transfer_cm33」からファイルをインポートします。 board/hardware_init_Flash.c ドライバ/fsl_flexspi.C ドライバ/fsl_flexspi.H source/appFlash/flexspi_nor_flash_ops.c source/appFlash/flexspi_nor_polling_transfer.c board/app.h// これには app.h の両方が含まれています source/lwip_ipv4_ipv6_echo_freertos.c // これには2つの関数呼び出しが含まれます。 int main(void) ヤージュ BOARD_InitHardware(); BOARD_InitHardware_Flash(); main_Flash(); void BOARD_InitHardware_Flash(void) ヤージュ BOARD_CommonSetting(); // BOARD_ConfigMPU(); // bord.c= identisch mit Lwip prj // BOARD_InitBootPins(); // pin_mux.c「」 BOARD_InitFLASHPins(); // BOARD_InitBootClocks(); // clock_config.c「」 // BOARD_InitDebugConsole(); // board.c「」 } int main_Flash(void) ヤージュ uint32_t i = 0; status_t ステータス; uint8_t vendorID = 0; // BOARD_InitHardware_Flash(); ... 1を返す。 /* (1) ヤージュ } */ } これで全部だと思います。 事前に感謝いたします。 ゲルト Re: SDK example flash and LWIP hard-fault こんにちは、 @GerdMartin さん。 2つのSDKの例をどのように組み合わせたのか、もう少し詳しく教えていただけますか? どのような変更が加えられましたか? どの例を起点として使いましたか? 現在どのSDKバージョンを使っていますか? また、FLEXSPI_SoftwareReset(base); を実行した後に最終的にハードフォルトが発生するとおっしゃっていましたね。この現象は、関数が呼び出されるたびに必ず発生しますか、それとも特定の条件下でのみ発生しますか? よろしくお願いします、 パブロ
查看全文
[IMX8MQ]GPUがフリーズし、リカバリーはできません 当社では、IMX8MQをベースにしたカスタムボードを使用しており、ウェブベースのユーザーインターフェースが動作します。 私たちのテストシナリオでは、問題は約2〜3時間で再現可能です。問題が発生すると、GPU関連のエラーログが大量に生成され、その後、UI全体がフリーズします。その他のカーネルレベルの機能は引き続き使用可能です。 GPU復旧対策は実施しましたが、通常のGPU動作を回復することはできません。デバイスを完全に再起動する以外に解決策はありません。 OS:Android 11.0.0_2.0.0(Linux 5.10.9カーネル) 以下のいずれかの方法をご協力いただけませんか: 1. この問題を修正してください 2. GPUの復元 Re: [IMX8MQ]GPU hang and cannot be recovery 最も実用的な解決策は、Android 11.0.0_2.0.0 / Linux 5.10.9を離れ、少なくともAndroid 11.0.0_2.2.0、もしAndroid 11にとどまるなら11.0.0_2.6.0を試すことです。NXPのAndroidリリースページによると、11.0.0_2.0.0はLinux 5.10.9を使用していますが、後のAndroid 11リリースは新しいBSPを使用しています:11.0.0_2.2.0はLinux 5.10.35を使用しています。11.0.0_2.4.0はLinux 5.10.52を使用し、11.0.0_2.6.0は8M Quad EVKイメージ i.MX Linux 5.10.72を使用しています。また、NXPコミュニティトレースで、RDのGPUパッチがAndroid 11の同様の問題をAndroid 11.0.0_2.2.0で修正し、その後Android 11/12に実装された「GPUに関連する重大なパッチ」と記載されていました。 リカバリーについては、VivanteやgalcoreのGPUがハードハングした後にソフトウェアのみのGPUリセットに頼らない方がいいです。私が見つけた証拠によると、galcoreは「GPUハング、自動復旧」を試みて「復旧完了」と報告できますが、同じトレースはその後、AXIバスエラーGPUの状態ダンプに続いています。別のレポートでは、reset_gpu パスは「登録されたリセット制御がなかった」ため何も実行されなかったと指摘されています。実際には、galcoreの自動復旧が失敗した場合、確実な現場での回避策は、SurfaceFlinger/WebViewやUIプロセスを再起動するだけでなく、制御されたシステム再起動を行うことです。 推奨される行動計画: 可能であれば、NXP i.MX8MQ EVKまたはNXPのデモイメージ上で再現してください。 もし問題がカスタムボードだけに起こるなら、基板とポートの違いを優先してください:DDRのタイミングやトレーニング、GPUのパワーレール挙動、熱、デバイスツリーのメモリカットアウトなどです。NXPの指針では、類似のi.MX8MQカスタムボードGPU問題に対して、参照ボード上でNXPデモ画像を再現することが推奨されています。もし故障がカスタムボードのみの場合、DDRテストを再実行し、更新されたLPDDR4係数で再構築します。 BSP / GPUドライバーのスタックを更新してください。 あなたのリリースはAndroid 11.0.0_2.0.0で、Linux 5.10.9です。その後、i.MX8MQ向けには11.0.0_2.2.0、2.4.0、2.6.0などのNXP Android 11版も存在します。GPU関連のAndroid 11修正は特に11.0.0_2.2.0に関連しているため、複雑なランタイムリカバリーに投資する前に、まず11.0.0_2.2.0以降でワークロードをテストしてください。 DDRのサイズとGPUアドレス可能なメモリの配置を確認してください。 i.MX8MファミリのGPUのいくつかのハングやエラーはメモリ構成に関連しています。NXPのあるスレッドによると、GAリリースのVivante GPUドライバーは4GBのメモリアドレス範囲をサポートしておらず、システムを3GBに制限しmem=3072MiBでシステムがACIバスエラーの失敗を回避したとされています。別の注意点では、GPUは0x10000000から0x80000000領域の物理メモリのみを扱えるため、CMAメモリを低容量メモリに割り当ててその範囲を超えるアドレスを避けることを提案しています。簡単な実験として、メモリを減らした状態で起動してみてください。例えば、mem=3072MiB のように設定して、2~3 時間かかる障害が解消されるかどうかを確認してください。 CMA/連続GPUメモリのレビュー。 NXPのサポートでは、同様のi.MX8M GPUクラッシュシナリオに対して、CMAを総DDRの約25%に上げることを推奨しています。Androidのガイダンスにはgalcore.contiguousSize=xxxの使用も記載されています。カーネルコマンドライン上でGPUメモリサイズを設定するために。UIがWebView/WebGL/ビデオ/キャンバスを多用している場合、数時間にわたるCMAの枯渇または断片化が原因として考えられます。 GPUドライバーのブートパラメータ緩和策を試してみてください。 デバッグのために、テストしてください。 galcore.powerManagement=0 を GPU パワーマネージメント を無効にするために galcore.baseAddress=0x40000000 galcore.physSize=0 を使えばGPUのフラットマッピングを無効にできます。 galcore.contiguousSize=xxx to tune contiguous GPU memory これらはまずアイソレーションテストとして扱うべきであり、最終的な生産変更ではなく、明確に故障を排除するものであれば例外です。 GPUの電源レールと動作モードを確認してください。 i.MX8MQのデータシートには、VDD_GPUの標準動作電圧が0.81~1.05と記載されている。V、典型的な0.9V、最大GPU周波数800MHz;オーバードライブモードは0.9〜1.05ですV、典型的な1.0V、最大GPU周波数は1GHz。VDD_GPU の絶対最大値は 1.1 V で、オーバードライブの場合に記録されます。単にレールを1.1Vに上げて「修正」するのではなく、代わりに、UI/GPU負荷時の実際のレール、リップル、ドループ、PMICシーケンス、GPUの周波数やOPPが設定電圧と一致しているかを確認してください。 本番環境からの復旧の代替手段として、再起動を使用してください。 より少ない破壊的な回復手順を試みることは可能です。例えば、UIアプリやWebViewを停止し、SurfaceFlingerを停止し、モジュールとして構築された場合はgalcoreのアンロード/再ロードなどです。ただし、ドキュメント化されたモジュール操作は通常のinsmodやrmmodの処理であり、ウェッジしたハードウェア状態からの確実な回復は保証されません。カーネルが生きているのにGPUログがフラッシュし、galcoreの復旧が失敗した場合は、ウォッチドッグやヘルスモニターから制御された再起動をトリガーしてください。 最小限トリアージマトリックス: テスト 想定される解釈 NXP 11.0.0_2.2.0+ イメージで同じテストを実行します。 もし修正されていれば、根本原因は後のGPUやBSPパッチで既に解決されている可能性が高いです。 mem=3072MiBで起動 もし直ったなら、4GBの物理アドレス/GPUメモリ配置の問題が疑われます。 CMAを低メモリ領域に拡張/再配置する もし修正されていれば、GPUの連続メモリ割り当てやアドレッシングが疑われます。 galcore.powerManagement=0 を追加します。 もし修正されていれば、GPUの電源管理移行やクロック、レールの相互作用が疑われます。 障害発生期間中にVDD_GPUを測定する ドロップ/リップルが相関している場合は、PMIC/レール/OPPの設定を修正してください。 EVKで再現する EVKが安定している場合は、カスタムボードのDDR、電源、熱、およびデバイスツリーに焦点を当ててください。
查看全文
NXP S32M276CHABMKHSR 结构问题 您好,NXP技术员, 我是来自无锡美莱克斯公司的Ted,很高兴与您联系。 我有一个关于S32M276集成电路结构的问题。(请解答。)请参阅附件文件:原理图-S32M276)。 我按照数据手册的建议进行了设计,用磁珠将 9pin-VDD_AE10、12pin、25pin、37pin-VDD_HV_A 连接在一起。据我了解,9pin-VDD_AE10 P5V 输出电压由内部稳压器产生,然后通过 VDD_HV_A 引脚为 MCU 芯片供电。 但我移除了 L300 之后,PCBA 仍然可以正常工作。 所以我的问题是,VDD_AE10引脚和VDD_HV_A引脚内部是否连接在一起?否则,移除L300后系统仍然可以运行,这就说不通了。 Re: NXP S32M276CHABMKHSR Structure question 嗨,泰德, 当移除 L300 时,VDD_HV_A 上测得的电压是多少? MCU 侧电源功能域 VDD_HV_A 很可能是通过 MCU 侧和 AE 侧共享的 GPIO 供电的,因为所有 GPIO 都被钳位到 VDD_HV_A。换句话说,如果某个引脚上的电压大于 VDD_HV_A,则可以通过该引脚为 VDD_HV_A 供电。因此,你应该测量大约 VDD_HV_A = VDD_AE10 - Vf,而不是 VDD_HV_A = VDD_AE10。 谢谢! BR,丹尼尔 Re: NXP S32M276CHABMKHSR Structure question 嗨,丹尼尔, 感谢您的回复。 1、所以这意味着VDD_AE10和VDD_HV_A内部是连接的吗? 我无法理解这句话的意思。 [另外,您应该测量 VDD_AE10 - Vf 到 VDD_HV_A 之间的电压——这可能会损坏设备。] 如果您能再解释一下就太好了。 Re: NXP S32M276CHABMKHSR Structure question 嗨,泰德, AE芯片产生VDD_AE10。 在 AE 侧,VDD_AE10 是 AE 端口的电源,所有端口都钳位到 VDD_AE10。 在 MCU 端,VDD_HV_A 是 MCU 端口的电源,所有端口都被钳位到 VDD_HV_A。 这两个模具是相互连接的。 如果任何 MCU 端口上的输入电压高于钳位电路的 VDD_HV_A + Vf,则 VDD_HV_A 功能域将由注入电流供电。你应该测量 VDD_AE10 - Vf 在 VDD_HV_A 上 - 这可能会损坏设备。 问候, 丹尼尔 Re: NXP S32M276CHABMKHSR Structure question 嗨,丹尼尔, 感谢您的回复。 移除 L300 后,我测量到 VDD_HV_A 为 4.98V,而 VDD_AE10 为 5.02V; 所以,我可以这样说吗?VDD_HV_A 和 VDD_AE10 是内部连接的。 应该将它们连接起来以降低阻抗。
查看全文
[IMX8MQ]GPU挂起且无法恢复 我们有一块基于IMX8MQ的定制开发板,它运行着一个基于Web的用户界面。 在我们的测试场景中,大约两到三个小时即可重现该问题。当问题发生时,会生成大量与 GPU 相关的错误日志,之后整个用户界面会冻结。其他内核级功能仍然可用。 我们已经实施了 GPU 恢复措施,但这些措施未能恢复 GPU 的正常运行。完全重启设备是唯一的解决办法。 操作系统:Android 11.0.0_2.0.0(Linux 5.10.9 内核) 请问您能否帮助我们提供以下两种方法之一: 1. 修复此问题 2. 恢复GPU Re: [IMX8MQ]GPU hang and cannot be recovery 最实际的修复方法是放弃 Android 11.0.0_2.0.0 / Linux 5.10.9,并至少测试 Android 11.0.0_2.2.0,如果必须留在 Android 11 上,最好测试 11.0.0_2.6.0。NXP 的 Android 发布页面显示,11.0.0_2.0.0 使用的是 Linux 5.10.9,而后续的 Android 11 版本则使用了更新的 BSP:11.0.0_2.2.0 使用的是 Linux 5.10.35。11.0.0_2.4.0 使用 Linux 5.10.52,11.0.0_2.6.0 使用 Linux 5.10.72,适用于 i.MX 8M Quad EVK 镜像。我还发现 NXP 社区的跟踪记录显示,RD GPU 补丁修复了 Android 11.0.0_2.2.0 中类似的 Android 11 问题,并且这是一个“与 GPU 相关的主要补丁”,后来被应用到 Android 11/12 中。 对于恢复:一旦 Vivante/galcore GPU 完全死机,我不会依赖仅通过软件重置 GPU 来进行恢复。我发现的证据表明,galcore 可以尝试“GPU 挂起,自动恢复”并报告“恢复完成”,但相同的跟踪随后继续进入 AXI 总线错误 GPU 状态转储。另一份报告指出,reset_gpu 路径没有任何作用,因为“没有注册的重置控制”。实际上,如果 galcore 自动恢复失败,可靠的现场解决方法是受控系统重启,而不仅仅是重启 SurfaceFlinger/WebView 或 UI 进程。 建议的行动方案: 如果可能,请在 NXP i.MX8MQ EVK 或 NXP 演示镜像上重现该问题。 如果问题仅出现在定制主板上,请优先考虑板端口差异:DDR 时序/训练、GPU 电源轨行为、散热和设备树内存划分。NXP 针对类似的 i.MX8MQ 定制板 GPU 问题提供的指导是,使用 NXP 演示映像在参考板上重现问题;如果故障仅发生在定制板上,则重新运行 DDR 测试并使用更新的 LPDDR4 系数进行重建。 更新 BSP/GPU 驱动程序堆栈。 您的版本是 Android 11.0.0_2.0.0,Linux 版本为 5.10.9。NXP Android 11 的后续版本适用于 i.MX8MQ,包括 11.0.0_2.2.0、2.4.0 和 2.6.0。由于与 GPU 相关的 Android 11 修复程序专门与 11.0.0_2.2.0 版本相关联,因此在投入大量资源进行复杂的运行时恢复之前,请先在 11.0.0_2.2.0 或更高版本上测试您的工作负载。 检查DDR内存容量和GPU可寻址内存的位置。 多个 i.MX8M 系列 GPU 死机/错误与内存配置有关。NXP 的一个帖子说,正式版本中的 Vivante GPU 驱动程序不支持 4 GB 内存地址范围,将系统限制为 3 GB(mem=3072MiB)可以避免 AXI 总线错误故障。另一份说明指出,GPU 只能处理 0x10000000 到 0x80000000 区域内的物理内存,并建议将 CMA 内存分配到低内存中,以避免超出该范围的地址。作为一项快速实验,启动时减少内存,例如 mem=3072MiB,然后观察 2-3 小时的故障是否会消失。 查看 CMA / 连续 GPU 内存。 NXP 支持建议,对于类似的 i.MX8M GPU 崩溃情况,将 CMA 增加到总 DDR 的 25% 左右。Android 指南还提到使用 galcore.contiguousSize=xxx在内核命令行上设置GPU内存大小。如果您的 UI 大量使用 WebView/WebGL/视频/画布,则几个小时内 CMA 耗尽或碎片化可能是造成这种情况的原因。 尝试调整GPU驱动程序启动参数。 用于调试,请测试: galcore.powerManagement=0 可禁用 GPU 电源管理单元 galcore.baseAddress=0x40000000 galcore.physSize=0 可禁用 GPU 平面映射 使用 galcore.contiguousSize=xxx 来调整连续 GPU 内存 除非这些测试能明显消除故障,否则应首先将其视为隔离测试,而不是最终的生产变更。 检查GPU电源轨和运行模式。 i.MX8MQ 数据手册列出的 VDD_GPU 标称工作电压范围为 0.81–1.05V,典型值为 0.9 V,GPU 最高频率为 800 MHz;超频模式下为 0.9–1.05 VV,典型值为 1.0 V,GPU 最大频率为 1 GHz。VDD_GPU 的绝对最大值为 1.1 V,注意过驱动。不要简单地将电压轨提高到 1.1 V 作为“解决方法”;相反,要确认实际的电压轨、纹波、UI/GPU 负载期间的电压下降、PMIC 时序,以及您的 GPU 频率/OPP 是否与配置的电压匹配。 使用重启作为生产环境恢复的备用方案。 您仍然可以尝试破坏性较小的恢复序列——停止 UI 应用程序/WebView,停止 SurfaceFlinger,如果 galcore 构建为模块,则卸载/重新加载 galcore——但记录的模块操作只是正常的 insmod / rmmod 处理,不能保证从硬件卡死状态中恢复。如果内核存活但 GPU 日志泛滥且 galcore 恢复失败,则从看门狗/健康监测触发受控重启。 最小分诊矩阵: 测试 预期解释 在 NXP 11.0.0_2.2.0+ 镜像上运行相同的测试 如果问题已解决,则根本原因可能已被后续的 GPU/BSP 补丁程序所解决。 启动时使用 3072MiB 内存 如果问题已解决,则怀疑是 4GB 内存/高物理地址/GPU 内存放置问题。 增加/迁移 CMA 到低内存 如果问题已解决,则怀疑是 GPU 连续内存分配/寻址问题。 添加 galcore.powerManagement=0 如果问题解决,则怀疑是 GPU 电源管理单元转换/时钟/电源轨交互问题。 在故障窗口期间测量 VDD_GPU 如果下垂/纹波相关,请修复 PMIC/轨道/OPP 配置。 在 EVK 上复现 如果 EVK 稳定,则重点关注定制板 DDR、电源、散热和设备树。
查看全文
MVR5510 OTP programming We are currently testing the OTP programming of MVR5510AMDA0ES. I have entered the test mode, and MAIN_TM_STATUS=0X42, FS_STATE_REG=0XA001. Currently, the emulation is OK, and the OTP values read out are correct. However, once I power down the chip and then read the OTP values again, I find that the OTP is completely empty. How can I write to the OTP and complete the programming when the emulation is OK? Currently, VSUP1/2=12V, VDDOTP=8.5V, POWERON1=5V, POWERON2=3.3V Note that I am using the I2C protocol to program the OTP, not the original factory tool. Could you please help me see what additional commands need to be executed to actually write to the OTP. Re: MVR5510 OTP programming good I'll ask our American colleagues to contact NXP, as they are responsible for the NDA with NXP. If necessary, I'll update you. Re: MVR5510 OTP programming I noticed that you seem to be a programmer company. If so, then third parties who want to become our programming partners need to be certified. You can contact NXP's local representative for business negotiations, so I cannot give you the programming program directly. Re: MVR5510 OTP programming I've already told you that OTP doesn't support programming on your own board because it contains many confidential rules that are not publicly available. If you want to create your own OTP system, you must first use the board we specified. Under normal circumstances, you won't be able to correctly read the values of the OTP registers. Do you understand? Re: MVR5510 OTP programming Thank you for your reply, although it is of no value to me. I need to solve a technical problem, but you gave me a sales proposal. I will discuss it with my boss. Re: MVR5510 OTP programming We do not support customers using their own boards for OTP testing. For large-volume orders, you can choose a third party to perform OTP testing. For small-volume orders or if you want to perform OTP testing yourself, I suggest you purchase the following boards: SBC and PMIC Product OTP Programming Board | NXP Semiconductors guoweisun_0-1787018585422.pngguoweisun_0-1787018585422.png guoweisun_1-1787018601483.pngguoweisun_1-1787018601483.png These two combinations offer good value for money.
查看全文
SDK示例闪存和LWIP硬故障 你好, 当我将两个 SDK 示例“frdmimxrt1186_lwip_ipv4_ipv6_echo_freertos_cm33”和“frdmimxrt1186_flexspi_nor_polling_transfer_cm33”组合在一起时,执行函数“FLEXSPI_SoftwareReset(base);”后最终导致硬故障。我还注意到“基址”0x445E0000 发生了变化。我使用的是 FRDM-RT1186 EVA 套件。造成这种情况的原因可能是什么? 我使用的是 MCUXpressoIDE_25.6.136。 感谢您的反馈。 Re: SDK example flash and LWIP hard-fault 嗨,Pablo, 感谢您与我联系。 我使用的是 SDK 26.03.00 (928 2026-03 , 清单版本 3.15.0 )。 我以“frdmimxrt1186_lwip_ipv4_ipv6_echo_freertos_cm33”开始。 这种情况经常发生,没有特定条件。 我从示例“frdmimxrt1186_flexspi_nor_polling_transfer_cm33”中导入文件; board/hardware_init_Flash.c drivers/fsl_flexspi.c drivers/fsl_flexspi.h source/appFlash/flexspi_nor_flash_ops.c source/appFlash/flexspi_nor_polling_transfer.c board/app.h// 这包含 app.h source/lwip_ipv4_ipv6_echo_freertos.c // 这包含两个函数调用: int main(void) { BOARD_InitHardware(); BOARD_InitHardware_Flash(); main_Flash(); void BOARD_InitHardware_Flash(void) { BOARD_CommonSetting(); // BOARD_ConfigMPU(); // bord.c= identisch mit Lwip prj // BOARD_InitBootPins(); // pin_mux.c"" BOARD_InitFLASHPins(); // BOARD_InitBootClocks(); // clock_config.c"" // BOARD_InitDebugConsole(); // board.c"" } int main_Flash(void) { uint32_t i = 0; status_t status; uint8_t vendorID = 0; // BOARD_InitHardware_Flash(); ... 返回 1; /* 当(1) { } */ } 我想就是这样了。 提前谢谢您。 格尔德 Re: SDK example flash and LWIP hard-fault 嗨@GerdMartin , 请问您能否详细说明一下您是如何将这两个 SDK 示例结合起来的? 做了哪些改动? 你以哪个例子作为出发点? 您目前使用的是哪个SDK版本? 另外,您提到在执行 FLEXSPI_SoftwareReset(base) 后最终会发生硬故障。每次调用该函数时都会发生这种情况,还是只在特定条件下才会发生? 此致, 巴勃罗
查看全文
i.MX6ULL REFTOP_VBGADJが内部PLLおよびクロック出力に与える影響 皆さん、こんにちは、/ 親愛なるコミュニティの皆さん、 私たちは製品でi.MX6ULLを使用しており、REFTOP_VBGADJの挙動について明確にしたいと思います。 問題と解決策: 以前、弊社基板上でUSBデバイスの認識エラーが発生したことがありました。CCM_ANALOG_MISC0nレジスタのREFTOP_VBGADJをデフォルト値(0b000)から0b110に変更することで、問題は正常に解決しました。 質問: お客様は、REFTOP_VBGADJを改造することでi.MX6ULLの内部PLLやクロック出力に副作用があるかどうか尋ねました。 この設定がPLL/クロック回路に影響を与えるのか、どなたか説明してもらえますか?もしそうなら、アナログの挙動にどのような具体的な影響や変化が期待できるのでしょうか? 何か洞察やドキュメントの参考資料があれば大変ありがたいです。 前もって感謝します、 Re: Impact of i.MX6ULL REFTOP_VBGADJ on Internal PLL and Clock Output こんにちは、 @Ichitaro_K さん。 i.MX6ULLでは、LDOの1.2Vバンドギャップ電圧が30mV高くなっています。したがって、調整するには REFTOP_VBGADJ (CCM_ANALOG_MISC0n レジスタ) ビットを 2b'110 に設定する必要があります。そして、PLLには影響を与えません。 B.R
查看全文
NXP S32M276CHABMKHSR Structure question Hi NXP technician, This is Ted from Melecs Wuxi, nice to contact you. I have one question about the structure of S32M276 IC. ( pls. refer to the attached file: Schematic- S32M276). I did the design as datasheet recommendation, connect the 9pin-VDD_AE10, 12pin,25pin,37pin-VDD_HV_A together with beads. from my understanding, 9pin-VDD_AE10 P5V output voltage is generated by internal regulator, then supply the MCU-die on VDD_HV_A pin. But I removed L300, and after that, the PCBA could still working as normal. So my question is that the VDD_AE10 pin and VDD_HV_A pin are internally connected together?  Otherwise, after removing L300 system still work, which does not make sense.. Re: NXP S32M276CHABMKHSR Structure question Hi Ted, When L300 is removed, what voltage do you measure on VDD_HV_A? The MCU-side power supply domain VDD_HV_A is likely powered through the GPIOs that are shared between the MCU and the AE side, because all GPIOs are clamped to VDD_HV_A. In other words, VDD_HV_A can be powered through any pin if the voltage on that pin is greater than VDD_HV_A. You should therefore measure approximately VDD_HV_A = VDD_AE10 - Vf, not VDD_HV_A = VDD_AE10. Thank you, BR, Daniel Re: NXP S32M276CHABMKHSR Structure question Hi Daniel, Thanks for your reply. 1, So it means that the VDD_AE10 and VDD_HV_A are internally connected? And I could not understand the meaning of this sentence [And you should measure VDD_AE10 - Vf on VDD_HV_A - this can damage the device.] If you could give me some more explanation. Re: NXP S32M276CHABMKHSR Structure question Hi Ted, The AE die generates VDD_AE10. On the AE side, VDD_AE10 is the power supply of the AE ports, all the ports are clamped to VDD_AE10. On the MCU side, VDD_HV_A is the power supply of the MCU ports, all the ports are clamped to VDD_HV_A. These two dies are interconnected. If the input voltage on any MCU port is higher than VDD_HV_A + Vf of the clamp, the VDD_HV_A domain is going to be powered by the injected current. And you should measure VDD_AE10 - Vf on VDD_HV_A - this can damage the device. Regards, Daniel Re: NXP S32M276CHABMKHSR Structure question Hi Daniel, Thanks for your reply. When L300 is removed, I measured 4.98V on VDD_HV_A, while VDD_AE10 = 5.02V; So could I say like that VDD_HV_A and VDD_AE10 are internally connected. And should connect them together to make low impedance. 
查看全文
SDK example flash and LWIP hard-fault Hi,  When I combine the two SDK examples “frdmimxrt1186_lwip_ipv4_ipv6_echo_freertos_cm33” and “frdmimxrt1186_flexspi_nor_polling_transfer_cm33,” I eventually get a hard fault after executing the function “ FLEXSPI_SoftwareReset(base);” eventually results in a hard fault. I also notice that the “base” address 0x445E0000 changes. I'm using the FRDM-RT1186 EVA kit. What could be causing this? I'm using MCUXpressoIDE_25.6.136. Thank´s for feedback. Re: SDK example flash and LWIP hard-fault Hi Pablo, thank´s to go in contact with me. I use SDK 26.03.00 (928 2026-03 , Manifest Version 3.15.0 I start with "frdmimxrt1186_lwip_ipv4_ipv6_echo_freertos_cm33". This happens consistensly, no specific conditions. I import the files from the example "frdmimxrt1186_flexspi_nor_polling_transfer_cm33" board/hardware_init_Flash.c drivers/fsl_flexspi.c drivers/fsl_flexspi.h source/appFlash/flexspi_nor_flash_ops.c source/appFlash/flexspi_nor_polling_transfer.c board/app.h  // this containes both app.h source/lwip_ipv4_ipv6_echo_freertos.c  // this includes two function-calls: int main(void) { BOARD_InitHardware(); BOARD_InitHardware_Flash(); main_Flash(); void BOARD_InitHardware_Flash(void) { BOARD_CommonSetting(); // BOARD_ConfigMPU(); // bord.c = identisch mit Lwip prj // BOARD_InitBootPins(); // pin_mux.c "" BOARD_InitFLASHPins(); // BOARD_InitBootClocks(); // clock_config.c "" // BOARD_InitDebugConsole(); // board.c "" } int main_Flash(void) { uint32_t i = 0; status_t status; uint8_t vendorID = 0; // BOARD_InitHardware_Flash(); ... return 1; /* while (1) { } */ } I think that's it. Thank you in advance. Gerd Re: SDK example flash and LWIP hard-fault Hi @GerdMartin, Could you please provide more details about how you combined the two SDK examples? What changes were made? Which example did you use as the starting point? Which SDK version are you currently using? Also, you mentioned that a hard fault eventually occurs after executing FLEXSPI_SoftwareReset(base);. Does this happen consistently every time the function is called, or only under specific conditions? Best Regards, Pablo
查看全文
LPC55S69:尽管 CPBOOT/CPUCTRL/CPUCFG 序列已完全验证,但核心 1 始终无法启动。 LPC55S69:尽管启动序列已完全验证,但核心 1 始终无法开始执行(MCMGR 和手动写入寄存器均失败,结果相同)。 环境 电路板:LPC55S69-EVK (LPCXpresso55S69)、LPC55S69JBD100 IDE :MCUXpresso IDE v25.6 [版本 136] [2025-06-27] 操作系统:Linux(openSUSE) 工具链:GNU ARM Embedded(捆绑式),GCC 14.2.1 调试探针:板载 LPC-Link2,LinkServer 后端 使用的SDK元器件:driver.flexcomm司机邮箱,中间件.多核.mcmgr_lpc55s69,freertos_kernel + cm33_non_trustzone_port(仅限主节点) 摘要 核心 0(主节点,cm33_core0)运行正常。尽管在两个独立的洁净室项目版本中(一个是手写的寄存器序列,一个是使用 NXP 自己的 MCMGR 中间件),启动序列的每个元素在寄存器和内存级别上都经过独立验证,但核心 1(从机,cm33_core1,角色 M33SLAVE)似乎从未执行过它自己的 main() 函数的第一条指令。两次尝试都以同样的死胡同告终。 经独立核实属实 尝试 1 — 手写启动序列 SYSCON>CPBOOT 设置为嵌入式从映像的真实、链接器确认的地址(通过 objdump -h 部分 VMA 验证,并与 nm 符号地址交叉检查——不是解析为 0x0 的符号,而是实际的非零嵌入位置) SYSCON->CPUCTRL 在释放写入后立即读取为 0x08(CPU1CLKEN 位 3 置位,CPU1RSTEN 位 5 置位),以带内方式捕获(由执行写入的同一函数写入共享内存,而不是稍后通过可能过时的调试器会话读取)。 SYSCON>CPUCFG 位 2(CPU1ENABLE)已确认设置(0x04) 已确认启动地址处的向量表经独立验证有效:初始堆栈指针计算正确(位于 Core 1 重定位的 SRAM 区域的顶部),复位向量地址与 nm 中的实际 ResetISR 符号匹配(通过反汇编目标地址并找到真正的、合理的 Cortex-M 启动代码来确认:cpsid i → SystemInit() → data_init/bss_init 循环 → cpsie i → __main → _initio → 应用程序 main()) 已确认共享内存结构在两个核心独立编译的 .map 文件中解析到相同的物理地址。文件 已确认 Core 1 的私有 SRAM/堆栈区域与 Core 0 的私有 SRAM/堆栈区域不重叠(已迁移到单独的物理 SRAM 存储体)。 已确认嵌入式从镜像的 .data 文件。部分(非零初始化的全局变量)不会进入核心 0 的活动内存(需要使用 INSERT BEFORE .data 的自定义链接器脚本片段)。由于默认链接器脚本没有针对 objcopy 重命名的多核段的放置规则,否则它会作为“孤立段”落入核心 0 的 SRAM 中。 尽管如此,Core 1 的 main() 函数第一行写入的诊断值(已确认内存共享且寻址正确)始终与其初始值保持原样。 第二次尝试——使用 NXP 的 mcmgr_lpc55s69 中间件的新项目 为了排除我们自己的寄存器序列出现错误的可能性,我们使用 MCMGR_Init() / MCMGR_StartCore() / MCMGR_TriggerEvent() 从头开始重建,而不是手动写入寄存器。 直接阅读 mcmgr_internal_core_api_lpc55s69.c:确认 mcmgr_start_core_internal() 执行相同的 CPUCFG → CPBOOT → CPUCTRL 序列,使用正确的 SDK 宏(SYSCON_CPUCTRL_CPU1RSTEN_MASK 等)。 发现 MCMGR_Init()(从 main() 调用)不会调用 MCMGR_EarlyInit() / mcmgr_early_init_internal()。后者是一个单独的公共函数,其源代码注释表明它“旨在尽可能靠近 RESET 入口调用(在 SystemInitHook 的启动序列中)” ——但生成的项目中没有任何东西会自动将其连接起来。SystemInitHook() 在通用设备启动文件中为 __attribute__((弱)),默认为空存根。 在两个核心上添加了我们自己的 SystemInitHook() 重写,调用 mcmgr_early_init_internal(MCMGR_GetCurrentCore())。已通过 .map 确认此覆盖文件在两个项目中都真正链接到真正的函数(而不是短截线)。 重新应用并重新确认了第一次尝试中的所有修复(迭代重建中的嵌入地址稳定性、.data)。(通过相同的链接器片段技术进行段重定向,核心 1 SRAM 重定位,CPUCFG/CPBOOT/CPUCTRL 寄存器值均与第一次尝试的结果相同) 默认情况下,MCMGR_BUSY_POLL_COUNT 未定义,因此 mcmgr.c 中的 MCMGR_StartCore(..., kMCMGR_Start_Synchronous) 会阻塞,且没有任何超时设置。内部等待循环(当(s_mcmgrCoresContext[coreNum].state)!= kMCMGR_RunningCoreState)),已通过直接阅读 mcmgr.h 中宏的条件编译来确认。 结果:结果相同。核心 0 永远阻塞在 MCMGR_StartCore() 中。诊断共享内存值(已确认两个核心的 .map 文件中地址相同)文件位于真正共享的 SRAM 库中,.noinit因此不受 C 运行时初始化的影响)实际上写成 Core 1 的 main() 的第一个可执行行,永远不会离开其初始值 0。 问题 给定 CPUCFG、CPBOOT 和 CPUCTRL 都完全按照参考实现 (mcmgr_internal_core_api_lpc55s69.c) 读取。意图是,并且独立确认启动地址处的嵌入式映像是一个有效的、正确链接的 Cortex-M 二进制文件——是否还需要额外的步骤才能真正开始 Core 1 在此部分上的指令获取,而这三个寄存器写入操作本身无法捕获该步骤? 具体来说: LPC55S69(任何版本)是否存在已知的影响基于 CPBOOT/CPUCTRL 的辅助核心启动的硅缺陷? 除了应用程序级寄存器序列之外,启动 Core 1 是否真的需要调试探测级别的操作(例如,专门针对该部件上枚举的第二个 SWD 设备的 SWD 连接/恢复)?NXP 自己的多核 SDK 示例(例如,当通过 IDE 的正常单项目“调试”流程进行调试时,freertos_message_buffers_secondary_core) 似乎可以成功启动 Core 1,而无需单独的启动组配置——这意味着 MCUXpresso 的调试启动本身可能执行了应用程序代码本身无法触发的额外步骤。 这三个写入操作之间是否存在参考文件 mcmgr_internal_core_api_lpc55s69.c 中未反映的最小延迟、顺序约束或额外寄存器(例如,电源/时钟域中的寄存器)要求?执行? 乐意提供完整的项目文件,.map 文件。文件,或根据要求提供最小复现项目。 LPC55xx Re: LPC55S69: Core 1 never starts despite fully verified CPBOOT/CPUCTRL/CPUCFG sequence 问题已解决——根本原因是我的诊断出现误报,而非 Core 1 启动失败。 把解决方法贴出来,以防以后有人遇到类似症状并找到这个帖子。 真正的根本原因 在本项目的每个版本中,核心 1 都始终能够正常启动和运行。问题从来不在于 CPUCFG/CPBOOT/CPUCTRL、向量表、内存放置或启动序列中的任何其他内容——而是我自己的诊断工具中的一个错误,导致看起来Core 1 从未执行任何操作。 我使用了一个小型共享内存结构体(通过 __attribute__((section(".noinit.$SRAM4")))) 放置)由核心 1 写入,由核心 0 读取,用于观察启动过程。只有当项目生成的链接器脚本实际定义了一个名为 SRAM4 的区域时,这种技术才能真正应用于共享内存。我从零开始创建的向导项目确实定义了该区域,因此该技术在结构上是有效的——但当我后来基于 NXP 自己的 hello_world 示例项目(该项目使用不同名称的区域,Ram1/rpmsg_sh_mem,而不是 SRAM4)构建版本时,相同的属性却悄无声息地传递到了每个内核各自的私有.noinit 文件中。内存占用而不是抛出错误。核心 0 和核心 1 各自读取/写入“共享”结构体的不同副本,编译器或链接器均未发出任何错误警告。 最终结果:我的诊断报告显示,在两个独立的启动实现(手写的 CPUCFG/CPBOOT/CPUCTRL 寄存器和 NXP 自己的 MCMGR 中间件)和多个项目配置中,每次测试的结果均为 0(没有进展),因为这两个核心从一开始就从未真正查看过同一个内存地址——无论核心 1 是否真的在运行。 它是如何被发现的 通过原封不动地复制 NXP 的 hello_world 示例,并且仅在现有的、未经修改的、经过验证可正常运行的 main.c 文件中添加诊断写入,即可完成此操作。(而不是更换它),我可以通过板载 LED 直观地确认 Core 1 确实在执行完整的序列——然而共享内存计数器仍然显示为 0。这种矛盾(执行的物理证明与诊断结果相反)暴露了是诊断本身出了问题,而不是 Core 1 出了问题。将节名称修正为与该项目的实际区域匹配(.noinit.$rpmsg_sh_mem 而不是 .noinit.$SRAM4)后,立即产生了正确的递增值。 给其他在 LPC55xx 上调试多核启动的人一个教训 如果您使用 .noinit.$ 节属性来管理核心间共享内存,请根据该特定项目自身生成的 _Debug_memory.ld 来验证区域名称,而不是假设一个在其他项目中有效的名称(例如 SRAM4)。此处的不匹配会导致完全静默失败——没有版本警告,没有链接错误,没有运行时故障——并且产生的症状看起来与真正的启动失败完全一样(寄存器/向量表级别的调试都将检查正常,因为实际问题完全在诊断层)。 感谢所有阅读过之前帖子的人——CPUCFG/CPBOOT/CPUCTRL/向量表验证工作没有白费;确认所有这些是正确的最终迫使我们将调查转向诊断机制本身,因为这是剩下的未验证部分。 Re: LPC55S69: Core 1 never starts despite fully verified CPBOOT/CPUCTRL/CPUCFG sequence 更新:问题已定位到项目/链接器配置,而非应用程序代码。 自发帖以来,我进行了一项决定性的测试,大大缩小了范围。 测试:NXP 自家未经修改的多核示例能否在此硬件上运行? 为 LPCXpresso55S69 全新导入 multicore_examples/hello_world(主程序 + 辅助程序),完全未修改,并按原样进行了调试。 结果:有效。板载 RGB LED 以干净、规律的 500ms 开/500ms 关的频率闪烁——通过与我自己刷入同一块板的项目直接比较得到证实(我的项目使 LED 熄灭,未修改的示例使 LED 闪烁,当我重新刷入我自己的项目时,LED 再次熄灭)。结论是:在这款主板、探针和 IDE 安装下,双核执行是可行的。 测试:示例中的应用程序代码在我的项目配置中是否能正常运行? 为了确定问题是出在我的应用程序代码还是项目的版本/链接配置中,我复制了正常运行的示例的 secondary-core main.c 文件。app.h 和 hardware_init.c原封不动地(逐字节、未修改地)移植到我自己的从属项目中,完全替换了我自己的应用程序代码。 结果:LED灯不闪烁。在原始示例项目中可以正常运行的相同、未修改的 NXP 代码,在我自己的项目配置中版本时无法启动 Core 1。 这证明了什么? 问题不在于应用程序级别的代码(已经确认过两次——分别在手写的寄存器实现和基于 MCMGR 的实现中独立确认过,现在又用示例自己的源文件进行了第三次确认)。尽管我已尽最大努力逐点匹配,但我的项目的多核链接器设置/内存区域配置与工作示例存在差异,这确实是个具体问题: MCMGR_StartCore() 之后,CPUCFG、CPBOOT 和 CPUCTRL 都按预期读取。 嵌入图像的向量表经过独立验证有效(正确的堆栈指针,正确的复位处理程序地址与真正的 ResetISR 符号匹配)。 主存储区域设置为 RAM 区域(而非 PROGRAM_FLASH),这与工作示例中将 Core 1 的映像嵌入 RAM 而非闪存的方法一致。 核心 1 的私有内存与核心 0 的私有内存不重叠。 我发现一个结构上的差异,但尚未解决:工作示例的辅助核心项目在其 .cproject 文件中完全没有 PROGRAM_FLASH 内存区域的覆盖。(仅两个自定义 RAM 派生区域)。我从零开始创建的从属项目有三个区域,其中包括重新定位的 PROGRAM_FLASH。尝试完全删除该区域(以与工作示例完全匹配)会导致 MCUXpresso 的 MCU 设置页面崩溃(NullPointerException: this.mcuPage 为空),这表明 IDE 的工具无法很好地支持未定义 flash 区域的项目——这本身可能与手动匹配工作示例的确切配置很困难的原因有关。 问题 是否有特定的、有文档记录的多核项目配置(除了向导的“M33SLAVE”角色 + 多核链接器设置之外),才能使一个从头开始的项目达到与 SDK 自身的 hello_world 示例相同的工作状态?或者MCUXpresso IDE v25.6.136是否存在已知的限制/错误?针对多核 LPC55S69 项目,项目向导能否解决示例项目文件中存在的问题,而向导却无法复现这些问题? 很高兴分享这两个项目的完整 .cproject 文件。如果需要,可生成用于直接比较的文件。
查看全文
MVR5510 OTPプログラミング 現在、MVR5510AMDA0ESのOTPプログラミングのテストを実施しています。テストモードに入りました。MAIN_TM_STATUS=0X42、FS_STATE_REG=0XA001です。現在、エミュレーションは正常に動作しており、読み取られたOTP値も正しいです。しかし、チップの電源を切ってからOTPの値を再度読み取ると、OTPが完全に空になっていることがわかりました。エミュレーションが正常なときにOTPに書き込んでプログラムを完了するにはどうすればいいですか?現在、VSUP1/2=12V、VDDOTP=8.5V、POWERON1=5V、POWERON2=3.3V なお、OTPのプログラミングには、純正の工場出荷時ツールではなく、I2Cプロトコルを使用しています。OTPに実際に書き込むために実行すべき追加コマンドを教えていただけますか? Re: MVR5510 OTP programming よろしいです。アメリカの同僚にはNXPに連絡するようお願いします。彼らはNXPとのNDAを担当しています。必要であれば、最新情報をお伝えします。 Re: MVR5510 OTP programming 御社はプログラミング会社様のようですね。もしそうであれば、弊社のプログラミングパートナーを希望される第三者企業は、認証を受ける必要があります。ビジネス交渉についてはNXPの現地代理店にご連絡ください。そのため、プログラミングプログラムを直接お渡しすることはできません。 Re: MVR5510 OTP programming 既にお伝えした通り、OTPは多くの機密ルールが含まれており、一般には公開されていないため、独自のボードでのプログラミングはサポートしていません。独自のOTPシステムを作成したい場合は、まず弊社指定のボードを使用する必要があります。通常の状態では、OTPレジスタの値を正しく読み取ることはできません。ご理解いただけましたでしょうか? Re: MVR5510 OTP programming ご返信ありがとうございます。しかし、私にとっては何の役にも立ちません。技術的な問題を解決する必要があるのに、あなたは私に営業提案書を渡しました。上司と相談してみます。 Re: MVR5510 OTP programming 弊社では、お客様ご自身で作成されたボードを使用したOTPテストはサポートしておりません。大量注文の場合は、OTPテストを第三者に委託することも可能です。少量注文の場合、またはお客様ご自身でOTPテストを実施される場合は、以下のボードをご購入いただくことをお勧めします。 SBCおよびPMIC製品向けOTPプログラミングボード|NXPセミコンダクターズ guoweisun_0-1787018585422.pngguoweisun_0-1787018585422.png guoweisun_1-1787018601483.pngguoweisun_1-1787018601483.png この2つの組み合わせは、コストパフォーマンスに優れています。
查看全文
如何在定制的 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 官方提供的配置和恢复文档是生产支持的推荐参考资料。
查看全文
NXP 代码签名工具 (CST) 符合 FIPS 140-3 3 级标准 NXP团队您好, 我们目前使用 NXP 代码签名工具 (CST) 来实现安全启动,并生成/管理用于映像签名的密钥和证书。 作为产品网络安全要求的一部分,我们需要了解基于 CST 的代码签名过程是否符合 FIPS 140-3 3 级标准。 请您澄清以下问题: 1.NXP 代码签名工具 (CST) 本身是否符合 FIPS 140-3 标准或经过验证,特别是符合 FIPS 140-3 3 级要求? 如果符合要求,能否请您提供相关的认证、验证详情或NXP官方文件以证明其合规性? 谢谢 Re: FIPS 140-3 Level 3 Compliance of NXP Code Signing Tool (CST) CST 被记录为 NXP 代码签名工具,而不是 FIPS 140-3 3 级验证的加密模块。
查看全文
FRDM-A-S32K358 引脚图详情 大家好, 我昨天刚购买了 FRDM-A-S32K358 开发套件。正在查找引脚定义详情。 我正在寻找类似文件 S32K144_pinout.png。感谢您的快速回复。 谢谢并致以诚挚的问候 斯里拉姆 Re: FRDM-A-S32K358 Pinout Details 你好VaneB 谢谢你提供的链接,这很有帮助。 Re: FRDM-A-S32K358 Pinout Details 你好@SriramEmbd FRDM-A-S32K358 没有对应的图像。但是,电路板原理图包含一个专门的页面,显示了 Arduino 接头的引脚分配。 原理图可在FRDM-A-S32K358 Design Files.zip软件包中找到。 BR,VaneB
查看全文