Multi Source Translation Content

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

Multi Source Translation Content

Discussions

Sort by:
R45 MIPICSI2 バッファビューエラー 親愛なる、 私たちはR45 MIPIを使用して他のチップのMIPIからデータを受信していますが、現在、R45は一定時間データを受信した後、バッファエラーを報告するようになりました。MIPIの送信速度は600Mbps、R45の受信速度も600Mbpsです。 R45リファレンスマニュアルでは、バッフォーフ誤差を次のように説明しています。   evalin_1-1729739919559.pngevalin_1-1729739919559.png R45 CSI2はどのような状況でこのエラーを報告するのでしょうか?よろしくお願いします。 Re: R45 MIPICSI2 BUFFOVF ERR こんにちは、ピーターさん@petervlna 現在、私たちのチームはNXP S32R45を使用していますが、私たちも同じエラーに遭遇しました。ADCデータをR45 CSI2インターフェース(送信元は別のチップ)に送信しています。場合によっては、0x80000エラーコードが解消されないことがあります。(MIPIからSRAMへのADCデータ、そしてDDRメモリへの保存、ADCキャプチャは常に「バックグラウンド」(12msで2MBデータ)を実行、SPTプロセッシングはフォアグラウンドに、中間データは 何かご提案はございますか? よろしくお願いします! Re: R45 MIPICSI2 BUFFOVF ERR こんにちは、 内部バッファが満杯の場合、手動で表現します。 データがいっぱいになってオーバーフローが発生する前に、必ずデータを空にする/転送してください。 DMAまたはコアトリガーによるデータ転送速度が遅すぎるのかもしれません。 よろしくお願いいたします。 ピーター
View full article
QorIQ T1022 DDR 验证套件以良好优势通过,但在应用程序中发现内存损坏。 你好, 我们正在使用QorIQ T1022设计,并已使用 NXP DDR 验证套件完成了 DDR 启动和验证。 结果令人鼓舞: 所有DDR验证测试均成功通过。 我们在所有测试条件下都取得了良好的时间裕度。 压力测试期间,验证套件未报告任何错误。 然而,当我们加载并运行主应用程序时,我们开始观察到一些似乎与内存相关的问题/损坏。仅使用 DDR 验证测试无法重现这些问题。 这就引出了一个问题:我们是否应该使用其他机制或测试方法来检测可能仅在真实应用程序工作负载下才会出现的问题。 我们感兴趣的是了解: T1022 上的标准 DDR 验证套件测试可以检测出哪些类型的 DDR 或内存子系统问题? 是否存在已知的应用层面的场景,可以暴露出在 DDR 训练和验证过程中未检测到的问题? T1022 上是否有其他压力测试、性能监视器、错误计数器或调试技术可以帮助确定根本原因? 有没有人遇到过这样的情况:DDR验证结果显示裕量极佳,但后来在生产应用中却出现了内存损坏或不稳定的情况? 非常感谢您能提供任何关于其他诊断方法、硬件检查或软件调试方法的指导。 谢谢! QorIQ T1 设备 Re: QorIQ T1022 DDR Validation Suite Passes with Good Margin, but Memory Corruption Seen in Applicat 你好, QCVS DDRv 工具通过 JTAG 从单个内核使用顺序、确定性访问模式来测试 DDR 时序裕量(写入均衡、读/写居中、时钟调整)。它不进行锻炼: 多主/多核并发访问 — T1022 具有两个 e5500 内核以及 DPAA(数据路径加速架构),帧管理器、队列管理器和 DMA 引擎同时争用 DDR 总线。只有在实际流量下才会出现由竞争引起的时序违规。 缓存一致性压力 — 涉及缓存刷新、失效和一致性 DMA 传输的应用程序工作负载会创建验证套件永远不会生成的访问模式。 散热和电源变化——在室温下轻负载下测量的 DDR 裕量,在 SoC 满负荷运行时,AVDD_DDR 电源在负载下下降时,可能会显著降低。 DQ 映射错误 — 如果 DQ_MAPn 寄存器不正确,控制器可能仍然会通过验证(使用已知的训练模式),但在实际应用流量下会损坏数据。这是T1022特有的一个已记录的问题。 边缘单比特 ECC 错误 — 验证套件可能不会累积足够的交易来触发 SBE 阈值报告,而运行数小时的实际应用程序会默默地累积这些错误。 DQ映射错误配置 DQ_MAPn 寄存器提供 动态随机存取存储器(DRAM) DQ 信号到控制器的映射。如果这些是错误的,控制器就无法正确解释训练模式,并且在实际工作负载下会发生数据损坏。NXP 已在 T1022 设计中证实了这一点:清除所有 DQn_MAP 寄存器(对于 1:1 映射设置为 0)是建议的诊断步骤。 内存排序/流水线效应(PowerPC e5500) e5500 核心的内存顺序细节有据可查。写入操作可能无法在后续读取操作之前完全提交到 DDR,尤其是在没有显式 msync/isync 屏障的情况下。恩智浦的应用团队已确认: “在错误注入被禁用之前,写入操作可能尚未完全提交到内存。随后的读取操作可能会命中缓存或流水线,而不会立即触发 ECC 逻辑。”应用程序代码中缺少 DMA 设置或共享内存结构周围的屏障,可能会导致表面上的损坏,而这实际上是一致性排序问题。 ECC单比特错误累积 T1022 DDR 控制器支持 ECC。单比特错误 (SBE) 由硬件默默纠正,但计入 ERR_SBE[SBEC]。如果 SBE 计数器超过阈值 ERR_SBE[SBET],则会产生严重中断。在验证流量较小的情况下,永远不会达到此阈值。在实际应用中,累积的 SBE 最终可能会变成无法纠正的多位错误 (MBE),这是致命的——数据无法恢复。 多位ECC错误表现为应用程序崩溃 NXP 已记录了 QorIQ 平台(P2020、T1042)上的案例,其中应用程序崩溃(例如,lwz 指令在看似有效的地址上发生故障)可追溯到 DDR 中的 MBE 事件。崩溃不是软件错误——而是 e5500 内核从 DDR 控制器接收到损坏的数据,并引发 IVOR1 机器检查异常。重要的是,即使内存区域被缓存抑制,MCSR 寄存器仍然显示 0xA000(不可纠正的 L1 缓存/标记错误),因为 DDR 控制器会发出一个损坏数据信号,该信号被内核识别为 L1 错误。 将您的电路板设计与以下内容进行交叉核对: AN3940 — DDR3 同步动态随机存取存储器(SDRAM) 内存接口的硬件和布局设计考虑因素 AN5097 — DDR4 同步动态随机存取存储器\\(SDRAM\\) 内存接口的硬件和布局设计考虑因素 AN4039 — PowerQUICC 和 QorIQ DDR3 SDRAM 控制器寄存器设置注意事项 请特别注意:AVDD_DDR 电源噪声和去耦、DDR 复位信号路由(HRESET_B 到 动态随机存取存储器(DRAM) RESET)以及终端电阻值。 此致
View full article
R45 MIPICSI2 BUFFOVF ERR Dear, We use R45 MIPI to receive data from other chip mipi, but now R45 will report a buffove error after receiving data for a period of time. The MIPI sending rate is 600M, and the R45 receiving rate is also 600M. The R45 Reference manual describes buffovf errors as follows:   evalin_1-1729739919559.pngevalin_1-1729739919559.png Under what circumstances will R45 CSI2 report this error?Thanks. Re: R45 MIPICSI2 BUFFOVF ERR Hi, Peter @petervlna      Now our team are using NXP S32R45 S32R45 , we encountered the same error too. We transmit ADC data to R45 CSI2 interface (sender is other chip). Sometimes the 0x80000 error code will persist.  ( ADC data from MIPI to SRAM, and then save to DDR memory, the ADC capture is always running "background"(2MB data in 12ms), also SPT processing is in foreground, intermediate data saved to Any suggestions? Thanks! Re: R45 MIPICSI2 BUFFOVF ERR Hello, As manual express in the case that internal buffer is full. Make sure you empty/transfer data before it is full and overflow happen. Maybe your DMA or core triggered data transfer is too slow. Best regards, Peter
View full article
RIOP RT1189 – build and flash workflow from GitHub sources Hi, I’m currently working with the NXP RIOP evaluation board and have successfully completed the Getting Started guide and tested the pre-programmed FreeMASTER demo. My next step is to rebuild the demo from source, flash it back to the board and verify that my complete build and flash pipeline works. I checked the following documentation and sources: Getting Started: GS-REMOTE-IO-PLATFORM RIOP User Guide: UG10224 GitHub repository: nxp-appcodehub/rd-riop-demo The GitHub repository contains the two projects riop_M33LEADER_DEMO riop_M7FOLLOWER_DEMO and specifies the required SDK and tool versions, including the MIMXRT1189 SDK 25.09.00. What is still not completely clear to me is how to get from these two projects to the same bootable firmware configuration that is delivered on the board. Questions: What is the recommended way to build the M33 and M7 projects? Do I simply import and build both projects separately in MCUXpresso, or is there a required build order or dependency between them? Can I also use the VS Code Extension? How are the resulting M33 and M7 images programmed to the RIOP? Is the Secure Provisioning Tool the intended way to create and flash the complete application? Is there an existing Secure Provisioning Tool configuration or example that shows how the two images are combined, including the correct memory layout and flash addresses? How is image authentication handled for the RIOP demo? Is secure boot/signature verification enabled in the factory configuration, and is any key provisioning required when flashing a self-built version of the demo? Is there a way to determine which version of rd-riop-demo is currently programmed on the board before overwriting it? From the example code, it looks like the RT1189 Boot ROM starts the M33 application and the M33 then starts the M7 at 0x303C0000 using MCMGR. Is this the complete boot flow of the factory image, or is there an additional boot stage that is not part of the GitHub repository? Is the original factory image available somewhere so that the board can be restored to its Out-of-Box state if necessary? Is there also a command-line/headless build workflow available? In the longer term I would like to make the build reproducible and suitable for CI. The Getting Started guide explains the Out-of-Box demo well, and the GitHub repository provides the sources, but I’m currently missing the connection between the two: GitHub sources -> build M33/M7 -> create bootable image -> flash -> run the same demo Maybe I overlooked the relevant section in UG10224 or another document. Thank you! Re: RIOP RT1189 – build and flash workflow from GitHub sources Hi Shelly, thank you very much for the detailed answer! Best Regards Marco Re: RIOP RT1189 – build and flash workflow from GitHub sources Dear @Embernard , Regarding your questions, please find the responses below:   1. The RIOP demo supports both MCUXpresso IDE and VS Code + MCUXpresso for VS Code. We recommend using VS Code. After importing the riop_M7FOLLOWER_DEMO and riop_M33LEADER_DEMO projects, it is recommended to build the M7 follower project first, followed by the M33 leader project. This is because the M33 project references the riop_M7FOLLOWER_DEMO.axf.o file generated by the M7 project as the multicore slave image. 2. Only the riop_M33LEADER_DEMO.axf file needs to be programmed into Flash using the Secure Provisioning Tool (SPT). Please refer to UG10224, Section 4.1.5 "Running the Demo Application". We recommend downloading and using the latest SPT v26.06. Please note that some configuration settings differ slightly from those shown in the user guide: ShellyZhang_0-1787196235459.pngShellyZhang_0-1787196235459.png 3. Please refer to UG10224 to create your own RIOP SPT workspace. On the SPT side, its main role is to generate a bootable RT1189 application image and program it into the device. 4. During development, we recommend using an unsigned/open configuration for functional validation and do not recommend programming eFuses or keys. Programming fuses is an irreversible operation and should only be performed as part of a production security process after proper validation, such as through shadow registers. Whether to enable secure boot, image signing, or encryption should ultimately be determined by your production security requirements and SPT configuration. 5. If the current firmware does not expose version information through FreeMASTER variables, UART output, or version strings, it is not possible to reliably determine which version of the rd-riop-demo is currently running on the board. We recommend backing up the Flash content before overwriting it, or adding version information to your custom firmware. 6. The startup model implemented in the current project is that the RT1189 first boots the CM33 (M33 leader), and then the M33 starts the M7 follower through the Multicore/MCMGR framework. No additional boot stage is required. 7. If recovery is required, the most reliable method is to read back and save the existing Flash image before reprogramming. If no backup is available, the only option is to rebuild and reprogram the rd-riop-demo, which will restore the system to a functionally equivalent state. 8. Command-line workflows are supported. SPT internally invokes command-line tools such as OpenSSL and SPSDK to generate keys and build/write images. For more information, please refer to the following documentation:  Secure Provisioning Tool - Command Line Operations As for how the two images are linked together, the key flow is as follows: 1.The demo is structured as two linked multicore projects The RIOP demo repository contains two project directories: riop_M33LEADER_DEMO/ riop_M7FOLLOWER_DEMO/ . In the MCUXpresso multicore project model, the primary/leader project links to the secondary/follower project. When the primary project is built, the secondary project is built first, and the secondary output image is included/embedded into the primary image. 2.The M33 project is configured as the multicore master, and the M7 project as the slave In riop_M33LEADER_DEMO/.cproject , the project defines __MULTICORE_MASTER and __MULTICORE_MASTER_SLAVE_M7SLAVE . Its multicore master configuration points to: ${workspace_loc:/riop_M7FOLLOWER_DEMO/Debug/riop_M7FOLLOWER_DEMO.axf.o} . This means riop_M7FOLLOWER_DEMO.axf is first processed into .axf.o , and that object is then linked into the M33 leader image as a “Slave Object.” The M7 project is configured as M7SLAVE / __MULTICORE_M7SLAVE , using the CM7 ITCM/DTCM memory regions. 3.The actual merge happens mainly during the link/post-build stage The MCUXpresso multicore flow processes the secondary-core image, including shifting secondary-core sections before linking them into the complete multicore image. Therefore, the final riop_M33LEADER_DEMO.axf is essentially the M33 leader ELF plus embedded M7 follower image data/sections , not a simple binary concatenation of two standalone AXF files. 4.At runtime, M33 starts M7 In riop_M33LEADER.c , the M7 boot address is defined as: CORE1_BOOT_ADDRESS = 0x303C0000 , and CORE1_KICKOFF_ADDRESS = 0x0 . In SystemInitHook() , the code calls Prepare_CM7(CORE1_KICKOFF_ADDRESS) , and later in main() it calls MCMGR_StartCore(kMCMGR_Core1, CORE1_BOOT_ADDRESS, ...) to start the secondary core. So although the M7 image is embedded into the M33 leader AXF, M7 execution is still explicitly kicked off by M33 at runtime. 5.The bootable image still needs SPT processing For RT1180, the documentation states that the device can boot only from CM33. The Secure Provisioning Tool is used to generate a bootable image with a boot header from the raw application image, and MCUXpresso output types include .axf . So the usual flow is: riop_M7FOLLOWER_DEMO.axf → processed into riop_M7FOLLOWER_DEMO.axf.o → linked into riop_M33LEADER_DEMO.axf → SPT uses the M33 leader AXF to generate the bootable flash image. Best Regards, Shelly
View full article
RIOP RT1189 – 基于 GitHub 源代码的 版本 和烧录工作流程 您好, 我目前正在使用 NXP RIOP 评估板,已经成功完成了入门指南并测试了预编程的 FreeMASTER 演示程序。 我的下一步是从源代码重新构建演示程序,将其烧录回开发板,并验证我的完整构建和烧录流程是否正常工作。 我查阅了以下文档和资料: 入门指南:GS-REMOTE-IO-PLATFORM RIOP 用户指南:UG10224 GitHub 仓库:nxp-appcodehub/rd-riop-demo GitHub 仓库包含这两个项目。 riop_M33LEADER_DEMO riop_M7FOLLOWER_DEMO 并指定所需的 SDK 和工具版本,包括 MIMXRT1189 SDK 25.09.00。 我仍然不太清楚的是,如何从这两个项目中得到与板上提供的相同的可启动固件配置。 问题: 构建 M33 和 M7 项目的推荐方法是什么?我是否只需在 MCUXpresso 中分别导入并构建这两个项目,还是它们之间需要特定的构建顺序或依赖关系?我也可以使用 VS Code 扩展吗? 如何将生成的 M33 和 M7 图像编程到 RIOP 中?安全配置工具是创建和刷写完整应用程序的正确方法吗? 是否有现成的安全配置工具配置或示例,展示如何将两个映像组合在一起,包括正确的内存布局和闪存地址? RIOP 演示中是如何处理图像认证的?出厂配置中是否启用了安全启动/签名验证?刷写自制演示版本时是否需要密钥配置? 在覆盖之前,有没有办法确定板上当前编程的是哪个版本的 rd-riop-demo? 从示例代码来看,RT1189 Boot ROM 启动 M33 应用程序,然后 M33 使用 MCMGR 在 0x303C0000 启动 M7。这是工厂镜像的完整启动流程吗?还是还有GitHub仓库中未包含的额外启动阶段? 是否有原始出厂镜像文件可供获取,以便在必要时将电路板恢复到出厂状态? 是否也提供命令行/无头版本工作流程?从长远来看,我希望构建过程能够复现,并适用于持续集成。 入门指南对开箱即用的演示程序解释得很好,GitHub 代码库也提供了源代码,但我目前还不明白这两者之间的联系: GitHub 源代码 -> 构建 M33/M7 -> 创建可启动镜像 -> 刷写 -> 运行相同的演示 或许我忽略了 UG10224 或其他文档中的相关章节。 谢谢! Re: RIOP RT1189 – build and flash workflow from GitHub sources 亲爱的@Embernard , 关于您的问题,请查看以下回复: 1.RIOP 演示同时支持 MCUXpresso IDE 和 VS Code + MCUXpresso for VS Code。我们推荐使用 VS Code。导入 riop_M7FOLLOWER_DEMO 和 riop_M33LEADER_DEMO 项目后,建议先构建 M7 跟随者项目,再构建 M33 领导者项目。这是因为 M33 项目引用了 riop_M7FOLLOWER_DEMO.axf.o 文件。由 M7 项目生成的多核从映像文件。 2. 只需使用安全配置工具 (SPT) 将 riop_M33LEADER_DEMO.axf 文件编程到 Flash 中即可。请参阅 UG10224,第 4.1.5 节。“运行演示应用程序”。我们建议下载并使用最新的 SPT v26.06 版本。请注意,某些配置设置与用户指南中所示的设置略有不同: ShellyZhang_0-1787196235459.pngShellyZhang_0-1787196235459.pngShellyZhang_0-1787196235459.png 3. 请参考 UG10224 创建您自己的 RIOP SPT 工作区。在 SPT 端,它的主要作用是生成可引导的 RT1189 应用程序映像并将其编程到设备中。 4. 在开发过程中,我们建议使用未签名/开放配置进行功能验证,不建议对 eFuse 或密钥进行编程。 对熔丝进行编程是不可逆的操作,只能在经过适当的验证(例如通过影子寄存器)后,作为生产网络安全流程的一部分来执行。是否启用安全启动、映像签名或加密最终应取决于您的生产安全要求和 SPT 配置。 5. 如果当前固件没有通过 FreeMASTER 变量、UART 输出或版本字符串公开版本信息,则无法可靠地确定当前在板上运行的 rd-riop-demo 版本。我们建议您在覆盖 Flash 内容或向自定义固件添加版本信息之前备份 Flash 内容。 6.当前项目中实现的启动模型是,RT1189 首先启动 CM33(M33 领导者),然后 M33 通过 Multicore/MCMGR 框架启动 M7 追随者。无需额外的启动阶段。 7. 如果需要恢复,最可靠的方法是在重新编程之前读取并保存现有的 Flash 映像。如果没有备份可用,唯一的选择是重建并重新编程 rd-riop-demo,这将使系统恢复到功能相同的状态。 8. 支持命令行工作流程。SPT 内部调用 OpenSSL 和 SPSDK 等命令行工具来生成密钥和构建/写入镜像。更多信息请参阅以下文档: 安全配置工具 - 命令行操作 至于这两幅图像是如何联系起来的,关键流程如下: 1. 该演示程序由两个相互关联的多核项目组成。 RIOP 演示仓库包含两个项目目录: riop_M33LEADER_DEMO/ riop_M7FOLLOWER_DEMO/。 在 MCUXpresso 多核项目模型中,主项目/领导项目链接到从项目/跟随项目。构建主项目时,先构建辅助项目,并将辅助输出图像包含在/嵌入到主图像中。 2. M33 项目配置为多核主设备,M7 项目配置为从设备。 在 riop_M33LEADER_DEMO/.cproject 中,该项目定义了 __MULTICORE_MASTER 和 __MULTICORE_MASTER_SLAVE_M7SLAVE。其多核主配置指向: ${workspace_loc:/riop_M7FOLLOWER_DEMO/Debug/riop_M7FOLLOWER_DEMO.axf.o} 。 这意味着首先将 riop_M7FOLLOWER_DEMO.axf 处理成 .axf.o,然后将该对象作为“从属对象”链接到 M33 领导者图像中。 M7 项目配置为 M7SLAVE / __MULTICORE_M7SLAVE,使用 CM7 ITCM/DTCM 内存区域。 3.实际合并主要发生在链接/版本后阶段 MCUXpresso 多核流程处理辅助核映像,包括将辅助核部分移位,然后再将它们链接到完整的多核映像中。 因此,最终的 riop_M33LEADER_DEMO.axf 本质上是 M33 领头星 ELF 加上嵌入的 M7 跟随星图像数据/部分,而不是两个独立 AXF 文件的简单二进制连接。 4.运行时,M33启动M7 在 riop_M33LEADER.c 中M7启动地址定义为: CORE1_BOOT_ADDRESS = 0x303C0000,CORE1_KICKOFF_ADDRESS = 0x0。 在 SystemInitHook() 中,代码调用 Prepare_CM7(CORE1_KICKOFF_ADDRESS),然后在 main() 中调用 MCMGR_StartCore(kMCMGR_Core1, CORE1_BOOT_ADDRESS, ...) 来启动辅助核心。 因此,尽管 M7 映像嵌入到 M33 领导 AXF 中,但 M7 执行仍然由 M33 在运行时显式启动。 5. 可启动镜像仍需进行SPT处理。 对于 RT1180,文档中指出该设备只能从 CM33 启动。安全配置工具用于从原始应用程序映像生成带有启动头的可启动映像,MCUXpresso 输出类型包括 .axf。。 所以通常的流程是: riop_M7FOLLOWER_DEMO.axf → 处理成 riop_M7FOLLOWER_DEMO.axf.o→ 链接到 riop_M33LEADER_DEMO.axf → SPT 使用 M33 领导 AXF 生成可启动闪存映像。 顺祝商祺! 雪莉 Re: RIOP RT1189 – build and flash workflow from GitHub sources 嗨,雪莉, 非常感谢您的详细解答! 顺祝商祺! 马可
View full article
[IMX8MQ]GPU hang and cannot be recovery We have a custom board based on the IMX8MQ which runs a web-based UI.  In our test scenario, the issue can be reproduced in roughly two to three hours. When the problem occurs, a flood of GPU‑related error logs are generated, after which the entire UI freezes. Other kernel‑level functions remain usable. We have implemented GPU recovery measures, yet they fail to restore normal GPU operation. A full device reboot is the only workaround. OS: Android 11.0.0_2.0.0 (Linux 5.10.9 kernel) Can you please help us in providing a way to either: 1. Fix this issue 2. Recover the GPU Re: [IMX8MQ]GPU hang and cannot be recovery The most practical fix path is to move off Android 11.0.0_2.0.0 / Linux 5.10.9 and test at least Android 11.0.0_2.2.0, preferably 11.0.0_2.6.0 if you must stay on Android 11. NXP’s Android release page shows 11.0.0_2.0.0 uses Linux 5.10.9, while later Android 11 drops use newer BSPs: 11.0.0_2.2.0 uses Linux 5.10.35, 11.0.0_2.4.0 uses Linux 5.10.52, and 11.0.0_2.6.0 uses Linux 5.10.72 for i.MX 8M Quad EVK images . I also found an NXP community trace stating that an RD GPU patch fixed a similar Android 11 issue in Android 11.0.0_2.2.0, and that it was a “major patch associated with GPU” later carried into Android 11/12 . For recovery: I would not rely on a software-only GPU reset once the Vivante/galcore GPU is hard-hung. The evidence I found shows galcore can attempt “GPU hang, automatic recovery” and report “recovery done,” but the same trace then continues into an AXI BUS ERROR GPU state dump . Another report notes that the reset_gpu path did nothing because there was “no registered reset control” . In practice, if galcore automatic recovery fails, the robust field workaround is a controlled system reboot, not only restarting SurfaceFlinger/WebView or the UI process. Recommended action plan: Reproduce on NXP i.MX8MQ EVK or NXP demo image if possible. If the issue appears only on the custom board, prioritize board-port differences: DDR timing/training, GPU power rail behavior, thermal, and device-tree memory carveouts. NXP guidance for similar i.MX8MQ custom-board GPU problems is to reproduce on the reference board with NXP demo images; if the failure is custom-board-only, rerun DDR tests and rebuild with updated LPDDR4 coefficients . Update BSP / GPU driver stack. Your release is Android 11.0.0_2.0.0 with Linux 5.10.9. Later NXP Android 11 releases exist for i.MX8MQ, including 11.0.0_2.2.0, 2.4.0, and 2.6.0 . Because a GPU-related Android 11 fix is specifically associated with 11.0.0_2.2.0 , first test your workload on 11.0.0_2.2.0 or newer before investing in elaborate runtime recovery. Check DDR size and GPU-addressable memory placement. Several i.MX8M-family GPU hangs/errors are tied to memory configuration. One NXP thread says the Vivante GPU driver in a GA release did not support the 4 GB memory address range and that limiting the system to 3 GB with mem=3072MiB avoided the AXI BUS ERROR failure . Another note states the GPU can only handle physical memory in the 0x10000000 to 0x80000000 area and suggests assigning CMA memory into low memory to avoid addresses above that range . As a quick experiment, boot with reduced memory, for example mem=3072MiB , and see whether the 2–3 hour failure disappears. Review CMA / contiguous GPU memory. NXP support recommends increasing CMA to about 25% of total DDR for similar i.MX8M GPU crash scenarios . The Android guidance also mentions using galcore.contiguousSize=xxx on the kernel command line to set GPU memory size . If your UI uses WebView/WebGL/video/canvas heavily, CMA exhaustion or fragmentation over a few hours is a plausible cause. Try GPU driver boot-parameter mitigations. For debug, test: galcore.powerManagement=0 to disable GPU power management galcore.baseAddress=0x40000000 galcore.physSize=0 to disable GPU flat mapping galcore.contiguousSize=xxx to tune contiguous GPU memory These should be treated as isolation tests first, not final production changes, unless they clearly eliminate the failure. Verify GPU power rail and operating mode. The i.MX8MQ datasheet lists VDD_GPU nominal-mode operation as 0.81–1.05 V, typical 0.9 V, with maximum GPU frequency 800 MHz; overdrive mode is 0.9–1.05 V, typical 1.0 V, with maximum GPU frequency 1 GHz . Absolute maximum for VDD_GPU is 1.1 V, noted for overdrive . Do not simply raise the rail to 1.1 V as a “fix”; instead, confirm the actual rail, ripple, droop during UI/GPU load, PMIC sequencing, and whether your GPU frequency/OPP matches the configured voltage. Use reboot as the production recovery fallback. You can still attempt a less disruptive recovery sequence — stop UI app/WebView, stop SurfaceFlinger, unload/reload galcore if built as a module — but the documented module operation is only normal insmod / rmmod handling , not guaranteed recovery from a wedged hardware state. If the kernel is alive but GPU logs flood and galcore recovery fails, trigger a controlled reboot from a watchdog/health monitor. Minimal triage matrix: Test Expected interpretation Run same test on NXP 11.0.0_2.2.0+ image If fixed, root cause is likely already addressed by later GPU/BSP patches. Boot with mem=3072MiB If fixed, suspect 4 GB / high physical address / GPU memory placement issue. Increase/relocate CMA into low memory If fixed, suspect GPU contiguous-memory allocation/addressing. Add galcore.powerManagement=0 If fixed, suspect GPU power-management transition/clock/rail interaction. Measure VDD_GPU during failure window If droop/ripple correlates, fix PMIC/rail/OPP configuration. Reproduce on EVK If EVK is stable, focus on custom board DDR, power, thermal, and device tree.
View full article
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の認証を受けた暗号モジュールとしては文書化されていません。
View full article
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 请注意,我使用的是 I2C 协议来对 OTP 进行编程,而不是使用原厂工具。请问您能否帮我看看还需要执行哪些命令才能真正写入 OTP? Re: MVR5510 OTP programming 好的,我会请我们的美国同事联系恩智浦半导体,因为他们负责与恩智浦半导体签订保密协议。如有必要,我会及时通知您。 Re: MVR5510 OTP programming 我看了下你们是烧录器公司吗?假如是的话那么第三方想做我们烧录的合作伙伴是需要认证的您可以联系NXP的local的代表去商务谈判,所以我无法把烧写的程序直接给您。 Re: MVR5510 OTP programming 已经告诉你了 OTP不支持用自己的板子去烧写,因为里面有很多rule 要追寻这些都是保密的不对外开放,你要想自己做OTP 首选我们指定的板子去烧写,正常情况下你是无法正确读取OTP寄存器的值。能理解嘛? Re: MVR5510 OTP programming 感谢您的回复,虽然对我没有任何帮助。我需要解决一个技术问题,但你却给了我一份销售方案。我会和老板讨论这件事。 Re: MVR5510 OTP programming 我们不支持客户用自己的板子做OTP,大批量的时候可以选择第三方做OTP,小批量或者自己做OTP测试的话我建议您购买下面的板子: SBC and PMIC Product OTP Programming Board | NXP Semiconductors guoweisun_0-1787018585422.pngguoweisun_0-1787018585422.png guoweisun_1-1787018601483.pngguoweisun_1-1787018601483.png 这两个组合还是比较有性价比。
View full article
LPC55S69: CPBOOT/CPUCTRL/CPUCFGシーケンスを完全に検証したにもかかわらず、コア1が起動しない LPC55S69: ブートシーケンスが完全に検証されているにもかかわらず、コア1が実行を開始しない(MCMGRと手書きレジスタ書き込みの両方で同様に失敗する)。 環境 ボード:LPC55S69-EVK(LPCXpresso55S69)、LPC55S69JBD100 IDE:MCUXpresso IDE v25.6 [ビルド136] [2025-06-27] OS:Linux(openSUSE) ツールチェーン:GNU ARM Embedded(バンドル)、GCC 14.2.1 デバッグプローブ:オンボードLPC-Link2、LinkServerバックエンド 使用されたSDKコンポーネント:driver.flexcomm、driver.mailbox、ミドルウェア.マルチコア.mcmgr_lpc55s69、freertos_kernel + cm33_non_trustzone_port (マスターのみ) 概要 コア0(マスター、cm33_core0)は正常に動作します。コア 1 (スレーブ、cm33_core1、ロール M33SLAVE) は、 2 つの別々のクリーンルーム プロジェクト ビルド ( 1つは手書きのレジスタ シーケンス、もう 1 つは NXP 独自の MCMGR ミドルウェアを使用) において、レジスタ レベルとメモリ レベルでブート シーケンスのすべての要素が独立して正しいことが検証されているにもかかわらず、自身の main () の最初の命令さえ実行しないようです。どちらの試みも、全く同じ行き詰まりに陥った。 独立機関によって正しいと検証された内容 試み1 ― 手書きのブートシーケンス SYSCON->CPBOOT は、組み込みスレーブイメージの実際のリンカ確認済みアドレスに設定されます(objdump -h section 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バンクに移動済み)。 埋め込まれたスレーブイメージの.dataを確認しましたセクション (ゼロ初期化されていないグローバル変数) は、コア 0 のライブ メモリ内に配置されません (INSERT BEFORE .data を使用したカスタム リンカー スクリプト フラグメントが必要)。デフォルトのリンカースクリプトにはobjcopyで名前変更されたマルチコアセクションの配置ルールがなく、そうでなければ「孤立セクション」としてコア0のSRAMに配置されてしまうため。 上記すべてにもかかわらず、Core 1 の main() の最初の行として書き込まれた診断値 (共有され、正しくアドレス指定されていることが確認されたメモリ内) は、初期値から変化しません。 試行2 — NXPのmcmgr_lpc55s69ミドルウェアを使用した新規プロジェクト レジスタ書き込みを手書きで行う代わりに、MCMGR_Init() / MCMGR_StartCore() / MCMGR_TriggerEvent() を使用してゼロから再構築し、レジスタシーケンスに誤りがないかを確認しました。 mcmgr_internal_core_api_lpc55s69.cを直接読んでください:mcmgr_start_core_internal()が正しいSDKマクロ(SYSCON_CPUCTRL_CPU1RSTEN_MASKなど)を使ってCPBOOT→CPUCTRLシーケンス→同じCPUCFGを実行していることを確認しました。 MCMGR_Init() (main() から呼び出される) は MCMGR_EarlyInit() / mcmgr_early_init_internal() を呼び出さないことが分かりました。後者は独立した公開関数であり、ソースコードのコメントには「(SystemInitHook の起動シーケンス内で)リセットエントリのできるだけ近くで呼び出されることを意図している」と記載されているが、生成されたプロジェクトではこれを自動的に接続する仕組みは何もない。SystemInitHook() は汎用デバイス起動ファイルでは __attribute__((weak)) であり、デフォルトでは空のスタブになります。 両方のコアで独自の SystemInitHook() オーバーライドを追加し、mcmgr_early_init_internal(MCMGR_GetCurrentCore()) を呼び出しました。.mapで確認済みこのオーバーライドが、両方のプロジェクトで実際の関数(弱いスタブではない)としてリンクするファイル。 試行1のすべての修正を再適用および再確認しました(反復的な再構築全体にわたる埋め込みアドレスの安定性、.dataセクションのリダイレクトは、同じリンカーフラグメント技術を使用し、コア1のSRAMの再配置、CPUCFG/CPBOOT/CPUCTRLレジスタの値はすべて試行1の結果と同一です。 MCMGR_BUSY_POLL_COUNTデフォルトで定義されていないため、mcmgr.cではMCMGR_StartCore(..., kMCMGR_Start_Synchronous)ブロックが タイムアウトなしで 使えます内部待機ループ (while (s_mcmgrCoresContext[coreNum].state)!= kMCMGR_RunningCoreState)) は、mcmgr.h のマクロの条件付きコンパイルを直接読み取ることで確認されました。 結果:全く同じ結果。コア0がMCMGR_StartCore()内で永久にブロックされる。診断用共有メモリ値(両方のコアの.mapで同じアドレスが確認されました)ファイルは、真に共有されたSRAMバンク内にあり、.noinitCore 1のmain()の最初の実行可能行として文字通り書かれ、初代値の0を離れません。 質問 CPUCFG、CPBOOT、およびCPUCTRLはすべて、リファレンス実装(mcmgr_internal_core_api_lpc55s69.c)と全く同じように読み取られます。ブートアドレスに埋め込まれたイメージが、正しくリンクされたCortex-Mバイナリであることが独立して確認されていますが、この 部分でCore 1の命令フェッチを開始するために、これら3つのレジスタ書き込みだけではキャプチャされない追加のステップが必要でしょうか? 具体的には: LPC55S69(どのリビジョンでも可)において、CPBOOT/CPUCTRLベースのセカンダリコアブートに影響を与える既知のシリコンエラーはありますか? Core 1の起動には、アプリケーションレベルのレジスタシーケンスに加えて、デバッグプローブレベルのアクション(例:この部分で列挙された2番目のSWDデバイスを対象としたSWDアタッチャ/リボン)も本当に必要なのでしょうか?これは、NXP自身のマルチコアSDKの例(例:)freertos_message_buffers_secondary_core)をIDEsの通常の単一プロジェクト「Debug」フローでデバッグすると、Core 1は別のLaunch グループ設定なしで正常に起動しているように見えます。これは、MCUXpressoのデバッグ起動自体がアプリケーションコードだけではトリガーできない追加ステップを行っている可能性を示唆しています。 これら3回の書き込み間に、参照mcmgr_internal_core_api_lpc55s69.cに反映されていない最小遅延、順序制約、または追加のレジスタ(例えば電力/クロック領域)があるのでしょうか?実装? プロジェクトファイル一式(.mapファイル)を提供いたします。ファイル、またはご要望に応じた最小限の複製プロジェクトを提供いたします。 LPC55xx Re: LPC55S69: Core 1 never starts despite fully verified CPBOOT/CPUCTRL/CPUCFG sequence 解決済み — 根本原因は、Core 1 の起動失敗ではなく、私自身の診断における偽陰性でした 後で同じ症状のThreadを見つけた方のために解決策を投稿します。 実際の根本原因 このプロジェクトのどのバージョンにおいても、コア1は常に正常に起動し、動作していました。問題はCPUCFG/CPBOOT/CPUCTRL、ベクターテーブル、メモリ配置、あるいはブートシーケンス内の他のいずれにもなかった。問題は、コア1が何も実行していないように見えた、私自身の診断ツールのバグだった。 私は小さな共有メモリ構造体を使用していました(__attribute__((section(".noinit.$SRAM4"))))コア1によって書き込まれ、コア0によって読み込まれ、起動の進行状況を監視する。この手法は、プロジェクトで生成されたリンカスクリプトが実際にSRAM4という名前の領域を定義している場合にのみ、真の共有メモリに実装されます。私がゼロから作成したウィザードプロジェクトはその領域を定義していたので、その技術は構造的に機能していましたが、後にNXPの作業中のhello_world例プロジェクト(異なる名前の領域、Ram1/rpmsg_sh_memを使ったもので、SRAM4ではなく異なる名前の領域)の上にバージョンを構築した際、同じ属性が静かに各コアのprivate.noinitに移行しましたエラーを発生させる代わりにメモリに記録する。Core 0とCore 1はそれぞれ「shared」構造体の独自のコピーを読み書きしていましたが、コンパイラやリンカは何も問題がないと警告しませんでした。 最終的な結果:私の診断では、2 つの独立したブート実装 (手書きの CPUCFG/CPBOOT/CPUCTRL レジスタと NXP 独自の MCMGR ミドルウェア) と複数のプロジェクト構成にわたるすべてのテストで 0 (進行なし) が報告されました。これは、コア 1 が実際に実行されているかどうかに関係なく、2 つのコアがそもそも同じメモリ アドレスを参照していなかったためです。 実際にどのように発見されたか NXPの動作するhello_worldサンプルをそのままコピーし、既存の、変更されていない、動作確認済みのmain.cに診断書き込みのみを追加することで、(交換するのではなく)、オンボードLEDでCore 1が本当に全シーケンスを実行していることを視覚的に確認できましたが、共有メモリカウンタは依然として0と表示されていました。その矛盾(実行の物理的証拠と診断の否定)が、コア1ではなく診断自体が壊れていることを露呈させました。セクション名をプロジェクトの実際の領域(.noinit.$SRAM4 ではなく .noinit.$rpmsg_sh_mem)に一致するように修正したところ、すぐに正しい増加値が生成されました。 LPC55xxでマルチコアブートをデバッグしている他の人への教訓 コア間共有メモリに .noinit.$ セクション属性を使用する場合は、別のプロジェクトで動作した名前 (SRAM4 など) を想定するのではなく、その特定のプロジェクトで生成された _Debug_memory.ld に対して領域名を確認してください。ここで不一致が発生すると、ビルド警告もリンクエラーもランタイム障害も発生せず、完全にサイレントに失敗します。そして、実際のブート失敗と全く同じ症状が現れます(レジスタ/ベクタテーブルレベルのデバッグではすべて正常にチェックされます。なぜなら、実際の問題は完全に診断レイヤーにあるからです)。 以前の投稿を読んでくださった皆様、ありがとうございました。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のインストールでデュアルコア実行が可能です。 テスト:例のアプリケーションコードは私のプロジェクトの設定内で動作しますか? 問題が自分のアプリケーションコードにあるのか、プロジェクトのビルド/リンク設定にあるのかを区別するために、動作中の例のセカンダリコアmain.cをコピーしました。app.h、および hardware_init.cそのまま(バイト単位、未修正)で自分のスレーブプロジェクトに組み込まれ、自分のアプリケーションコードを完全に置き換えました。 結果:LEDは点滅しない。元のサンプルプロジェクトでは正常に動作する、全く同じで変更されていないNXPコードが、私のプロジェクト構成内でビルドするとCore 1の起動に失敗します。 これが証明すること 問題はアプリケーションレベルのコードではありません(すでに2回確認されています。手書きレジスタ実装とMCMGRベースの実装で、そして今回は3回目はそのサンプルのソースファイルで確認されています)。私のプロジェクトのマルチコアリンカー設定/メモリ領域構成が、動作するサンプルとどのように異なっているかという点に特有の問題があり、私はできる限り正確に一致させようと努力したにもかかわらず、それが起こってしまいました。 MCMGR_StartCore() の後、CPUCFG、CPBOOT、CPUCTRL はすべて意図どおりに読み戻されます。 埋め込みイメージのベクトルテーブルは、独立して検証され、有効であることが確認されています(正しいスタックポインタ、実際のResetISRシンボルと一致する正しいリセットハンドラアドレス)。 マスターメモリ領域はRAM領域(PROGRAM_FLASHではない)に設定されており、これはCore 1のイメージをフラッシュではなくRAMに埋め込むという動作例のアプローチと一致しています。 コア1のプライベートメモリはコア0のプライベートメモリと重複しません 構造上の違いが1つ見つかりましたが、まだ解決していません。動作例のセカンダリコアプロジェクトの.cprojectには、PROGRAM_FLASHメモリ領域のオーバーライドがまったく含まれていません。これは、動作例のセカンダリコアプロジェクトの.cprojectに、PROGRAM_FLASHメモリ領域のオーバーライドがまったく含まれていないためです。(カスタムRAM由来の領域は2つのみ)。私がゼロからウィザードで作成したスレーブプロジェクトには、再配置された PROGRAM_FLASH を含む 3 つの領域があります。その領域を完全に削除しようとすると(動作する例に正確に一致させるため)、MCUXpressoのMCU設定ページ(NullPointerException: this.mcuPage is null)がクラッシュし、IDEのツールがフラッシュ領域が定義されていないプロジェクトを快適にサポートしていないことを示唆しています。これが作業中の例の正確な設定を手作業で照合するのが難しい理由かもしれません。 質問 マスターの「M33SLAVE」役割+マルチコアリンカー設定以外に、SDKのhello_world例と同じ動作状態にするプロジェクトをゼロから作るために必要な特定のマルチコアプロジェクト構成はあるのでしょうか?それともMCUXpresso IDE v25.6.136に既知の制限やバグがあるのでしょうか?マルチコアLPC55S69プロジェクト用のプロジェクトウィザードで、サンプルプロジェクトファイルがウィザードでは再現できない方法で回避しているものはありますか? 両プロジェクトの完全な.cprojectファイルを喜んで共有します。必要に応じて直接比較するためのファイル。
View full article
カスタムの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の公式プロビジョニングおよび復旧ドキュメントが推奨されています。
View full article
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.
View full article
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
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
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は内面的に繋がっていると言ってもいいでしょうか。 そして、それらを接続して低インピーダンスにする必要があります。
View full article
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
View full article
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); を実行した後に最終的にハードフォルトが発生するとおっしゃっていましたね。この現象は、関数が呼び出されるたびに必ず発生しますか、それとも特定の条件下でのみ発生しますか? よろしくお願いします、 パブロ
View full article
[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、電源、熱、およびデバイスツリーに焦点を当ててください。
View full article
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 是内部连接的。 应该将它们连接起来以降低阻抗。
View full article
[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、电源、散热和设备树。
View full article
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.
View full article