Multi Source Translation Content

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

Multi Source Translation Content

ディスカッション

ソート順:
单独设置 CONFIG_FIT_CIPHER=y 会导致 hab_status 您好,客服人员, 单独设置 CONFIG_FIT_CIPHER=y 会导致 i.MX8M Plus EVK (开放模式) 上的 hab_status 报告 HAB_INV_SIGNATURE/HAB_INV_ASSERTION。 板:i.MX8MP LPDDR4 EVK,开放/未熔断(HAB 配置:0xf0,HAB 状态:0x66) U-Boot:2024.04 (lf_v2024.04_6.6.52_2.2.x),NXP 分支 HAB 签名:其他方面均正常工作 — CST 签名 imx-启动(SPL CSF + FIT CSF),自定义版本时任务,用于验证嵌入偏移量处的 CSF 标签字节,并在任何不匹配时使版本失败(始终通过) 我有一个干净的基线,在这个板上,hab_status 报告“未找到 HAB 事件!”,使用的是我正常的 HAB 签名 imx-启动。我最近添加了内核 FIT 镜像签名 + AES-256 加密(与 HAB 不同的机制——U-Boot 自身的 bootm 验证/解密已签名的内核 FIT,密钥嵌入在 u-boot.dtb 中,与SRK熔丝无关)。启用此功能后,hab_status 每次启动都会报告 4 个事件: HAB配置:0xf0,HAB状态:0x66 HAB 事件 1:STS=HAB_FAILURE RSN=HAB_INV_ASSERTION(0x0C) CTX=HAB_CTX_ASSERT(0xA0) ENG=HAB_ENG_ANY HAB 事件 2:STS=HAB_FAILURE RSN=HAB_INV_ASSERTION(0x0C) CTX=HAB_CTX_ASSERT(0xA0) ENG=HAB_ENG_ANY HAB 事件 3:STS=HAB_FAILURE RSN=HAB_INV_SIGNATURE(0x18) CTX=HAB_CTX_COMMAND(0xC0) ENG=HAB_ENG_ANY HAB 事件 4:STS=HAB_FAILURE RSN=HAB_INV_SIGNATURE(0x18) CTX=HAB_CTX_COMMAND(0xC0) ENG=HAB_ENG_ANY 我采用逐个变量进行单独重建+重新刷写测试的方法,有条不紊地排查了这个问题,并在真实硬件上进行了验证: 1. 基线(现有 HAB 签名 imx-boot,无 kernel-FIT 工作):0 个事件 2. 已启用完整的内核 FIT 功能(FIT 公钥/AES 密钥 DTB 嵌入 + 我自己的 cmd/bootm.c)。补丁 + CONFIG_FIT_CIPHER=y + CONFIG_SYS_BOOTM_LEN=0x8000000): 4 个事件 3. 仅禁用 FIT 公钥/AES 密钥 DTB 嵌入:事件仍然存在,且相同 4. 还删除了我的 cmd/bootm.c 文件。补丁:事件仍然存在,完全相同 5. 完全移除 CONFIG_FIT_CIPHER=y + CONFIG_SYS_BOOTM_LEN=0x8000000(真正的内核 FIT 基线):0 个事件,干净 6. 仅重新添加了 CONFIG_SYS_BOOTM_LEN=0x8000000(未添加 CONFIG_FIT_CIPHER):0 个事件,干净 问题仅限于 CONFIG_FIT_CIPHER=y 的情况,其他任何因素都无效(我的 bootm.c 文件)。patch、FIT 公钥/AES 密钥 DTB 嵌入、CONFIG_SYS_BOOTM_LEN)单独或组合都很重要;只有 CONFIG_FIT_CIPHER=y 会将 hab_status 从 0 个事件翻转为这 4 个事件。 我仔细检查过,我自己的 CSF 计算没有问题:我的版本时签名任务会在签名后立即验证两个嵌入偏移处的 CSF 标签字节,如果存在任何不匹配,版本就会失败——无论是否使用 CONFIG_FIT_CIPHER,每个版本都能顺利通过,并且计算出的 SLD hab 块地址/FIT CSF 偏移量在所有测试版本中都是字节相同的,与此配置无关。 我最好的猜测是 CAAM 作业环争用——CONFIG_FIT_CIPHER 引入了 CONFIG_AES(在这个 U-Boot 版本上不需要单独的后端符号),并且该 SoC 的运行时 dmesg 证实 CAAM 确实在其他地方用于 AES/安全散列算法\(SHA\)。我找到的最相关的文档是 doc/imx/habv4/guides/mx8m_secure_boot.txt 的有关 HAB v4.4.0 之前的版本在封闭配置中锁定作业环/DECO 主 ID 寄存器的说明,但这并没有直接描述这种开放模式、CONFIG_FIT_CIPHER 特有的情况。 问题: 1.这是 i.MX8M Plus 上 CONFIG_FIT_CIPHER 和 HABv4 CSF 认证之间已知的交互吗?是 CAAM 资源相关问题,还是其他问题(例如,编译后的二进制文件大小/布局以某种方式移动了 FIT CSF 元器件边界,而我自己的自检无法发现这个问题,因为它验证的是我计算的偏移量,而不是 ROM 独立推导出的偏移量)? 2. CONFIG_FIT_CIPHER 是否能够安全地与此 SoC 上的 HABv4 CSF 签名结合使用,或者这是一个真正的限制? 3. 如果这是根本原因,是否有任何关于正确的 CAAM 作业环分配/解锁顺序的指示? Yocto Project Re: CONFIG_FIT_CIPHER=y alone causes hab_status 将此问题标记为已解决,以防其他人需要进行二分查找——感谢 [ https://community.nxp.com/t5/i-MX-Processors/i-MX8MP-EVK-HABv4-hab-status-shows-HAB-FAILURE-before-fuses-are/mp/2344924/highlight/true#M244756 ] 提供的真正修复方法,我找到后立即应用了该方法。 症状:使用我们正常的 HAB 签名 imx-启动 进行清洁基线(hab_status 报告“未发现 HAB 事件!”)。启用 CONFIG_FIT_CIPHER=y 后(为了支持 U-Boot 解密 AES-256 加密的内核 FIT 映像——一种与 HAB 不同的机制,与 SRK 熔丝无关),hab_status 开始在每次启动时报告 4 个事件:2× HAB_INV_ASSERTION,2× HAB_INV_SIGNATURE。 二分法:逐一隔离我们修改过的每个变量,每次都在真实硬件上执行重建+刷新+hab_status操作——最终只隔离了CONFIG_FIT_CIPHER=y(禁用FIT公钥/AES密钥DTB嵌入,并移除一个无关的cmd/bootm.c文件)。打补丁、保留/删除 CONFIG_SYS_BOOTM_LEN — 这些都不重要;只有 CONFIG_FIT_CIPHER 重要)。 根本原因 + 修复:我们通过自定义 Yocto 任务版本化 imx-启动,该任务移植了手动 HAB 签名工作流程(解析 SPL IVT,通过 print_fit_hab.sh 计算 FIT 元器件块,(使用 CST 签名)进入自动版本步骤。该任务假设 mkimage_imx8 自身版本留在版本暂存目录中的 DTB 副本已经正确地进行了 16 字节对齐——但这并不能保证每个配置都是如此。CONFIG_FIT_CIPHER 会改变 U-启动 本身的编译 DTB 大小,在我们的例子中,导致其大小不对齐。未对齐的 DTB 会悄悄地移动 print_fit_hab.sh 计算的每个后续 FIT 元器件边界,因此 CST 会对错误的字节范围进行签名。我们自己的版本时自检(在我们计算出的偏移量处是否存在 CSF 标签字节)每次都顺利通过——它并没有检查 ROM 独立正确的边界概念。只有真正的硬件才能捕获它。 修复方法与另一个帖子中的方法类似:在计算 FIT 元器件块之前,立即在 DTB 上显式运行 pad_image.sh(imx-mkimage 自己的脚本),而不是信任暂存目录的现有状态。已确认确实填充了数据(不是空操作),并且启用完整功能后,hab_status 再次变为干净状态。
記事全体を表示
i.MX8MP SError. remote proc starts M7 core and arecord plughw:wm8962audio,0 Hi, On FRDM-i.MX8MP (Linux 6.12.34-lts-next), ALSA capture on wm8962 works fine until the Cortex-M7 is started via remoteproc. After any M7 firmware starts, arecord triggers a kernel panic.   Summary: - Without M7: arecord OK - After starting M7: panic in fsl_sai_runtime_resume → regmap_write (SError 0xbf000002) - Reproduced with BSP stock firmwares: - imx8mp_m7_DDR_hello_world.elf - imx8mp_m7_DDR_rpmsg_lite_str_echo_rtos.elf So this does not look specific to our custom M7 app.   Reproduce: 1) Boot Linux, keep M7 stopped 2) arecord -D plughw:wm8962audio,0 -f S16_LE -r 16000 -c 1 -d 1 /tmp/t.wav → OK 3) echo stop > /sys/class/remoteproc/remoteproc0/state echo imx8mp_m7_DDR_hello_world.elf > /sys/class/remoteproc/remoteproc0/firmware echo start > /sys/class/remoteproc/remoteproc0/state 4) same arecord → Kernel panic (SError)   Panic path (abbreviated): snd_pcm_capture_open → ... → fsl_sai_runtime_resume → regmap_write → SError 0xbf000002   Tried: - Remove optional "audio" (AUDPLL) clock from imx8mp-cm7 DT node → still fails - Disable AudioMIX ownership / Audio PLL init in our M7 clock_config → still fails with stock hello_world anyway   Questions: 1) Is concurrent use of Linux SAI/wm8962 and M7 remoteproc supported on i.MX8MP? 2) Does SDK BOARD_BootClockRUN() mapping AudioMIX to M7 conflict with A53 audio power domain? 3) Any known 6.12 fixes for AudioMIX / fsl_sai runtime resume SError? 4) Recommended clock_config for M7 when audio must remain owned by Linux (UART/RPMsg only on M7)?   Thanks.   ------------------------- imx8mp-cm7 dts node -------------------------- imx8mp-cm7 {         compatible = "fsl,imx8mn-cm7";         rsc-da = <0x55000000>;         clocks = <&clk IMX8MP_CLK_M7_DIV>;              //<&audio_blk_ctrl IMX8MP_CLK_AUDIOMIX_AUDPLL_ROOT>;         clock-names = "core", "uart4";         mbox-names = "tx", "rx", "rxdb";         mboxes = <&mu 0 1               &mu 1 1               &mu 3 1>;         memory-region = <&vdevbuffer>, <&vdev0vring0>, <&vdev0vring1>, <&rsc_table>,                 <&m4_reserved>;         status = "okay";         fsl,startup-delay-ms = <500>;     };   ------------------ Panic log ------------------ root@FRDM-test:/lib/firmware# echo imx8mp_m7_DDR_hello_world.elf > /sys/class/remoteproc/remoteproc0/firmware root@FRDM-test:/lib/firmware# echo start > /sys/class/remoteproc/remoteproc0/state root@FRDM-test:/lib/firmware# root@FRDM-test:/lib/firmware# root@FRDM-test:/lib/firmware# root@FRDM-test:/lib/firmware# arecord -D plughw:wm8962audio,0 -f S16_LE -r 16000 -c 1 -d 1 /tmp/t_ex.wav [ 58.448085] SError Interrupt on CPU0, code 0x00000000bf000002 -- SError [ 58.448101] CPU: 0 UID: 0 PID: 644 Comm: arecord Tainted: G C O 6.12.34-lts-next #1 [ 58.448109] Tainted: [C]=CRAP, [O]=OOT_MODULE [ 58.448111] Hardware name: NXP FRDM-IMX8MPLUS (DT) [ 58.448113] pstate: 20000005 (nzCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--) [ 58.448118] pc : _raw_spin_unlock_irqrestore+0x10/0x50 [ 58.448130] lr : regmap_unlock_spinlock+0x14/0x20 [ 58.448136] sp : ffff8000854e3670 [ 58.448138] x29: ffff8000854e3670 x28: ffff8000854e3c30 x27: 0000000000000001 [ 58.448147] x26: ffff0000d06da088 x25: 0000000000000000 x24: ffff0000d06da390 [ 58.448153] x23: ffff0000d1c18f60 x22: ffff0000d0363c10 x21: 0000000001000000 [ 58.448160] x20: 0000000000000000 x19: ffff0000d14a3000 x18: 0000000000000002 [ 58.448168] x17: 0000000000000000 x16: 0000000000000000 x15: 0000000000000000 [ 58.448174] x14: 0000000000000000 x13: 0000000000000000 x12: 0000000000000000 [ 58.448180] x11: 0000000000000000 x10: ffff0000dccabb90 x9 : 0000000000000390 [ 58.448188] x8 : ffff0000dccabbac x7 : ffff8000854e3940 x6 : ffff0000dccabba0 [ 58.448194] x5 : ffff8000808ed440 x4 : 0000000000000008 x3 : ffff8000808ece60 [ 58.448200] x2 : 0000000001000000 x1 : ffff0000dcca5280 x0 : 0000000100000001 [ 58.448208] Kernel panic - not syncing: Asynchronous SError Interrupt [ 58.448211] CPU: 0 UID: 0 PID: 644 Comm: arecord Tainted: G C O 6.12.34-lts-next #1 [ 58.448217] Tainted: [C]=CRAP, [O]=OOT_MODULE [ 58.448221] Hardware name: NXP FRDM-IMX8MPLUS (DT) [ 58.448223] Call trace: [ 58.448225] dump_backtrace.part.0+0xd4/0xe0 [ 58.448234] show_stack+0x18/0x30 [ 58.448240] dump_stack_lvl+0x60/0x80 [ 58.448246] dump_stack+0x18/0x24 [ 58.448251] panic+0x168/0x360 [ 58.448258] add_taint+0x0/0xbc [ 58.448264] arm64_serror_panic+0x64/0x70 [ 58.448269] do_serror+0x3c/0x70 [ 58.448273] el1h_64_error_handler+0x30/0x54 [ 58.448279] el1h_64_error+0x64/0x68 [ 58.448283] _raw_spin_unlock_irqrestore+0x10/0x50 [ 58.448289] regmap_write+0x58/0x80 [ 58.448294] fsl_sai_runtime_resume+0xc4/0x280 [snd_soc_fsl_sai] [ 58.448304] pm_generic_runtime_resume+0x2c/0x44 [ 58.448312] __genpd_runtime_resume+0x30/0x80 [ 58.448318] genpd_runtime_resume+0x130/0x2c4 [ 58.448325] __rpm_callback+0x48/0x1e0 [ 58.448330] rpm_callback+0x68/0x80 [ 58.448334] rpm_resume+0x3bc/0x6a0 [ 58.448340] __pm_runtime_resume+0x50/0x9c [ 58.448344] snd_soc_pcm_component_pm_runtime_get+0x3c/0x138 [ 58.448350] __soc_pcm_open+0x60/0x488 [ 58.448355] soc_pcm_open+0x30/0x58 [ 58.448359] snd_pcm_open_substream+0x594/0x850 [ 58.448364] snd_pcm_open+0x118/0x24c [ 58.448368] snd_pcm_capture_open+0x4c/0x7c [ 58.448372] snd_open+0xa0/0x19c [ 58.448379] chrdev_open+0xb0/0x21c [ 58.448386] do_dentry_open+0x138/0x4c4 [ 58.448392] vfs_open+0x2c/0xf0 [ 58.448397] path_openat+0x6fc/0x1074 [ 58.448403] do_filp_open+0xa0/0x15c [ 58.448407] do_sys_openat2+0xc8/0x100 [ 58.448413] __arm64_sys_openat+0x64/0xc0 [ 58.448420] invoke_syscall+0x48/0x104 [ 58.448427] el0_svc_common.constprop.0+0xc0/0xe0 [ 58.448433] do_el0_svc+0x1c/0x28 [ 58.448438] el0_svc+0x30/0x100 [ 58.448444] el0t_64_sync_handler+0x120/0x12c [ 58.448450] el0t_64_sync+0x190/0x194 [ 58.448458] SMP: stopping secondary CPUs [ 58.448464] Kernel Offset: disabled [ 58.448466] CPU features: 0x00,00000080,00200000,4200420b [ 58.448469] Memory Limit: none [ 58.762124] ---[ end Kernel panic - not syncing: Asynchronous SError Interrupt ]---   i.MX 8M | i.MX 8M Mini | i.MX 8M Nano Linux Yocto Project Re: i.MX8MP SError. remote proc starts M7 core and arecord plughw:wm8962audio,0 Hi @humm  Q1. Yes, but only if the two cannot compete for the same audio resources. Q2. Yes, there will be conflicts. In scenarios where Linux controls the audio, the M7 side must remove the AUDIOMIX mapping and the code related to power-on and SAI PLL initialization, leaving AUDIOMIX entirely to the A53/Linux's audiomix_pd management. Q3. No—because this isn't a bug in the fsl_sai driver, but rather a resource ownership configuration issue. Q4.M7 SDK BOARD_RdcInit() — The most crucial step: Removes the M7 (DID1) allocation for SAI3/SDMA3/I2C3. Remove the allocations of RDC_PDAP_SAI3, RDC_MDA_SDMA3*, RDC_PDAP_SDMA3, and RDC_PDAP_I2C3 to DID1, keeping these resources accessible to A53. B.R Re: i.MX8MP SError. remote proc starts M7 core and arecord plughw:wm8962audio,0 Hi @pengyong_zhang  Thank you very much for your guidance. Following your advice, I updated the RDC configurations to assign SDMA3 to Domain 0 (A53/Linux) and shared SAI3, I2C3, and SDMA3 permissions between Domain 0 and Domain 1. Here is the diff of the RDC changes I applied: -RDC_MDA RDC_MDA_SDMA3p DID1 0x0 0x0 +RDC_MDA RDC_MDA_SDMA3p DID0 0x0 0x0 -RDC_MDA RDC_MDA_SDMA3b DID1 0x0 0x0 +RDC_MDA RDC_MDA_SDMA3b DID0 0x0 0x0 -RDC_MDA RDC_MDA_SDMA3_SPBA2 DID1 0x0 0x0 +RDC_MDA RDC_MDA_SDMA3_SPBA2 DID0 0x0 0x0 -RDC_PDAP RDC_PDAP_SAI3 PDAP_D1_ACCESS 0x0 0x0 +RDC_PDAP RDC_PDAP_SAI3 PDAP_D0D1_ACCESS 0x0 0x0 -RDC_PDAP RDC_PDAP_SDMA3 PDAP_D1_ACCESS 0x0 0x0 +RDC_PDAP RDC_PDAP_SDMA3 PDAP_D0D1_ACCESS 0x0 0x0 -RDC_PDAP RDC_PDAP_I2C3 PDAP_D1_ACCESS 0x0 0x0 +RDC_PDAP RDC_PDAP_I2C3 PDAP_D0D1_ACCESS 0x0 0x0 After applying these changes, arecord works on Linux without triggering any SError, even while the M7 core is running its RTOS firmware. Thanks again for your help!
記事全体を表示
S32K3 STANDBY + FIRC + Watchdog Hello, I am trying to implement standby mode for the S32K3 series (K312) following the examples provided in the community posts by NXP. My project uses an external clock source during regular operation and configures the watchdog timer. It is my understanding from the documentation/examples that before entering STANDBY mode I must switch to using the FIRC. If I switch to FIRC before entering STANDBY, the watchdog timer triggers, resetting the MCU. Is this expected behaviour? Additionally, if I disable the watchdog, the MCU does go into a low-power state, but will not not reset from a wakeup source. Meanwhile, if I directly enter STANDBY without switching to FIRC, the watchdog does not trigger a reset and the MCU goes into a low-power state and will reset from a wakeup source, as one would expect from STANDBY. Evidently, it seems at first glance that approach 2 (not switching to FIRC) works, but I would like to clarify as I am witnessing peculiar behaviour with pad keeping. If I toggle a pad high before entering STANDBY(approach 2), regardless of whether pad keeping is enabled or disabled for the pad, it remains high after the MCU has entered STANDBY. This has me questioning if the MCU is truly entering STANDBY, or is in some intermediary state. I realize this post is rather vague - do let me know what additional context I can provide. With regards, Hareesh Re: S32K3 STANDBY + FIRC + Watchdog Hello @Hareesh_S, Firstly, before entering Standby, the system clock source must be changed to FIRC at 48 MHz because PLLDIG is not available in Standby mode. If this sequence is not followed, this may result in unexpected/undefined clock behavior.  If I switch to FIRC before entering STANDBY, the watchdog timer triggers, resetting the MCU. Is this expected behaviour? Additionally, if I disable the watchdog, the MCU does go into a low-power state, but will not not reset from a wakeup source. By default, POR_WDG is enabled for standby entry/exit sequence monitoring for stuck scenarios: Julin_AragnM_0-1785518283148.png Does this behavior happen with the provided examples in community? Are you using RTD APIs to change clock source?  S32K3 Low Power Management AN and demos Example S32K312 STANDBY wake up using CAN-0-RX and GPIO Switch DS3.5 RTD300 [RTD600 IP] S32K312EVB-Q172 Standby RAM GPIO Wake-up If I toggle a pad high before entering STANDBY(approach 2), regardless of whether pad keeping is enabled or disabled for the pad, it remains high after the MCU has entered STANDBY. This has me questioning if the MCU is truly entering STANDBY, or is in some intermediary state. 1. All pins will retain its last set states in run mode during standby mode. 2. All pins will be placed to its default states after reset event by default. PadKeeping configuration affects pin state after Standby exit sequence, in between K3's wake-up reset, and user's port initialization, in which pins may enter an uncontrollable state: Julin_AragnM_2-1785519093000.png Best regards, Julián Re: S32K3 STANDBY + FIRC + Watchdog Hello @Julián_AragónM , Apologies for my delayed response. Regarding the pad keeping behaviour - it seems I had misunderstood the intended functionality of padkeeping. I appreciate you clarifying the same. Regarding STANDBY entry - This behaviour is not replicable for the unmodified community examples. The sequence works as expected with the community examples. Additionally, I can now confirm that when switching to FIRC in my project, the MCU hardfaults, and that is why the watchdog triggers a reset. I have managed to replicate this behaviour in a blank project, but cannot figure out what the root cause is. I am attaching the project, could you please check the same and let me know what I am missing? With regards, Hareesh S Re: S32K3 STANDBY + FIRC + Watchdog Hello @Hareesh_S, I'm glad PadKeeping functionality has been cleared up. Regarding your project, after calling Clock_Ip_Init(), I can see a hardfault at Clock_Ip_SetRtcRtccClksel_TrustedCall(). After enabling PRTN1_COFB1_CLKEN[REQ34], I can change clock source through Clock_Ip_Init() API as expected.  Can you try this fix in your project?  Julin_AragnM_0-1786382290784.png Julin_AragnM_1-1786382522241.png Julin_AragnM_2-1786382602253.png Best regards, Julián Re: S32K3 STANDBY + FIRC + Watchdog Hello @Julián_AragónM  After enabling the RTC module/peripheral in the RUN domain switching to the FIRC works as expected and does not trigger a hardfault. I was not expecting RTC to be enabled mandatorily, but nevertheless, much thanks for the quick resolution!
記事全体を表示
UWB 单信标 + AoA 用于门口内外检测的建议 我正在构建一个壁挂式单锚定 UWB 系统(用于门口出口检测),需要使用到达角 (AoA) 来确定标签是在门口内还是门口外——包括已经打开的门,所以我不能使用门接触传感器进行门禁控制。 背景:我当时正在使用 Qorvo QM33120W/DW3000(2 天线 PDoA),遇到了一堵坚硬的建筑墙;由于锚点安装在约 7 英尺高的地方,并且垂直向下,即使在信号清晰、强劲的情况下,从它下面走动/绕行也会产生错误的“外部”角度承诺。 我的计划是让 UWB 天线直接朝下朝向地面,这样我就可以捕获正角度和负角度(内部和外部)的信号,以确定标签何时从内部移动到外部(出口检测)。 目前使用 Qorvo 设备时,如果我将标签保持最佳的直线方向/天线朝上,一切正常,但当移动/旋转标签(DW3000)时,即使站在同一个位置,我也开始看到不同的 AoA 值。 标志惯例问题:我期望采用一致的惯例——在内部时为正角,一旦标签越过边界进入外部,则为负角。实际上,即使我明确地还在门内,我也看到了正角度和负角度,这与标签以随机方向/速度旋转和移动有关——与实际穿过门口无关。这是我在决定购买新硬件之前,试图针对的具体症状进行设计。 我现在正在评估是否要改用恩智浦半导体(NXP)的芯片,希望听听大家的意见: Qorvo 2D AoA 板使用射频开关来捕获两个天线之间的 UWB PDoA。换用NXP SR150双接收链能否解决我的迎角跳动问题? 对于一个安装在头顶的锚点,其下方的标签正在穿过门口移动,SR150 的 2D/软件辅助 3 天线 3D AoA 模式是否足以解决前后模糊性,还是真的需要 SR250 的 3 个同步 RX 链才能获得真正的第二基线? 针对这种自上而下的顶部使用场景,有什么推荐的天线几何形状/安装方向吗? 在像这样容易产生歧义的几何结构中,SR150 的天线切换第三天线模式与 SR250 相比,有哪些实际应用经验? 谢谢。 kamaln16_0-1785454764324.png Re: UWB Single beacon + AoA for doorway inside/outside detection advice 你好, 希望你一切都好。对于使用自由旋转标签进行内外门检测的单个顶置式锚点, Trimension SR250是合适的平台,也是我们推荐的用于物联网和工业锚点设计的 UWB 产品。 提出此建议的核心原因是硬件架构。SR250 集成了 3 个同步接收路径,可实现一次 3D 迎角测量,无需外部射频开关,即可从单个测距帧中同时提供方位角和仰角。 SR250 还具备一些对这种使用场景非常有价值的额外功能: 支持360°迎角,最多可连接9根天线进行天线分集连接 用于存在检测的片上超宽带雷达(OCPD)是基于测距的穿越检测的有效补充层 兼容 FiRa 4.0 和 Aliro 1.0,确保与更广泛的 UWB 生态系统互操作性 从哪里开始 开发套件: SR250 开发板,兼容 Arduino,集成 PCB 天线,即插即用,提供测距、迎角和雷达演示功能。 软件:适用于 Zephyr OS 的 SR250 UWBIOT 合作伙伴模块和套件:TrueSense(ETNA TS 250 开发套件)、MobileKnowledge(MK UWB 套件移动版 2.0)、Amotech(SR250 集成 3D 天线模块),均可通过NXP 合作伙伴市场获取。 希望这能帮到您。 顺祝商祺! 里卡多 Re: UWB Single beacon + AoA for doorway inside/outside detection advice 谢谢Ricardo,感谢您的详细解答。 更新:我已经订购了 Murata Type2BP (SR150) 开发板和 NXP SR250UWBSHIELD 开发板。很遗憾,SR250UWBSHIELD 在我这边显示需要 14 周才能到货,所以在此期间我将开始对 SR150 进行测试,等 SR250 到货后再进行测试。 在等待期间,我想问几个后续问题: 1. SR150 与 SR250 在我特定应用中的比较:鉴于我只需要方位角(内/外),不需要仰角,除了架构差异(真正的 3 个同时接收链路 vs. SR150 的 2 个原生链路 + 可切换的第 3 个天线)之外,从 SR150 升级到 SR250 究竟有什么好处?对于单轴应用场景而言,精度/稳定性提升是否足够显著,值得等待?或者,一旦我解决了安装/多路径缓解问题,SR150 本身就能满足我的需求吗? 2. 射频切换和标签旋转:我正在尝试找出 Qorvo 硬件上一个具体症状的根本原因,如果我站在完全相同的位置,只是在 X 平面上旋转标签(位置完全没有变化),AoA 值会明显跳动,甚至看起来极性会反转。Qorvo 的 2D AoA 使用射频开关对两个天线进行时分复用,而不是同时对它们进行采样。您认为开关架构是造成这种旋转相关不稳定性的一个可能因素吗?还是说这更可能与其他因素有关(例如旋转时的标签辐射模式/偏振敏感性、多径效应等)?我正在尝试了解 SR150/SR250 的同步 RX 采样是否能够解决这个特定的症状,或者这是否是一个与芯片无关的独立问题,需要我去解决。 3. 2D 与 3D 迎角在我的使用场景中的区别:由于我只需要知道方位角(内/外),而仰角对我的应用来说没有意义,那么运行完整的 3D 迎角是否能提高精度或可靠性,或者我是否最好只配置方位角而忽略仰角?我特别想知道,即使我不使用高度来实际判断室内/室外,高度测量是否有助于区分反射/非视距信号和有效信号。 4. 功耗,2D 与 3D:这将是一个电池供电的装置。SR250 上只运行 2D 模式和运行全 3D 模式,电流消耗会有明显差异吗?因为无论哪种方式,它都有 3 个同时运行的接收链。或者说,无论我在软件中使用哪些轴,只要所有 3 个轴都处于活动状态,功耗就基本固定了吗? 5. 多径缓解措施(针对我的特定安装):信标将安装在门口上方的墙壁上,附近有一扇玻璃门,天花板距离设备大约 5 英尺。我发现我目前的 Qorvo 硬件似乎存在反射驱动的角度不稳定现象(与标签旋转有关,在天花板较高的房间里更严重,玻璃门关闭时更严重)。是否有推荐的安装方法、天线波束宽度/方向图选择,或者固件端滤波(FOM/NLoS阈值)专门用于抑制玻璃和相邻墙壁的近场反射?或者NXP SR150或SR250是否有任何功能可以抑制这个问题? 6. 基于雷达的运动门控以节省电池电量:我希望将 SR250 的片上雷达 (OCPD) 纯粹用作低功耗唤醒触发信号:保持雷达模式,仅在检测到运动时才启动全测距/AoA。如果将锚点安装在约 2 米高的门口上方,天线垂直向下,那么在设备正下方,我应该预期大致有多少运动检测范围/覆盖范围?试图根据门洞面积确定雷达的有效“尾流区”大小。我想检测人走向和远离门口时的运动情况。 再次感谢你的帮助。
記事全体を表示
Originality Signature by ntag424 Hello: Our company has signed a confidentiality agreement, but we are unsure how to implement ECDSA verification on an embedded hardware platform using the natg424 uid, public key, and the 56-byte signature obtained from Read_Sig. The documentation for AN11350 does not provide detailed steps for implementing ECDSA verification (secp224r1). Could you please tell me what resources I need to apply for to achieve this? Thank you. Re: ntag424的Originality Signature Hello @qinzhi Hope you are doing well. My apologies, the Application Note that is used as reference for NTAG Signature Validation (AN11350) is intended for other NTAG products holding 32-byte signature and different curves. Available procedure for asymmetric signature verification is described in NTAG 424 DNA and NTAG 424 DNA TagTamper features and hints, Section 7.2. However, there is no information specific to ECDSA verification as this procedure is done outside the card. I apologize again for the inconvenience. Regards, Eduardo.
記事全体を表示
CRANK、mpc5775eによるCPSのキャプチャ こんにちは、 私はNXP eTPUのCRANK機能を36-2クランクホイールで使用しています。CPS信号は、回転数(加速プロファイル)の増加に伴って生成されます。CRANKパラメータ(gap_ratio、win_ratio_normal、win_ratio_across_gap、win_ratio_after_gap、win_ratio_after_timeout)は、ファンクションセレクタに付属するExcelシートを使って計算されます。 エンジンの位置がFS_ETPU_ENG_POS_PRE_FULL_SYNCに達したら、TCR2を同期するためにfs_etpu_crank_set_sync()を一度呼びます。呼び出しの前後でTCR2の値を確認することで、同期が正しく適用されていることを確認しました。値は期待どおりに変化しています。 RPMを計算するために、FS_ETPU_CRANK_TOOTH_AFTER_GAPからCRANK状態が変化した後、fs_etpu_crank_copy_tooth_period_log()を使用して歯周期ログをコピーし、平均歯周期を計算してからRPMを計算します。最初の回転数(RPM)の値は正しく計算されています。 しかし、1回か数回転すると、CRANK機能がFS_ETPU_CRANK_ERR_TIMEOUTとFS_ETPU_CRANK_ERR_STALLを報告します。これらのエラーが発生すると同期が失われ、回転数を計算できなくなります。 混乱するのは、デバッガをリセットして同じCPS信号と設定で再度アプリケーションを実行すると、正常に動作し続けてRPM値を長期間記録できる場合もあれば、エラーがほぼ即座に現れることもあります。入力信号と構成は変更されていないのに、なぜ動作が矛盾するのか理解できません。 これはウィンドウ比率のパラメータに関連しているのでしょうか?もしSOなら、加速するクランク信号に対してどのパラメータを最初に調整すればよいでしょうか(win_ratio_normal、win_ratio_after_timeout、gap_ratioなど)。急速に加速する信号に対して、これらのパラメータを調整するための推奨手順はありますか? よろしくお願いします! Re: Capturing CPS with CRANK, mpc5775e こんにちは、 現在のところ、最も可能性の高い原因は、適用されたアクセラレーションプロファイルに対してウィンドウの余白が狭すぎるか、デバッガーのリセット後に異なる開始条件が生じる不完全な再初期化のいずれかであると考えられます。 現時点では、根本原因が確定したとは言えません。提供された情報に基づくと、CRANK機能は初期段階で同期を達成し、有効なRPM値を生成するため、基本構成は正常に機能していることがわかります。この問題は、関数がタイミングの許容範囲を失い、最終的にFS_ETPU_CRANK_ERR_TIMEOUTとFS_ETPU_CRANK_ERR_STALLを報告するときに後から発生します。 根本原因を効率的に絞り込むために、まずは2つの簡単な実験から始めます。 関連するウィンドウ比率を増やして、タイムアウト/停止状態が遅延するか解消されるかを確認してください。 加速度勾配を小さくして試験を繰り返し、元のプロファイルとの挙動を比較してください。 ウィンドウ幅を広げたり、加速ランプを緩やかにしたりすることで問題が改善される場合は、根本的な設定の問題ではなく、タイミングマージンに関連している可能性が高いと考えられます。 よろしくお願いいたします。 ピーター
記事全体を表示
ntag424によるオリジナリティシグネチャー こんにちは: 弊社は機密保持契約を締結済みですが、natg424のUID、公開鍵、およびRead_Sigから取得した56バイトの署名を使用して、組み込みハードウェアプラットフォーム上でECDSA検証を実装する方法が不明です。AN11350のドキュメントには、ECDSA検証(secp224r1)の実装に関する詳細な手順が記載されていません。この目的を達成するために必要なリソースを教えていただけますでしょうか。よろしくお願いいたします。 Re: ntag424的Originality Signature こんにちは@qinzhi あなたの調子が良いといいのですが。 申し訳ありませんが、NTAG署名検証(AN11350)の参照として使われているアプリケーションノートは、32バイト署名や異なる曲線を持つ他のNTAG製品向けに意図されています。 非対称署名検証の利用可能な手順は 、NTAG 424 DNAおよびNTAG 424 DNA TagTamperの特徴とヒント、セクション7.2に記載されています。ただし、ECDSA認証に関する具体的な情報はありません。この手続きはカードとは別に行われるためです。 ご迷惑をおかけして、重ねてお詫び申し上げます。 よろしくお願いいたします。 エドゥアルド。
記事全体を表示
使用 NXP 密钥对 i.MX93 进行安全调试 SPSDK 中的 nxpdebugmbox 工具的当前版本有一个参数 --nxp-keys,其描述为“使用 ROM NXP 密钥进行身份验证”。 这是否意味着恩智浦可以解锁所有设备上的安全调试功能? 如果可以,是否有熔丝将安全调试功能限制在 OEM SRK 密钥范围内? 安全 Re: Secure debug on i.MX93 with NXP keys 但是,如果您控制了 ELE,您就可以访问 DDR 内存,并可以监测 OEM 功能域从 ELE 功能域请求的所有加密操作的输入和输出。您可以解密所有 ELE 数据块,从而访问设备上存储的所有秘密数据。除非阻止写入 DDR 内存,否则您可以将代码注入到 OEM 功能域中。 Re: Secure debug on i.MX93 with NXP keys 你好, 不,NXP 无法使用 --nxp-keys 解锁 OEM 设备上的安全调试。 --nxp-keys 标志仅验证 NXP/ELE 内部调试功能域(使用 ROM 中嵌入的 NXP 密钥)。OEM SoC 调试功能域(Cortex-A55、M33 等)是完全独立的,只能使用 OEM 自己的 SRK 密钥解锁。 无需额外熔丝来强制执行此操作,这是架构设计的一部分。一旦设备进入 OEM_CLOSED 生命周期并熔丝化了 OEM SRK 哈希,ELE 硬件就会强制 NXP 密钥对 OEM 调试功能域没有任何权限。 此致敬礼/Saludos, 阿尔多。
記事全体を表示
EZH-V 在 IMXRT700 上的应用案例 NXP团队,大家好! 根据 IMXRT700 的规格说明,它的架构分为媒体、计算和感知功能域三个功能域,芯片上的每个核心都需要自己独立的镜像才能运行。但似乎只有极少数文献记载了 EZH-V 内核的使用情况。 我已阅读应用笔记 AN14614、AN14618 和 AN14654,但关于此核心及其在 RT700 图形处理中的作用的信息仍然很少。据说它是用来实现智能DMA引擎的,但在其他MCX系列MCU中并没有提到这个内核的存在,而且Arm CM33内核可以通过mcuxpresso sdk提供的API直接使用智能DMA。 我现在非常困惑,我还能直接在 iMXRT700 上使用 smartDMA 吗?还是必须按照 AN14614 的说明,通过 LLVM 为 EZH-V 版本镜像?这似乎相当违反直觉,因为 IPC 通信本应由 Cpu0 直接驱动,却不得不求助于 RPMsg。 除此之外,我还没有看到 NXP 提供任何实际的演示或用例来明确地使用 EZH-V 内核。我还查看了一些可用的源头文件,发现其中只提供了一些非常直观的基本操作。请问EZH-V的用途是什么? Re: EZH-V use case for IMXRT700 好的,快速更新一下,在查看了 Zephyr 主线中的 smartDMA 驱动程序后,我现在明白情况了。 smartDMA 一直以来都被设计成一个独立组网 (SA)的子系统,拥有自己的内核,有可能独立运行固件,但从未真正作为完全独立组网 (SA)的 RISC-V 内核推出。 TomC818_0-1785476896221.png 在当前现有的示例中,smartDMA 从未真正接触过自定义固件安装路径,而只是用作一个略微特殊的 DMA IP。 所以现在的问题应该是,我是否还能以旧的方式使用 smartDMA;直接通过 CM33 调用,而不是进行复杂的 IPC 设置。截至撰写本文时,smartDMA IP 尚未作为官方维护的 mimxrt700_evk 支持的 IP 公开。 TomC818_1-1785477330180.png Re: EZH-V use case for IMXRT700 嗨@mayliu1 , 感谢您的快速回复,所以您的意思是 smartDMA 不再与 CM33 内核耦合,因此必须通过 EZH-V 内核使用吗? 在恩智浦的其他MCU系列(例如MCX)中,智能DMA与CM33耦合,可以通过API直接调用。应用笔记AN14172和AN14916记录了此类用例,并且这些用例不涉及构建RISC-V内核的独立组网 \(SA\)镜像。 TomC818_0-1785417939531.png 那么i.MXRT700目前的架构是怎样的呢?所有关于EZH-V的文档都非常含糊不清,而且我目前还没有找到任何全面介绍EZH-V使用的演示或指南。 NXP 是否修改了 smartDMA 的架构,使其不再是 CM33 核心系统的一部分,而是归入 RISC-V 配套核心?我还能通过 CM33 直接调用 smartDMA 吗? Re: EZH-V use case for IMXRT700 嗨@TomC818 , 非常感谢您对我们产品的关注以及对我们社区的使用。 根据 AN14614 和 i.MX RT700 参考手册,我的理解是 i.MX RT700 上的 SmartDMA 功能是通过 EZH-V RISC-V 内核实现的,而不是作为传统的 DMA 外设(如 eDMA)。 总的来说,eDMA 仍然是标准内存传输操作的首选解决方案,并且可以通过 CM33 内核直接配置。然而,与 SmartDMA 相关的处理,例如某些图形/数据后处理或数据格式转换任务,通常是由在 EZH-V 内核上运行的固件实现的。 根据 AN14614,CPU0 负责加载和启动 EZH-V 固件,之后实际处理由 EZH-V 执行。从这个角度来看,EZH-V 的行为更像是一个可编程协处理器,而不是传统的 DMA 引擎。 因此,RT700 上的 SmartDMA 最好被视为在 EZH-V 内核上运行的可编程处理引擎,而不是仅由 CM33 直接驱动的传统 DMA 外设。 希望对你有帮助 顺祝商祺! 5月 Re: EZH-V use case for IMXRT700 嗯……如果恩智浦实际上并没有准备或计划支持“借助 EZH-V,Cortex-M33 内核可以腾出空间执行其他任务。在 EZH-V 执行分配的任务时,CM33 内核可以并行执行其他任务。 ”根据参考手册所述,考虑到 RT700 的文档和示例仍然非常不完善且杂乱无章,我认为我将寻求 ST 或 Infineon 以外的其他选择。对于这款MCU的大多数市场化独特功能,支持非常有限,寥寥无几。对于如此复杂且异构的架构,如此少的例子和指南简直是无稽之谈。 Re: EZH-V use case for IMXRT700 在 i.MX RT700 上,SmartDMA 的公开方式与由 CM33 直接控制的传统独立 DMA 外设不同。 SmartDMA 功能是通过 EZH-V 引擎提供的,因此典型的使用模型是 CM33 加载并启动 EZH-V 固件,然后根据需要与其协调。 mayliu1_1-1785830645435.png
記事全体を表示
EZH-V use case for IMXRT700 Hi team NXP! From the spec of IMXRT700 it was said to be architected in the 3 domain of media, compute and sense domain, which each of the cores on chip would require their own separate image to run. But it seems that there are only very few documented usage of the EZH-V core. I have read the application notes AN14614, AN14618 and AN14654, but there are still very few information regarding this core and it roles in graphical processing for RT700. It was said that it is used to implement the smartDMA engine, but in other MCX family MCU there are no mentioning of the existence of this core and the smartDMA can be directly used by the Arm CM33 core via the mcuxpresso sdk provided APIs. So now I am extremely confused, can I still directly use the smartDMA on iMXRT700 directly or must I build the image for the EZH-V via LLVM as per AN14614 instruction? This seems quite counterintuitive though having to resort to RPMsg for IPC communication as supposed to be directly driven by the Cpu0. On top of this, I am not aware of any actual demo or use case that has been provided by NXP that explicitly utilized this EZH-V core. I have also review the some of the source headers available, and only some very intuitive basic operations have been provided. May I know what is the usage of the EZH-V? Re: EZH-V use case for IMXRT700 okay quick update, after taking a look of the smartDMA driver in the mainline Zephyr now I understand the situation. The smartDMA has always been/planned as a standalone subsystem with its own core that could have the potential to run firmware on its own, but never have been actually presented as a fully standalone RISC-V core. TomC818_0-1785476896221.png In the current existing example, the smartDMA has never really touched the custom firmware installation path and only used as a slightly special DMA IP. So now the question should pivot to if I could still use the smartDMA in the old fashion; directly invoked via the CM33 instead of doing the complex IPC setup, as of time of writing, the smartDMA IP is yet to be exposed as a supported IP of the official maintained mimxrt700_evk. TomC818_1-1785477330180.png Re: EZH-V use case for IMXRT700 Hi @mayliu1 , Thanks for the quick reply, so you mean the smartDMA is no longer coupled to the CM33 core and therefore must be used via the EZH-V core? In NXP's other MCU family like MCX the smartDMA is coupled to the CM33 and can be directly invoked via APIs, there are application notes documenting such use cases AN14172, AN14916, and they do not involve building the standalone image for the RISC-V core.  TomC818_0-1785417939531.png So what is the current architecture on the i.MXRT700? All documents about EZH-V are very ambiguous and I am not aware of any existing demo or guides that have thoroughly covered the usage of EZH-V.  Has NXP revised the architecture of smartDMA so it is no longer part of the core CM33 system and grouped to the RISC-V companion core instead? Can I still invoke the smartDMA directly via the CM33? Re: EZH-V use case for IMXRT700 Hi @TomC818 , Thank you so much for your interest in our products and for using our community. According to AN14614 and the i.MX RT700 Reference Manual, my understanding is that the SmartDMA functionality on the i.MX RT700 is implemented through the EZH-V RISC-V core rather than as a conventional DMA peripheral such as eDMA. In general, eDMA is still the preferred solution for standard memory transfer operations and can be configured directly by the CM33 core. However, SmartDMA-related processing, such as certain graphics/data post-processing or data format conversion tasks, is typically implemented by firmware running on the EZH-V core. Based on AN14614, CPU0 is responsible for loading and booting the EZH-V firmware, after which the actual processing is performed by EZH-V. From this perspective, EZH-V behaves more like a programmable coprocessor than a traditional DMA engine. Therefore, SmartDMA on RT700 is better viewed as a programmable processing engine running on the EZH-V core, rather than a traditional DMA peripheral directly driven by CM33 alone. Wish it helps you Best Regards May Re: EZH-V use case for IMXRT700 hey umm... if NXP didn't actually prepare or have any planned support for "With the assistance of the EZH-V, the Cortex-M33 cores can be freed to perform other tasks. While the EZH-V is executing the assigned task, the CM33 cores can execute other tasks in parallel." as per the reference manual described, I think I will be pursuiting a different option from ST or Infineon, considering the fact that RT700 documentations and examples are still extremely unpolished and all over the place. Support for most of the marketted unqiue features of this MCU are very sparse and few between. With such a the complex heterogeneous architecture, such little examples and guides are just abyssal. Re: EZH-V use case for IMXRT700 On i.MX RT700, SmartDMA is not exposed in the same way as a conventional standalone DMA peripheral directly controlled by the CM33. The SmartDMA-style capability is provided through the EZH-V engine, so the typical usage model is for the CM33 to load and start the EZH-V firmware, then coordinate with it as needed. mayliu1_1-1785830645435.png
記事全体を表示
Capturing CPS with CRANK, mpc5775e Hi, I am using the NXP eTPU CRANK function with a 36-2 crank wheel. The CPS signal is generated with an increasing RPM (acceleration profile). The CRANK parameters (gap_ratio, win_ratio_normal, win_ratio_across_gap, win_ratio_after_gap, and win_ratio_after_timeout) are calculated using the Excel sheet provided with the Function Selector. After the engine position reaches FS_ETPU_ENG_POS_PRE_FULL_SYNC, I call fs_etpu_crank_set_sync() once to synchronize TCR2. I verified that synchronization is applied correctly by checking the TCR2 value before and after the call; it changes by the expected amount. To calculate RPM, after the CRANK state changes from FS_ETPU_CRANK_TOOTH_AFTER_GAP, I copy the tooth period log using fs_etpu_crank_copy_tooth_period_log(), calculate the average tooth period, and then calculate RPM. The first RPM value is calculated correctly. However, after one or a few revolutions, the CRANK function reports FS_ETPU_CRANK_ERR_TIMEOUT and FS_ETPU_CRANK_ERR_STALL. Once these errors occur, synchronization is lost and I can no longer calculate RPM. The confusing part is that if I reset the debugger and run the application again with exactly the same CPS signal and configuration, sometimes it continues running correctly and I can capture RPM values for a much longer time, while other times the errors appear almost immediately. Because the input signal and configuration are unchanged, I do not understand why the behavior is inconsistent. Could this be related to the window ratio parameters? If so, which parameter should I adjust first for an accelerating crank signal (win_ratio_normal, win_ratio_after_timeout, gap_ratio, etc.)? Is there a recommended procedure for tuning these parameters for rapidly accelerating signals? Thanks! Re: Capturing CPS with CRANK, mpc5775e Hello, My current assessment is that the most likely causes are either window margins that are too tight for the applied acceleration profile, or an incomplete reinitialization that results in different starting conditions after a debugger reset. At this point, I would not consider the root cause confirmed. Based on the information provided, the CRANK function initially achieves synchronization and produces valid RPM values, indicating that the basic configuration is functional. The issue appears later, when the function loses timing acceptance and eventually reports FS_ETPU_CRANK_ERR_TIMEOUT and FS_ETPU_CRANK_ERR_STALL. To efficiently narrow down the root cause, I would start with two simple experiments: Increase the relevant window ratios and observe whether the timeout/stall condition is delayed or eliminated. Repeat the test with a reduced acceleration slope and compare the behavior to the original profile. If the issue improves with wider windows or a slower acceleration ramp, this would strongly suggest that the failure is related to timing margins rather than a fundamental configuration issue. Best regards, Peter
記事全体を表示
NXPキーを使用したi.MX93のセキュアデバッグ SPSDKに含まれるnxpdebugmboxツールの現行バージョンには、「ROM NXPキーを使用して認証する」と説明されているパラメータ--nxp-keysがあります。 これはNXPがすべてのデバイスでセキュアデバッグをアンロックできるということでしょうか? はいの場合、OEM SRKキーへのセキュアデバッグを制限するヒューズはありますか? Security Re: Secure debug on i.MX93 with NXP keys しかし、ELEを制御できればDDRメモリにアクセスでき、OEMドメインがELEドメインから要求するすべての暗号操作の入出力を監視できます。すべてのELEブロブをCAN復号できるため、デバイスに保存されているすべての秘密データにアクセスできます。DDRメモリへの書き込みが禁止されていなければ、OEMドメインにコードを注入することも可能です。 Re: Secure debug on i.MX93 with NXP keys こんにちは、 いいえ、NXPは--nxp-keysでOEMデバイスでセキュアデバッグをアンロックできません。 --nxp-keysフラグは、NXP/ELE内部デバッグドメイン(ROMに組み込まれたNXPキーを使用)のみを認証します。OEMのSoCデバッグドメイン(Cortex-A55、M33など)は完全に別個で、OEM自身のSRKキーでしかアンロックできません。 これを強化するための追加のヒューズは必要ありません。これは設計上、建築的な設計です。デバイスがOEM_CLOSEDライフサイクルに入り、OEM SRKハッシュが統合されると、ELEハードウェアはNXPキーがOEMデバッグドメインに対して一切の権限を持たないことを強制します。 よろしくお願いいたします。 アルド。
記事全体を表示
使用 CRANK 捕获 CPS,mpc5775e 您好, 我正在使用 NXP eTPU CRANK 功能,搭配 36-2 曲柄轮。CPS 信号随着 RPM 的增加而产生(加速我的)。使用函数选择器提供的 Excel 表格计算 CRANK 参数(gap_ratio、win_ratio_normal、win_ratio_across_gap、win_ratio_after_gap 和 win_ratio_after_timeout)。 当发动机位置达到 FS_ETPU_ENG_POS_PRE_FULL_SYNC 时,我调用 fs_etpu_crank_set_sync() 一次来同步 TCR2。我通过检查调用前后的 TCR2 值来验证同步是否正确应用;它的变化量符合预期。 为了计算转速,在曲轴状态从 FS_ETPU_CRANK_TOOTH_AFTER_GAP 改变后,我使用 fs_etpu_crank_copy_tooth_period_log() 复制齿周期日志,计算平均齿周期,然后计算转速。第一个转速值计算正确。 然而,在转动一两圈后,CRANK 函数会报告 FS_ETPU_CRANK_ERR_TIMEOUT 和 FS_ETPU_CRANK_ERR_STALL 错误。一旦出现这些错误,同步就会丢失,我将无法再计算转速。 令人困惑的是,如果我 RESET 调试器并使用完全相同的 CPS 信号和配置再次运行应用程序,有时它会继续正确运行,我可以捕获 RPM 值更长时间,而有时错误几乎立即出现。由于输入信号和配置均未改变,我不明白为什么会出现不一致的行为。 这是否与窗口比例参数有关?如果是这样,对于加速曲轴信号,我应该首先调整哪个参数(win_ratio_normal、win_ratio_after_timeout、gap_ratio 等)?对于快速加速的信号,是否有推荐的参数调整方法? 谢谢您! Re: Capturing CPS with CRANK, mpc5775e 你好, 我目前的评估是,最可能的原因要么是窗口边距对于所应用的加速我的来说太窄,要么是不完整的重新初始化,导致调试器RESET后起始条件不同。 目前,我认为根本原因尚未得到确认。根据提供的信息,CRANK 功能最初实现了同步并产生了有效的 RPM 值,表明基本配置是有效的。问题随后出现,当函数失去定时接受能力时,最终会报告 FS_ETPU_CRANK_ERR_TIMEOUT 和 FS_ETPU_CRANK_ERR_STALL。 为了有效地缩小根本原因的范围,我会先做两个简单的实验: 增加相关窗口比率,观察超时/停滞情况是否被延迟或消除。 以减小的加速度斜率重复测试,并将结果与原始我的进行比较。 如果通过扩大窗口或减缓加速斜坡来改善问题,则强烈表明故障与时间裕度有关,而不是与基本的配置问题有关。 顺祝商祺! Peter
記事全体を表示
FS6500 IO2_3/FCCU故障在调试模式和正常模式下的行为差异 你好!   FS6500 的 IO2_3 引脚连接到 MCU FCCU。   在调试模式下,单个 FCCU 故障触发会导致立即复位。   在正常运行模式下,单个 FCCU 故障触发信号会导致 SBC 进入深度故障保护 (DFS) 模式。 请问这种现象是否属于预期行为? 我的理解是:IO2_3故障将增加故障错误计数器。只有当故障错误计数器超过配置的阈值(3 或 6)时,才应执行功能安全响应(RSTB 脉冲、FS0B 断言或 DFS 转换)。 FS6500 DEVKIT-MPC5744P Re: Behaviour discrepancy of FS6500 IO2_3/FCCU fault between Debug mode and Normal mode 嗨,彼得, 非常感谢您的解释。   我还有一个问题。   我仔细查阅了 FS6500 数据手册和 RM,但几乎没有文档介绍由 IO2_3 FCCU 故障触发信号所触发的功能安全机制策略以及相应的 IMPACT 寄存器配置。 之前我以为 IO2_3 故障会使故障错误计数器递增,功能安全措施会在计数器达到阈值后生效。根据您的回复,IO2/IO3故障会直接触发信号安全响应。   请问手册的哪一章介绍了IO2/IO3直接功能安全反应的配置? 顺祝商祺! Re: Behaviour discrepancy of FS6500 IO2_3/FCCU fault between Debug mode and Normal mode 你好, 如果两次测试中 SBC 的运行条件不同,则可能会出现这种现象。 请区分以下各项: 例如,MCU调试模式,即调试器连接到MPC设备,以及 FS6500 调试模式,通过 FS6500 DEBUG 引脚进入。 当 FS6500 处于调试模式时,看门狗仍在内部运行,但它不会通过置位 RESET 或故障保护引脚来影响设备操作。因此,调试期间观察到的行为可能与独立组网 \(SA\)/正常运行时的行为有所不同。此模式旨在允许进行软件调试,而无需 SBC 不断重置系统。 在正常运行中,FS6500 故障保护状态机监测已配置的功能安全输入/反应。如果 IO_2/IO_3 用于 MCU FCCU 错误输出监控,则 SBC 可以检测到 FCCU 故障,并执行配置的反应,例如根据配置断言 FS0B/RSTB。 因此,调试模式和独立组网 \(SA\)模式之间的不同行为不一定是MCU FCCU的问题。这很可能是由于 FS6500 处于调试模式,或者两种情况下 SBC 初始化/配置存在差异造成的。 故障错误计数器通常与看门狗监控和故障保护状态机处理等机制相关联。FCCU 报告的功能安全关键故障应直接发出触发信号,以触发其配置的反应,而不是累积到计数器达到阈值。 因此,观察到的即时功能安全响应行为与预期的功能安全理念是一致的。 顺祝商祺! Peter Re: Behaviour discrepancy of FS6500 IO2_3/FCCU fault between Debug mode and Normal mode 你好, 关键在于,FS6500 对 IO2/IO3 FCCU 监控的处理方式与其他大多数故障源不同。 该描述不在 FCCU 故障反应 (IMPACT) 表中,而是在 FS6500 故障保护故障管理文档中。 根据 FS6500 文档,IO_23 错误检测 (FCCU) 被列为始终递增故障错误计数器的故障源之一,并且无法配置为关闭。文档明确将其与可配置故障源区分开来。 因此,观察到的 IO2/IO3 故障行为并非完全由用于可配置故障保护反应的 IMPACT 寄存器设置所控制。IO2/IO3 FCCU 监测器是 SBC 专用的 FCCU 监视路径的一部分,由故障保护状态机处理。 需要查阅的相关章节是 FS6500 文档中的“故障计数器”章节,其中指出: IO_23 错误检测 (FCCU) 会增加故障错误计数器。 此行为不可配置。 https://docs.nxp.com/bundle/FS6500-FS4500-ASILD/page/topics/fault_error_counter.html 顺祝商祺! Peter
記事全体を表示
S32K311 RTD 5.0 - 链接器错误:.non_cacheable_bss与 .int_results 溢出和重叠 您好,NXP团队: 我正在使用以下环境开发一个S32K311项目: MCU: S32K311 IDE: S32 设计工作室 3.6.7 RTD: S32K3_RTD_5.0.0_D2408_ASR_REL_4_7_REV_0000_20241002 AUTOSAR: 4.7 问题 项目初期进展顺利。 随着项目的推进,我启用并配置了多个 RTD 驱动程序,包括 ADC、eMIOS、LCU、ICU、PIT、PORT、LPUART、LPSPI、TRGMUX、MCL 以及我的应用程序所需的其他外设。 集成这些驱动程序后,项目在链接阶段失败,并出现以下错误: .non_cacheable_bss will not fit in region 'int_sram_no_cacheable' section .int_results overlaps section .non_cacheable_bss region 'int_sram_no_cacheable' overflowed by 440 bytes collect2.exe: error: ld returned 1 exit status 存储器布局 默认链接器脚本包含以下 SRAM 区域: int_sram : ORIGIN = 0x20400000, LENGTH = 0x00003F00 int_sram_fls_rsv : ORIGIN = 0x20403F00, LENGTH = 0x00000100 int_sram_no_cacheable : ORIGIN = 0x20404000, LENGTH = 0x00003B00 int_sram_results : ORIGIN = 0x20407B00, LENGTH = 0x00000100 int_sram_shareable : ORIGIN = 0x20407C00, LENGTH = 0x00000400 链接器报告.non_cacheable_bss该部分超出分配的 int_sram_no_cacheable 区域约440 字节。 问题 在 S32K311 上启用多个 RTD 驱动程序时,这种内存使用量是否正常? 是否有推荐的方法来减小 .non_cacheable_bss 的大小? 是否建议修改链接器脚本并增加 int_sram_no_cacheable 区域?如果是这样,S32K311 的推荐内存布局是什么? 是否有任何 RTD 配置选项可以减少分配给不可缓存部分的内存? 有人在集成多个RTD外设时遇到过类似的问题吗? 任何指导或建议都将不胜感激。 谢谢! Re: S32K311 RTD 5.0 - Linker error: .non_cacheable_bss overflow and overlap with .int_results 嗨@Esakki 以下讨论帖可能对您有所帮助,因为它们讨论了类似的问题,并提供了一些有用的故障排除建议。 int_sram_no_cacheable 问题 S32K312 的 SRAM 溢出 此外,还有一份 S32K3 应用笔记,更详细地解释了链接器文件和启动代码,包括如何修改和自定义内存区域。 AN14893 :S32K3xx 链接器文件和启动代码 最后一个帖子包含了与代码优化技术相关的一些建议。 S32K3xx 如何优化 APP 代码以获得更高性能 BR,VaneB
記事全体を表示
MX8-DSI-OLED1 显示屏部件号和序列号。 大家好, 我们也计划在我们的定制板中使用 MX8-DSI-OLED1 配件。 请问能否提供一下显示屏的零件编号,以及是否有任何需要保持的电源顺序? Re: MX8-DSI-OLED1 Display part No and sequence. 你好, 您能告诉我您想了解哪方面的信息吗? MX8-DSI-OLED1A(raydium rm67199)的显示屏是支持触摸的 MIPI-DSI OLED 显示屏。以下是一些主要特点: • 5.49 英寸 FHD (1080p@60fps) AMOLED 显示屏 • 1670万色(RGB*8位)显示颜色 • 触摸屏 • 用于显示器的 4 通道 MIPI-DSI 接口 • 用于触摸和控制的 I2C 接口 另外,请注意,关于这部分内容,我们能分享的信息不多。 此致敬礼/Saludos, 阿尔多。 Re: MX8-DSI-OLED1 Display part No and sequence. 大家好, 这件事有任何进展吗? Re: MX8-DSI-OLED1 Display part No and sequence. 嗨@AldoG 我想了解这些轨道上电是否有任何需要遵循的顺序。 VDD_1V8 VEXT_3V3 VDD_5V
記事全体を表示
LS1046A カスタムボード - FlexBuildで作成されたイメージは、DTの導管方法のためのpsci: probeingにハングします。 こんにちは、 私はLS1046Aをベースにしたカスタムボードを開発しているのですが、FlexBuildで生成したDebianイメージで起動時に問題が発生しています。 まず最初のステップとして、デフォルトのLS1046AFRWY BSPを一切変更せずにビルドし、自作の基板上でテストしました。カーネル起動中に、以下の出力後にシステムが必ずハングアップします。 PSCI:DTからの導管方法のプロービング。 カーネルパニックや例外は発生せず、システムはこの時点で停止する。 以下のNXPフォーラムのThreadで非常に似た問題を説明しているのを見つけました: https://community.nxp.com/t5/Layerscape/LS1043A-RDB-Linux-Hangs-At-PSCI/td-p/750075 一時的な回避策として、以下のコマンドを使ってU-Bootから手動でLinuxを起動できます。しかし、カーネルは、ブート引数「mem=」を使用して使用可能なメモリを1982MBに制限した場合にのみ正常に起動します。この値を増やすと、カーネルが再びハングアップします(起動中の異なるタイミングで発生することもあります)。 mmc dev 0 パートUUID mmc 0:3 パートUUIDr mmc 0:1 0x81000000 イメージをロードします ロード MMC 0:1 0x90000000 FSL-LS1046A-frwy-SDK.dtb setenv bootargs "console=ttyS0,115200 earlycon=uart8250,mmio,0x21c0500 root=PARTUUID=${partuuidr} rw rootwait mem=1982M" booti 0x81000000 - 0x90000000 テスト環境: SoC: LS1046A DDR: IS43/46QR16512A (4GB DDR4) ブートメディア:SDカード BSP: FlexBuild (LSDK 25.12) FlexBuild特有の問題を除外するために、Yocto(YP 6.0 / lf-6.18.20)を使って完全に新しいBSPを作成し、同じハードウェアでテストしました。 結果は全く同じだ。カーネルは再び出力後にハングアップします。 PSCI:DTからの導管方法のプロービング。 bdinfoの出力のうち、関連する部分を以下に示します。 DRAMバンク0 開始: 0x80000000 サイズ:0x7be00000 DRAMバンク1 開始: 0x880000000 サイズ:0x80000000 LMBメモリ領域: メモリ[0] :0x80000000 - 0xfbdfffff メモリ[1] :0x880000000 - 0x8ffffffff 予約済み[0] : 0xfac154c0 - 0xfbdfffff 予約済み[1] : 0x8ffff5000 - 0x8ffffffff 同様の問題に遭遇した方はいらっしゃいますか?あるいは、次に何を調査すべきかについて何かご提案があれば教えてください。 どんなアドバイスでも大変ありがたいです。 QorIQ LS1デバイス Re: LS1046A Custom Board -image built with FlexBuild hangs at psci: probing for conduit method from こんにちは、 根本原因 — BL31メモリの衝突 LS1046Aの起動フローは以下のとおりです。 Boot ROM → BL2 (DDR Init) → BL31 (stays resident in DRAM) → U-Boot → Linux     BL31はDRAMに常駐し、すべてのSMC呼び出し(PSCI: psci_get_version 、CPUのオン/オフなど)を処理します。一般的な配置場所は、 RAMの最上位から約10MiB引いた領域付近で、サイズは最大2MiBです。   Linuxが4GBのDDRマップで起動すると、BL31のリージョンと物理的に重なるページが割り当てられます。最初の PSCI SMC 呼び出し ( psci_get_version ) が、すでに破損したメモリにジャンプし、システムはハングアップします。パニックも例外もなく、ただ沈黙するだけです。 bdinfo の出力は正確なパターンを確認しています。DDR バンク 1 は 0x8FFFFFFFF で終了し、BL31 は約 RAM_END - 10 MiB = 0x8FF600000 にあります。 DDR銀行 スタート 終了 備考 バンク0 0x80000000 0xFBDFFFFF ~1982 MiB —作業 mem= 制限 バンク1 0x880000000 0x8FFFFFFFF 2 GB 高銀行 — BL31 はここに住んでいます mem=1982M の回避策はLinuxをバンク0内に留め、BL31が存在するバンク1には一切触れません。これがまさに機能する理由です。 修正 — デバイスツリーでBL31メモリを予約する 正しい恒久的な解決策は、DTSに reserved-memory ノードを追加 し、BL31のリージョンをLinuxのメモリ割り当てでタブリングにすることです。 ステップ1:BL31がどこに積載されているかを確認する ATFビルド構成を確認してください( plat/nxp/soc-ls1046a/.../platform_def.h ) BL31_BASE と BL31_SIZE について。FRWY BSPを搭載したLSDK/lf-6.xの場合、一般的な配置は以下のとおりです。 BL31_BASE = 0x8FF80000 (top of high DDR bank minus ~512 KB to 2 MB) BL31_SIZE = max 2 MiB     実行時にU-Bootの出力やATFビルドログで BL31: v2.x... Entry point address = ... を確認することができます。 ステップ2:予約メモリノードをDTSに追加します ボードのDTSファイル( fsl-ls1046a-frwy-sdk.dts に基づく)に、以下を追加してください: / { reserved-memory { #address-cells = <2>; #size-cells = <2>; ranges; /* Reserve BL31 runtime region — adjust addresses to match your ATF build */ bl31_reserved: bl31@8ff600000 { reg = <0x8 0xff600000 0x0 0x00200000>; /* 2 MiB at RAM_END - 10 MiB */ no-map; }; }; }; dts   0x8ff600000 とサイズ 0x200000 を調整して、ATFビルドからの実際のBL31ロードアドレスに一致させてください。 ステップ3:フルメモリで再構築およびテストする 予約を追加した後、DTB を再構築し、 mem= 回避策 なしで 起動します。カーネルはその領域をスキップし、BL31はそのまま残り、PSCIは正しく機能します。   よろしくお願いします。 Re: LS1046A Custom Board -image built with FlexBuild hangs at psci: probing for conduit method from こんにちは、 提案された解決策を試してみましたが、残念ながら問題は解決しませんでした。 まず、TF-A(ATF)ビルドからBL31アドレスを確認しました。 - BL31_BASE = 0xFBE00000 - BL31_SIZE = 0x200000 (2 MiB) 次に、BL31ランタイム領域を予約するために、デバイスツリーに「reserved-memory」ノードを追加し、DTBを再構築しました。 その後、「mem=1982M」ブートパラメータなしでシステムを再度起動しました。しかし、システムは依然として同じ箇所で停止したままです。
記事全体を表示
LX2160A 上的 PCI 设备 ITS 设备 ID 你好, 我使用的是Honeycomb LX2板,它采用的是LX2160A芯片。我检查了uboot和linux代码,发现uboot中每个PCI BDF(桥接器和设备)都被分配了一个流ID,该ID被放入dtb中的msi-map文件中。 我假设 Linux 使用此流 ID 作为每个 PCI BDF 的 ITS 设备 ID,但是当我检查 Linux 代码drivers/irqchip/ irq-gic-v3-its-pci-msi.c时,ITS 特定的设备 ID 似乎只是 RID。 在我目前使用的系统中,BDF 的 ITS 设备 ID 是上游 PCI-PCI 桥的流 ID。此外,2 端口网卡上每个端口的 ITS 设备 ID 都相同。Linux 系统上也存在同样的问题吗? 请问有人能帮我确认一下Linux系统中PCI设备的ITS设备ID是如何计算的吗?以及网卡的两个端口是否应该共享同一个ITS设备ID?如果不是,那我的系统可能缺少什么呢? Re: ITS Device ID for PCI devices on LX2160A 我觉得这次讨论很有帮助。在 LX2160A 上使用 ITS 设备 ID 可能很棘手,尤其是在处理 PCI 中断路由和配置细节时。在研究类似技术主题时,我还发现了Citrus Court Resources ,它提供了组织良好的公共记录信息。感谢分享,能够看到其他使用相同硬件的人提供的实用见解总是很有帮助的。 Re: ITS Device ID for PCI devices on LX2160A 关于 LX2160A 上 PCI 设备的 ITS 设备 ID 的讨论非常有启发性,特别是对于从事中断转换和嵌入式系统工作的人来说。在查阅相关技术文档时,我还发现Bibb Court Clerk是一个获取有组织的公共信息的有用资源。感谢您分享这些见解,它们使一个复杂的话题更容易理解和进一步探讨。 Re: ITS Device ID for PCI devices on LX2160A 请另开新帖描述您的新问题。 谢谢! Re: ITS Device ID for PCI devices on LX2160A 我还有一个硬件方面的问题,希望您能帮我解决。 从调试信息来看,似乎是 PCI 到 PCI 桥接设备而不是 PCI 设备发送了消息信号中断,导致我看到了错误的 ITS 设备 ID。PCI 配置寄存器中的某些设置是否可能导致这种情况发生? 谢谢! Re: ITS Device ID for PCI devices on LX2160A 请参阅以下更新 我的理解是这样的: 1. PCIe 设备生成一条中断消息,其中包括其请求者 ID (RID)。 2. ITS 收到此消息后,使用 RID 查找相应的 StreamID。 3. ITS 然后将此信息转换为适合中断控制器的中断消息。 更具体地说, RID(由BDF组成)被ITS用于管理和转换中断。 StreamID 源自与 RID 相同的 BDF,由 SMMU 用于管理和转换 DMA 操作。 Re: ITS Device ID for PCI devices on LX2160A 请参考AE团队的以下更新。 这些问题更多地与 Linux 有关,因此客户可以在 Documentation/PCI/msi-howto.rst 中找到有关 PCI-PCI 桥接器背后的 MSI 分配的信息。 Re: ITS Device ID for PCI devices on LX2160A 谢谢你调查此事。ITS 设备 ID 与映射到 BDF 的 LUT 条目中编程的流 ID 之间是否存在任何关系? Re: ITS Device ID for PCI devices on LX2160A 与AE团队讨论。 Re: ITS Device ID for PCI devices on LX2160A LX2160A 上的 ITS 设备 ID 处理确实可能很棘手,尤其是在使用不同的 PCI 配置时。在研究类似主题时,我还通过Watauga Property Assessment找到了一些有用的房产数据,这些数据组织得很好。感谢分享这些信息,看到关于复杂硬件行为的实际讨论总是很有帮助的。
記事全体を表示
LS1046A Custom Board -image built with FlexBuild hangs at psci: probing for conduit method from DT. Hello, I am working on a custom board based on the LS1046A and I am experiencing a boot issue with a Debian image generated using FlexBuild. As a first step, I built the default LS1046AFRWY BSP without making any modifications and tested it on my custom board. During kernel boot, the system always hangs after printing: psci: probing for conduit method from DT. There is no kernel panic or exception; the system simply stops at this point. I found the following NXP forum thread describing a very similar issue: https://community.nxp.com/t5/Layerscape/LS1043A-RDB-Linux-Hangs-At-PSCI/td-p/750075 As a temporary workaround, I can boot Linux manually from U-Boot using the following commands. However, the kernel only boots successfully when I limit the available memory to 1982 MB using the "mem=" boot argument. If I increase this value, the kernel hangs again (sometimes at different points during boot). mmc dev 0 part uuid mmc 0:3 partuuidr load mmc 0:1 0x81000000 Image load mmc 0:1 0x90000000 fsl-ls1046a-frwy-sdk.dtb setenv bootargs "console=ttyS0,115200 earlycon=uart8250,mmio,0x21c0500 root=PARTUUID=${partuuidr} rw rootwait mem=1982M" booti 0x81000000 - 0x90000000 Test environment: SoC: LS1046A DDR: IS43/46QR16512A (4 GB DDR4) Boot media: SD Card BSP: FlexBuild (LSDK 25.12) To rule out a FlexBuild-specific issue, I also built a completely new BSP using Yocto (YP 6.0 / lf-6.18.20) and tested it on the same hardware. The result is exactly the same. The kernel again hangs after printing: psci: probing for conduit method from DT. The relevant part of the bdinfo output is shown below: DRAM bank 0 Start: 0x80000000 Size : 0x7be00000 DRAM bank 1 Start: 0x880000000 Size : 0x80000000 LMB memory regions: memory[0] : 0x80000000 - 0xfbdfffff memory[1] : 0x880000000 - 0x8ffffffff reserved[0] : 0xfac154c0 - 0xfbdfffff reserved[1] : 0x8ffff5000 - 0x8ffffffff Has anyone encountered a similar issue or have any suggestions on what I should investigate next? Any advice would be greatly appreciated. QorIQ LS1 Devices Re: LS1046A Custom Board -image built with FlexBuild hangs at psci: probing for conduit method from Hello, Root Cause — BL31 Memory Collision The LS1046A boot flow is: Boot ROM → BL2 (DDR Init) → BL31 (stays resident in DRAM) → U-Boot → Linux     BL31 remains permanently resident in DRAM and handles all SMC calls (PSCI: psci_get_version , CPU on/off, etc.). Its typical placement is near top-of-RAM minus ~10 MiB, with a size of up to 2 MiB.   When Linux boots with the full 4 GB DDR map, it allocates pages that physically overlap BL31's region. The first PSCI SMC call ( psci_get_version ) jumps into now-corrupted memory and the system hangs — with no panic, no exception, just silence. Your bdinfo output confirms the exact pattern — DDR Bank 1 ends at 0x8FFFFFFFF , and BL31 is at approximately RAM_END - 10 MiB = 0x8FF600000 : DDR Bank Start End Notes Bank 0 0x80000000 0xFBDFFFFF ~1982 MiB — your working mem= limit Bank 1 0x880000000 0x8FFFFFFFF 2 GB high bank — BL31 lives here The mem=1982M workaround keeps Linux within Bank 0, never touching Bank 1 where BL31 resides — which is precisely why it works. Fix — Reserve BL31 Memory in the Device Tree The correct permanent fix is to add a reserved-memory node to your DTS marking BL31's region as off-limits to the Linux memory allocator. Step 1: Find where BL31 is loaded Check your ATF build configuration ( plat/nxp/soc-ls1046a/.../platform_def.h ) for BL31_BASE and BL31_SIZE . For LSDK/lf-6.x with the FRWY BSP, the typical placement is: BL31_BASE = 0x8FF80000 (top of high DDR bank minus ~512 KB to 2 MB) BL31_SIZE = max 2 MiB     You can confirm at runtime by checking U-Boot output or the ATF build log for BL31: v2.x... Entry point address = ... . Step 2: Add the reserved-memory node to your DTS In your board DTS file (based on fsl-ls1046a-frwy-sdk.dts ), add: / { reserved-memory { #address-cells = <2>; #size-cells = <2>; ranges; /* Reserve BL31 runtime region — adjust addresses to match your ATF build */ bl31_reserved: bl31@8ff600000 { reg = <0x8 0xff600000 0x0 0x00200000>; /* 2 MiB at RAM_END - 10 MiB */ no-map; }; }; }; dts   Adjust 0x8ff600000 and size 0x200000 to match your actual BL31 load address from the ATF build. Step 3: Rebuild and test with full memory After adding the reservation, rebuild the DTB and boot without the mem= workaround. The kernel will skip that region, BL31 remains intact, and PSCI will function correctly.   Regards Re: LS1046A Custom Board -image built with FlexBuild hangs at psci: probing for conduit method from Hello, I tried the suggested solution, but unfortunately it did not resolve the issue. First, I verified the BL31 address from the TF-A (ATF) build: - BL31_BASE = 0xFBE00000 - BL31_SIZE = 0x200000 (2 MiB) Next, I added a "reserved-memory" node to the Device Tree to reserve the BL31 runtime region and rebuilt the DTB. After that, I booted the system again without the "mem=1982M" boot parameter. However, the system still hangs at the same point.
記事全体を表示
LS1046A 定制板 - 使用 FlexBuild 版本的映像在 psci 处卡住:正在从 DT 探测导管方法。 你好, 我正在开发一款基于 LS1046A 的定制板,在使用 FlexBuild 生成的 Debian 镜像时遇到了启动问题。 首先,我版本了默认的 LS1046AFRWY 电路板支持包。没有做任何修改,并在我的定制板上进行了测试。内核启动过程中,系统总是在打印以下内容后挂起: psci:从DT探测导管方法。 没有内核崩溃或异常;系统就此停止运行。 我在NXP论坛上找到了一个描述类似问题的帖子: https://community.nxp.com/t5/Layerscape/LS1043A-RDB-Linux-Hangs-At-PSCI/td-p/750075 作为临时解决方案,我可以使用以下命令从 U-Boot 手动启动 Linux。但是,只有当我使用“mem=”启动参数将可用内存限制为 1982 MB 时,内核才能成功启动。如果我增加这个值,内核又会挂起(有时在启动过程中的不同阶段)。 mmc dev 0 部分 uuid mmc 0:3 partuuidr 加载 mmc 0:1 0x81000000 图像 加载mmc 0:1 0x90000000 fsl-ls1046a-frwy-sdk.dtb setenv bootargs "console=ttyS0,115200 earlycon=uart8250,mmio,0x21c0500 root=PARTUUID=${partuuidr} rw rootwait mem=1982M" booti 0x81000000 - 0x90000000 测试环境: SoC:LS1046A DDR:IS43/46QR16512A(4 GB DDR4) 启动介质:SD卡 BSP:FlexBuild(LSDK 25.12) 为了排除 FlexBuild 特有的问题,我还使用 Yocto (YP 6.0 / lf-6.18.20) 构建了一个全新的 电路板支持包。,并在相同的硬件上进行了测试。 结果完全相同。内核在打印以下内容后再次挂起: psci:从DT探测导管方法。 下面显示的是bdinfo输出的相关部分: 动态随机存取存储器\(DRAM\) 存储体 0 起始地址:0x80000000 大小:0x7be00000 动态随机存取存储器\(DRAM\) 存储体 1 起始地址:0x880000000 大小:0x80000000 LMB 内存区域: 内存[0] :0x80000000 - 0xfbdfffff 内存[1] :0x880000000 - 0x8ffffffff 保留[0] : 0xfac154c0 - 0xfbdfffff 保留[1] : 0x8ffff5000 - 0x8ffffffff 有没有人遇到过类似的问题?或者有什么建议,让我接下来应该调查哪些方面? 任何建议都将不胜感激。 QorIQ LS1设备 Re: LS1046A Custom Board -image built with FlexBuild hangs at psci: probing for conduit method from 你好, 根本原因——BL31 内存冲突 LS1046A 的启动流程如下: Boot ROM → BL2 (DDR Init) → BL31 (stays resident in DRAM) → U-Boot → Linux     BL31 永久驻留在 动态随机存取存储器\(DRAM\) 中,并处理所有 SMC 调用(PSCI: psci_get_version 、CPU 开/关等)。它的典型位置在RAM 顶部减去约 10 MiB 的位置,大小可达2 MiB 。   当 Linux 使用完整的 4 GB DDR 映射启动时,它会分配与 BL31 区域物理重叠的页面。第一次 PSCI SMC 调用( psci_get_version )跳转到已损坏的内存,系统挂起——没有恐慌,没有异常,只有寂静。 您的 bdinfo 输出证实了确切的模式——DDR Bank 1 结束于 0x8FFFFFFFF ,而 BL31 大约位于 RAM_END - 10 MiB = 0x8FF600000 : DDR银行 开始 结束 说明 银行 0 0x80000000 0xFBDFFFFF ~1982 MiB —您的工作 mem= 限制 银行 1 0x880000000 0x8FFFFFFFF 2 GB 高位银行——BL31 位于此处 mem=1982M 变通方法使 Linux 保持在 Bank 0 内,永远不会触及 BL31 所在的 Bank 1——这正是它有效的原因。 修复——在设备树中预留 BL31 内存 正确的永久解决方法是在 DTS 中添加一个 reserved-memory 节点,将 BL31 区域标记为 Linux 内存分配器禁止访问。 步骤 1:找到 BL31 的加载位置 检查您的 ATF 版本配置( plat/nxp/soc-ls1046a/.../platform_def.h )对于 BL31_BASE 和 BL31_SIZE 。对于采用 FRWY 电路板支持包。的 LSDK/lf-6.x,典型的安装位置如下: BL31_BASE = 0x8FF80000 (top of high DDR bank minus ~512 KB to 2 MB) BL31_SIZE = max 2 MiB     您可以通过检查 U-启动 输出或 ATF 版本日志中的 BL31: v2.x... Entry point address = ... 。 步骤 2:将预留内存节点添加到您的 DTS 中 在您的板级 DTS 文件(基于 fsl-ls1046a-frwy-sdk.dts )中添加: / { reserved-memory { #address-cells = <2>; #size-cells = <2>; ranges; /* Reserve BL31 runtime region — adjust addresses to match your ATF build */ bl31_reserved: bl31@8ff600000 { reg = <0x8 0xff600000 0x0 0x00200000>; /* 2 MiB at RAM_END - 10 MiB */ no-map; }; }; }; dts   调整 0x8ff600000 和大小 0x200000 ,以匹配 ATF 版本中的实际 BL31 加载地址。 步骤 3:重建并使用全部内存进行测试 添加预留信息后,重新构建 DTB 并启动,无需 mem= 变通方法。内核将跳过该区域,BL31 保持不变,PSCI 将正常工作。   此致 Re: LS1046A Custom Board -image built with FlexBuild hangs at psci: probing for conduit method from 你好, 我尝试了建议的解决方案,但很遗憾,它并没有解决问题。 首先,我验证了 TF-A (ATF) 版本中的 BL31 地址: - BL31_BASE = 0xFBE00000 - BL31_SIZE = 0x200000 (2 MiB) 接下来,我在设备树中添加了一个“保留内存”节点,以保留 BL31 运行时区域,并重新构建了 DTB。 之后,我再次启动系统,但没有使用“mem=1982M”启动参数。然而,系统仍然卡在同一个地方。
記事全体を表示