Multi Source Translation Content

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

Multi Source Translation Content

ディスカッション

ソート順:
[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) 后最终会发生硬故障。每次调用该函数时都会发生这种情况,还是只在特定条件下才会发生? 此致, 巴勃罗 Re: SDK example flash and LWIP hard-fault 嗨,Pablo,我想知道你是否了解我的问题。 非常感谢 格尔德 Re: SDK example flash and LWIP hard-fault 您好,我有一个更新。我忘记从示例 flexspi 中复制文件夹 linkscript 了。现在,我遇到了另一个硬故障初始化 lwip,但 flexspi 初始化工作正常。 格尔德 Re: SDK example flash and LWIP hard-fault 您好,我用 SDK 中的另一个示例 (lwip_dhcp) 和 flexSpi 进行了测试,但我仍然遇到了随机硬故障。所以,我的项目遇到了问题。如果还有其他方法可以将大约 1 KB 的数据存储到闪存中,请告诉我。 非常感谢格尔德 Re: SDK example flash and LWIP hard-fault 嗨@GerdMartin , 我成功重现了该行为,经过一些测试后,我观察到以下情况: 在你合并的前两个示例中,flexspi_nor_polling_transfer_cm33 会擦除和写入内存区域。默认情况下,此示例使用的区域是组合项目图像的一部分。 我们可以计算出示例访问的扇区。在这个例子中,使用了扇区 20,扇区大小为 4k。 因此,FlexSPI 示例修改了以下地址: 20 × 4k + FlexSPI2_AMBA_BASE = 0x4014000 如果我们检查调用 main_FLASH() 前后的内存内容,可以看到项目映像的一部分被覆盖了。 Pablo_Ramos_0-1787777815010.pngPablo_Ramos_0-1787777815010.png Pablo_Ramos_1-1787777823697.pngPablo_Ramos_1-1787777823697.png 能否修改 FlexSPI 示例使用的内存区域,使其不与项目映像重叠? 做出此项更改后,问题是否仍然存在? 此致, 巴勃罗
記事全体を表示
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 Re: Impact of i.MX6ULL REFTOP_VBGADJ on Internal PLL and Clock Output ご回答ありがとうございます。REFTOP_VBGADJを変更してもPLLには影響しないことを理解しています。 分かりやすい説明のおかげで、必要な情報をすべて得ることができました。ご支援ありがとうございます。 また、返信の仕方が分からず、返信が遅れてしまったことをお詫び申し上げます。
記事全体を表示
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 Re: SDK example flash and LWIP hard-fault Hi Pablo, I'd like to know if you have any information about my problem. Thank you very much Gerd Re: SDK example flash and LWIP hard-fault Hi, I have one update. I forgott to copy the folder linkscript from example flexspi . now, I get an other hard-fault init lwip, but the flexspi init is working. Gerd Re: SDK example flash and LWIP hard-fault Hi, I have done a test with another example from SDK (lwip_dhcp) together with flexSpi, but I get also an randomize hard_fault. So, I have a problem to go in my project. May be, if there is another solution to store data aprox. 1 KB) into the flash, please let me know. Many thanks Gerd Re: SDK example flash and LWIP hard-fault Hi @GerdMartin, I was able to reproduce the behavior, and after performing some tests, I observed the following: In the first two examples that you combined, flexspi_nor_polling_transfer_cm33 erases and writes to a memory region. By default, the region that this example uses is part of the combined project image. We can calculate the sector that the example accesses. In this case, the example uses sector 20, with a sector size of 4k. Therefore, the FlexSPI example modifies the following address: 20 × 4k + FlexSPI2_AMBA_BASE = 0x4014000 If we examine the memory contents before and after the call to main_FLASH(), we can see that part of the project image is being overwritten. Pablo_Ramos_0-1787777815010.pngPablo_Ramos_0-1787777815010.png Pablo_Ramos_1-1787777823697.pngPablo_Ramos_1-1787777823697.png Could you modify the memory region used by the FlexSPI example so that it does not overlap with the project image? After making this change, does the issue still occur? 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
記事全体を表示
Wi-FiチップセットMCU制御 こんにちは、みんな、 AP+STA機能を備えたWi-Fiモジュールを探していました。例えば、NXP、Microchip、Infineonなどのモジュールを見つけました。しかし、ほとんどのモジュールはPCIe経由でWiFiインターフェースを使えず、高度なOSでしか対応していません。 しかし、InfineonのAIROC CYW55X(シリーズ)というMCU+WiFiモジュールのセットを見つけました。 こういったタイプのモジュールの統合や制御に関する経験はありますか?もしそうなら、これまでに使っていて外部MCUとうまく統合できた他のモジュールを教えてもらえますか?私の意図は、データをマイクロコントローラにオフロードするのではなく、例えばメッシュやAPの機能を制御することです。 Wi-Fiモジュールを制御しながら基本的なAIモデルに対して推論を行うために、MCU(例えばSTM)を使っています。 ありがとう、みんな Re: Wi-Fi Chipset MCU Control こんにちは、 ホストMCUとしてSTM32を使う予定なら、Wi-Fiデバイスとして IW612 か IW416 を使うことをおすすめします。その場合、製品ウェブページのソフトウェアセクションにあるSTM32 CMSIS-Packドライバを使用できます。 これらのデバイスは、Wi-FiにはSDIOを、BluetoothにはUARTを使用します。IW612の場合、もし802.15.4を使う予定なら、ホストインターフェースはSPIです。 もう一つの選択肢としては 、RW612 をネットワークコプロセッサ(NCP)として使用することです。RW612はワイヤレスMCUであるため、外部MCUがアプリケーションに集中する間、無線接続スタックを処理できます。 よろしくお願いいたします。 ダニエル Re: Wi-Fi Chipset MCU Control ダニエルが述べたように、RW612は良い解決策となるでしょう。 3-ラジオ対応で、ネットワーク対応アプリケーションの作成に理想的なイーサネットMACも内蔵しています。 RW612はAP+STA対応が可能です。つまり、そのMCUはネットワーク制御とAI機能の両方に使えます。 Web UIと組み込みOTAを備えたすぐに構築できるプロジェクトをお探しなら、 https://mongoose.ws/wizard/をご覧ください。 プロジェクトを開始し、空のディレクトリを選択し、ボードターゲットとしてFRDM-RW612を選択し、WiFiオプションを設定し、「生成」をクリックし、Xpressoでプロジェクトを開き、ビルドとフラッシュを実行し、シリアルコンソールを接続すれば、すぐに動作させることができます。 具体的に何を作っているのか、もう少し詳しく教えてもらえますか?
記事全体を表示
FRDM-A-S32K358 Pinout Details Hello Community,  I just purchased the FRDM-A-S32K358 Development kit yesterday. looking for the Pin out details. I am looking for similar file S32K144_pinout.png. Appreciate your quick response Thanks and Regards Sriram Re: FRDM-A-S32K358 Pinout Details Hello VaneB Thank you for the link, this helps a lot. Re: FRDM-A-S32K358 Pinout Details Hi @SriramEmbd  There is no equivalent image available for the FRDM-A-S32K358. However, the board schematic includes a dedicated page that shows the pin assignments for the Arduino headers. The schematic is available in the FRDM-A-S32K358 Design Files.zip package. BR, VaneB
記事全体を表示
FIPS 140-3 Level 3 Compliance of NXP Code Signing Tool (CST) Hi NXP Team, We are currently using the NXP Code Signing Tool (CST) for secure boot implementation and for generating/managing the keys and certificates used for image signing. As part of our product security requirements, we need to understand the FIPS 140-3 Level 3 compliance of the CST-based code-signing process. Could you please clarify the following: 1. Is the NXP Code Signing Tool (CST) itself FIPS 140-3 compliant or validated, specifically for FIPS 140-3 Level 3 requirements? If yes, could you please share the relevant certification, validation details, or official NXP documentation confirming the compliance? Thanks Re: FIPS 140-3 Level 3 Compliance of NXP Code Signing Tool (CST) CST is documented as an NXP code-signing tool, not as a FIPS 140-3 Level 3 validated cryptographic module.
記事全体を表示
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設計Files.zip パッケージで入手可能です。 BR、VaneB
記事全体を表示
Wi-Fi Chipset MCU Control Hello everyone, I was browsing for some wifi modules with AP+STA functionalities. I found some modules from NXP, Microchip, and Infineon for example. However, most of the modules are only enabling wifi interface through PCIe and with advanced OS. However, I found a set of MCU+Wifi module from infineon called AIROC CYW55X (series). Do you have any experience integrating and controlling these type of modules? If so, can you share different modules that you have used before and were able successful to integrate with an external MCU? My intention is not to offload data to the microcontroller, only to control for example the mesh and AP capabilities. I want to use a MCU (STM for example) to perform some inference on some basic AI models while controlling the wifi module. Thanks guys Re: Wi-Fi Chipset MCU Control Hi, If you are planning to use an STM32 as the host MCU, I would recommend using an IW612 or IW416 as the Wi-Fi device. In that case, you can use the STM32 CMSIS-Pack drivers available in the Software section of the product webpage. These devices use SDIO for Wi‑Fi and UART for Bluetooth. For the IW612, if you also plan to use 802.15.4, the host interface is SPI. Another option is to use an RW612 as a Network Co-Processor (NCP). Since the RW612 is a wireless MCU, it can handle the wireless connectivity stack while the external MCU focuses on the application. Regards, Daniel Re: Wi-Fi Chipset MCU Control As Daniel mentioned, RW612 would be a good solition. It is  3-radio, and also has a built-in Ethernet MAC - ideal for making network enabled applications. RW612 can do AP+STA. So you can use that MCU for both network-control and your AI functionality. If you're looking for a ready-to-build project with Web UI and built-in OTA, take a look at https://mongoose.ws/wizard/ Start a project, choose empty directory, choose FRDM-RW612 as a board target,  set WiFi options, click "generate" , open project  in Xpresso, build & flash, attach your serial console, and you'll have it running in a minute. Could you elaborate more on what exactly you're building?
記事全体を表示
Wi-Fi芯片组MCU控制 大家好, 我正在寻找一些具有 AP+STA 功能的 Wi-Fi 模块。例如,我找到了一些来自恩智浦半导体(NXP)、微芯科技(Microchip)和英飞凌科技(Infineon)的模块。然而,大多数模块仅通过 PCIe 和高级操作系统启用 wifi 接口。 不过,我找到了一套来自英飞凌的名为 AIROC CYW55X(系列)的 MCU+Wifi 模块。 您在集成和控制这类模块方面有经验吗?如果可以的话,您能否分享一下您之前使用过并成功与外部MCU集成的不同模块?我的目的不是将数据卸载到微控制器,而只是为了控制例如网状网络和接入点功能。 我想使用 MCU(例如 STM)对一些基本的 AI 模型进行一些推理,同时控制 wifi 模块。 谢谢大家 Re: Wi-Fi Chipset MCU Control 您好, 如果您计划使用 STM32 作为主机 MCU,我建议使用IW612或IW416作为 Wi-Fi 设备。在这种情况下,您可以使用产品网页软件部分提供的 STM32 CMSIS-Pack 驱动程序。 这些设备使用 SDIO 进行 Wi-Fi 通信,使用 UART 进行蓝牙通信。对于 IW612,如果您还计划使用 802.15.4,则主机接口为 SPI。 另一种选择是将RW612用作网络协处理器 (NCP)。由于 RW612 是一款无线 MCU,它可以处理无线连接协议栈,而外部 MCU 则专注于应用程序。 问候, 丹尼尔 Re: Wi-Fi Chipset MCU Control 正如丹尼尔提到的,RW612 会是一个不错的解决方案。 它有 3 个无线电模块,并且内置以太网 MAC——非常适合用于开发网络应用。 RW612 可以实现 AP+STA 功能。因此,您可以将该 MCU 用于网络控制和 AI 功能。 如果您正在寻找一个带有 Web UI 和内置 OTA 功能的现成项目,请查看https://mongoose.ws/wizard/ 启动一个项目,选择空目录,选择 FRDM-RW612 作为开发板目标,设置 WiFi 选项,点击“生成”,在 Xpresso 中打开项目,构建并烧录,连接串口控制台,一分钟内即可运行。 您能否详细说明一下您具体在建造什么?
記事全体を表示
S32K344 FlexIO I2C DMA Hello, I have some questions regarding the FlexIO I2C DMA  on S32K344, and I would appreciate your insights. 1. When using FlexIO to emulate I2C, the Tx length is set to Size + 1. Is this because "The transmit shifter loads one additional word on the last falling edge of the SCL pin"? 1.png1.png1.png1.png 2.png2.png2.png2.png 2. When using DMA for sending data, the MAJORLOOP_COUNT is also set to Size + 1. Is this for the same reason? When using DMA, all transmitted data comes from Master->TxData. When calling Flexio_I2c_Ip_MasterSendData, should the TxBuff length be Size + 1, and should the last byte be 0xFF or 0x00? 3.png3.png3.png3.png 3. For receiving data, the MAJORLOOP_COUNT is set to Size – 1. Why is this? 4. I tested this on the S32K344 and found that when using DMA for FlexIO I2C receiving data, the received data is one byte less than expected. Observing with an oscilloscope, the clock signal for the last byte shows only about five or six bits of waveform. The same test on the S32K312 works fine. S32K344 S32DS3.6.4 RTD700   BR, Jason Re: S32K344 FlexIO I2C DMA Hi @Jason07  As FlexIO is not a dedicated I2C peripheral, its implementation requires additional internal steps to complete the I2C bus sequence correctly. The Size + 1U in the transmission is related to the final shifter load required by FlexIO to complete the I2C frame sequence. This additional transfer does not represent an extra payload byte. Instead, it is used internally by the FlexIO hardware to generate the final clock pulses and correctly transition the bus to the end-of-transfer state. The Size - 1U in the reception is necessary because the last received byte is handled separately. This allows the driver to generate the required NACK and STOP conditions at the correct time. Also, take into consideration that when using DMA transfer mode, data transfers may be affected by cache coherency issues. To avoid potential problems when D-Cache is enabled, ensure that the buffers used as the source and destination of the DMA TCD are allocated in a non-cacheable memory region. There is no need to increase the TRANSFER_SIZE parameter when calling the Flexio_I2c_Ip_MasterReceiveData() function. The driver already handles the required internal adjustments for the receive sequence. By last, while reviewing your configuration, I noticed that the same DMA interrupt callback has been assigned to both DMA channels. According to the descriptions provided in Flexio_I2c_Ip.c, different callbacks should be used for the transmit and receive: FlexIO_I2c_Ip_DmaTransferCompleteNotificationShifter0() for the FlexIO Channel 0/1 TX FlexIO_I2c_Ip_DmaTransferCompleteNotificationShifter1() for the FlexIO Channel 0/1 RX BR,VaneB Re: S32K344 FlexIO I2C DMA Hi@VaneB I found the code where “the last received byte is handled separately”. However, I still have a question regarding sending. When using interrupt‑driven sending, the length is set to Size + 1. During sending, the code checks whether it is the last byte; if so, it sends 0xFF or 0x00. The actual sent data length is still Size. But when using DMA for sending, the DMA copies Size + 1 bytes from the send buffer, and in the Flexio_I2c_Ip_MasterEndDmaTransfer function, it also fills 0xFF or 0x00 into the ShiftBuffer. This means the actual sent data length is Size + 1, not Size. Why? 1.png1.png1.png 2.png2.png2.png I modified all occurrences of TRANSFER_SIZE + 1 in the attached project to TRANSFER_SIZE (8), and also modified the DMA interrupt callback as described. I also disabled the D‑Cache. When using DMA for FlexIO I2C sending, I observed with an oscilloscope that at -Os optimization level, the clock signal is normal with only 8 bytes. However, at -O0 optimization level, the clock for the first 8 bytes is normal, but after the ACK is sent, the stop signal is not generated as expected; instead, an extra 1‑bit clock pulse appears. 3.jpg3.jpg3.jpg For FlexIO I2C receiving via DMA, LPI2C0 is used as a slave to send 8 bytes (0x10–0x17). At -O0 optimization level, the clock signal becomes abnormal during the transmission of the 7th byte, and the FlexIO receive buffer contains only 6 bytes (0x10–0x15). 4.jpg4.jpg4.jpg At -Os optimization level, the clock signal becomes abnormal during the transmission of the 8th byte, and the FlexIO receive buffer contains only 7 bytes (0x10–0x16). 5.jpg5.jpg5.jpg All of the above issues are reliably reproducible. Re: S32K344 FlexIO I2C DMA Hi @Jason07  I think the key point is that I2C uses open-drain signaling: Logical 0 actively pulls SDA low. Logical 1 releases SDA, allowing the pull-up resistor to drive the line high. Since FlexIO is a programmable peripheral rather than a dedicated I2C controller, the driver must generate I2C protocol events by controlling the bit patterns loaded into the shifters. Because of this, the final 0x00 and 0xFF values should not necessarily be considered additional payload bytes. Instead, they are used to place SDA in the correct state to complete the rotine. When Master->SendStop == TRUE, the driver loads 0x00, forcing SDA low. Once the shifter finishes and FlexIO releases the line, the pull-up brings SDA high while SCL is already high, creating the required STOP condition (SDA: LOW → HIGH while SCL is HIGH). When Master->SendStop == FALSE, the driver loads 0xFF, which keeps SDA released. The pull-up keeps SDA high, preventing a STOP condition and leaving the bus ready for a Repeated START (SDA: HIGH → LOW while SCL is HIGH). Also, I recommend enabling the DMA Optimize mode. An example is available in the thread: Example S32K344 FlexIO I2C with DMA Optimize option S32DS 3.6.0 RTD 6.0.0. By last, Are working with a custom board or an EVB/FRDM?
記事全体を表示
Duplicate variable declarations I am working on a new project using the LPC824 board and the downloaded lpcxpresso824max_new_project. It built, downloaded and debugged without problems. Initially I am trying to implement a 3-digit 7-segment LED display. I added declarations in peripherals.h and an update routine in main.c. When I build I get two errors - duplicated variable declarations. If I comment them out I get a message "undeclared variable". If I change the name of the variable I get the same duplication error. I have searched every source file in the project and cannot find any duplicates. One of the error messages is: - /Applications/MCUXpressoIDE_25.6.136/ide/plugins/com.nxp.mcuxpresso.tools.macosx_25.6.0.202501151204/tools/bin/../lib/gcc/arm-none-eabi/14.2.1/../../../../arm-none-eabi/bin/ld: ./source/peripherals.o:/Users/julian/Documents/MCUXpressoIDE_25.6.136/workspace/lpcxpresso824max_new_project/Debug/../source/peripherals.h:57: multiple definition of `CA_LUT'; ./source/main.o:/Users/julian/Documents/MCUXpressoIDE_25.6.136/workspace/lpcxpresso824max_new_project/Debug/../source/peripherals.h:57: first defined here Re: Duplicate variable declarations Hello, Could you please share your peripherals.h file and peripherals.c? Or describe how did you add the declaration for CA_LUT? Could you please share how did you use CA_LUT in main.c? Kindly share all the files names in which do you have [#include "peripherals.h"], are those files headers included in main.c? Best Regards, Luis Re: Duplicate variable declarations Hi, It could be that, as you define CA_LUT in peripherals.h both the main and peripherals.c call that file giving the duplicate error "multiple definition". Could you help us try to add the declaration of CA_LUT only in peripherals.c instead of peripherals.h, and retry; Do you have more declarations as this in peripherals.h? and they have the same error? If you have them please also move them to peripherals.c Consider your 7 segments as an external peripheral device. Let me know your findings Best Regards Re: Duplicate variable declarations This is the entry in peripherals.h for both errors // Lookup table for digits 0-9 (0 = ON, 1 = OFF) const uint32_t CA_LUT[10] = { //0: A, B, C, D, E, F are ON; G, DP are OFF ~((1< // 1: B, C are ON ~((1< // 2: A, B, D, E, G are ON ~((1< // 3: A, B, C, D, G are ON ~((1< // 4: B, C, F, G are ON ~((1< // 5: A, C, D, F, G are ON ~((1< // 6: A, C, D, E, F, G are ON ~((1< // 7: A, B, C are ON ~((1< // 8: All segments ON (A-G) ~((1< // 9: A, B, C, D, F, G are ON ~((1< }; // Global variables holding the current numbers to be printed on Digits 1, 2, and 3 volatile uint8_t display_buffer[3] = {1, 2, 3}; // E.g., displays "123" Both errors are used in main.c :- uint8_t numeric_value = display_buffer[current_digit]; uint32_t segment_pattern = CA_LUT[numeric_value]; #include "peripherals.h" appears only in the following files: - main.c, peripherals.c,  AS I mentioned I am coming over from CodeWarrior, so my knowledge of MCUX is probably dangerous (?????). I'm not sure whether a 7-segment display is a peripheral device (peripherals.h and c) or a declaration for a number of pins (pin_mux.h and c), but that can be sorted out later.
記事全体を表示
重复的变量声明 我正在使用 LPC824 板和下载的 lpcxpresso824max_new_project 开发一个新项目。编译、下载和调试过程均未出现问题。我最初尝试实现一个3位数的7段LED显示屏。我在 peripherals.h 中添加了声明。以及 main.c 中的更新例程。编译时出现两个错误——重复的变量声明。如果我把它们注释掉,就会收到“未声明的变量”消息。如果我更改变量名称,也会出现同样的重复错误。我已经搜索了项目中的每个源文件,没有找到任何重复项。其中一条错误信息是:- /Applications/MCUXpressoIDE_25.6.136/ide/plugins/com.nxp.mcuxpresso.tools.macosx_25.6.0.202501151204/tools/bin/../lib/gcc/arm-none-eabi/14.2.1/../../../../arm-none-eabi/bin/ld: ./source/peripherals.o:/Users/julian/Documents/MCUXpressoIDE_25.6.136/workspace/lpcxpresso824max_new_project/Debug/../source/peripherals.h:57: 多个定义“CA_LUT”; ./source/main.o:/Users/julian/Documents/MCUXpressoIDE_25.6.136/workspace/lpcxpresso824max_new_project/Debug/../source/peripherals.h:57: 首次在此处定义 Re: Duplicate variable declarations 你好, 请问您能否分享一下您的 peripherals.h 文件?文件和外设.c?或者描述一下你是如何添加 CA_LUT 声明的? 请问您能否分享一下在 main.c 文件中是如何使用 CA_LUT 的? 请分享所有包含 [#include "peripherals.h"] 的文件名称,这些头文件是否包含在 main.c 中? 此致敬礼,路易斯 Re: Duplicate variable declarations 这是 peripherals.h 中的条目两种错误 // 数字 0-9 的查找表(0 = 开,1 = 关) const uint32_t CA_LUT[10] = { //0:A、B、C、D、E、F 开启;G、DP 关闭 ~((1< // 1:B、C 均开启 ~((1< // 2:A、B、D、E、G 均开启 ~((1< // 3:A、B、C、D、G 均开启 ~((1< // 4:B、C、F、G 均开启 ~((1< // 5:A、C、D、F、G 开启 ~((1< // 6:A、C、D、E、F、G 开启 ~((1< // 7:A、B、C 均开启 ~((1< // 8:所有段开启(AG) ~((1< // 9:A、B、C、D、F、G 均开启 ~((1< }; // 全局变量,用于保存要打印在第 1、2 和 3 位数字上的当前数字。 volatile uint8_t display_buffer[3] = {1, 2, 3}; // 例如,显示“123” 这两个错误都在 main.c 中使用。:- uint8_t numeric_value = display_buffer[current_digit]; uint32_t segment_pattern = CA_LUT[numeric_value]; #include "peripherals.h"仅出现在以下文件中:- main.c、peripherals.c、 正如我之前提到的,我来自 CodeWarrior,所以我对MCUX 的了解可能很危险(????)。我不确定七段数码管是否属于外围设备(peripherals.h)。c) 或引脚数量的声明(pin_mux.h)c),但这个问题以后可以解决。 Re: Duplicate variable declarations 您好, 可能是因为你在 peripherals.h 中定义了 CA_LUT。主程序和外围程序。c调用该文件时出现重复错误“多重定义”。 能否请您帮忙尝试在 peripherals.c 文件中添加 CA_LUT 的声明?而不是 peripherals.h,然后重试; 你的 peripherals.h 文件中还有其他类似的声明吗?它们也会出现同样的错误吗?如果您有这些文件,请将它们也移动到 peripherals.c 文件中。 把你的7个段想象成一个外部外围设备。 请告诉我你的发现 顺祝商祺!
記事全体を表示