2397316_zh-CN

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

2397316_zh-CN

2397316_zh-CN

i.MX8M Plus — ECSPI/SPI NOR 接口上的辅助镜像启动 (IMG_CNTN_SET1_OFFSET):ROM 是否会回退到 OP 模式

i.MX8M Plus -- ECSPI/SPI 或非 上的辅助映像启动 (IMG_CNTN_SET1_OFFSET):ROM 是否会回退到 OPEN 配置?

==== 设置 ====

- SoC:i.MX8M Plus(定制SMARC模块)
- 引导设备:ECSPI2 / CS1 上的串行 NOR(Winbond W25Q128,16 MiB)。这是传统的 eCSPI 控制器,不是 FlexSPI。
- 安全性:开放式配置(设备未关闭 HAB)。
- 熔丝 IMG_CNTN_SET1_OFFSET(熔丝读取 2 1)= 0x00000000。
- Flash 映射:主引导加载程序位于 0x000000,辅助副本位于 0x400000(4 MiB)。

根据已记录的SPI映射:
“对于 SPI:如果熔丝位大于 10,则禁用辅助启动;n == 0 -> 偏移量 = 4 MB;n == 2 -> 1 MB;其他情况且 n <= 10 -> 1 MB * 2^n。”

当熔丝 n = 0(出厂默认值,无需烧录)时,二级偏移量应正好为 0x400000。

==== 问题 ====

我们在 0x400000 处放置了一个字节相同的、经 cmp.b 验证的主映像副本,然后使主启动头失效(sf erase 0 0x1000)并重置。

ROM 无法回退到备用映像——主板已变砖(只能通过 USB SDP 恢复)。

我们还尝试擦除主体内部的一个孔(sf erase 0x100000 0x40000),结果相同。

==== 问题 ====

1. 在 SPI/ECSPI NOR 上,是什么触发 ROM 在 IMG_CNTN_SET1_OFFSET 处切换到辅助映像?
是无效的主启动头/镜像解析失败,还是具体的 HAB 认证失败?

2. 辅助映像启动在开放(非安全)配置下是否有效,还是仅在设备 HAB 关闭时有效?

3. 是否恢复到之前的重置状态,还是需要断电重启/第二次重置(持久启动方式)?

4. 位于 0x400000 的辅助映像必须是单独构建的可引导映像(具有该偏移量的独立虚拟镜像/引导数据)吗?
或者,使用与原文件完全相同的字节副本就足够了?

==== 逻辑分析仪证据(RESET 期间捕获的 SPI 总线信号) ====

我们使用 Saleae Logic Pro 16 以 500 MS/s 的速度探测 ECSPI2 总线(CLK、MOSI、MISO、CS),并在 RESET 期间解码每个 SPI 事务。为了进行比较,我们对从 FlexSPI 或非 启动并成功回退到辅助电源的 i.MX8QM 模块进行了同样的测试。

---- i.MX8M Plus (ECSPI NOR),主控芯片已损坏 ----

ROM 只发出 0x03 READ 命令,严格从偏移量 0 开始顺序读取:

0x03 00 00 FC -> 读取 0x0000FC
0x03 00 04 EC -> 读取 0x0004EC
0x03 00 08 DC -> 读取 0x0008DC
……(每个 64 KiB 数据块约 50 次读取,呈严格递增趋势)……
0x03 00 13 xx -> 读取计数在此处下降(擦除空洞 0x100000-0x140000,MISO=0xFF)
0x03 00 18 xx -> 线性地继续经过孔洞
... 最高可达 ~0x1A69E8 ...

ROM 会线性读取整个主区域,直接读取已擦除/无效区域(得到 0xFF),并且永远不会读取 0x400000 或 0x800000(辅助区域)。

在完整的捕获数据(2500 万个样本,654 个解码交易)中,任何地方都没有“0x03 40 xx xx”。

如果头完全擦除,ROM 会加载 0xFF,执行它,然后因同步中止而崩溃——没有任何回退机制。

作为对比,i.MX8QM(FlexSPI NOR)——备用方案确实有效——

当仅主容器头失效(FCB 保持不变,地址为 0x000400)时,QM ROM 会执行以下操作:

0x0B 00 04 00 -> 快速读取 FCB @0x000400,MISO:46 43 46 42(“FCFB”魔数,FlexSPI 配置有效)
读取FCB配置数据……
0x0B 00 10 00 -> 快速读取主容器 @0x001000,MISO:FF FF FF FF(无效!)
0x0B 40 10 00 -> 快速读取辅助容器 @0x401000,MISO:有效 <-- ROM 已切换,相同 RESET
0x0B 40 30 00, 0x0B 40 40 00, ... -> 加载整个二级镜像(在 0x40xxxx 处读取约 90 次)

QM ROM 读取 FCB,配置 FlexSPI,检查 0x001000 处的主容器,发现为 0xFF,
然后立即(相同 RESET)切换到 0x401000 处的辅助容器。这样可行。

如果我们擦除前 4 MB 的全部数据(包括 FCB),QM ROM 只会进行 2 次读取操作。
在 0x000400 处,得到 0xFF,并且不会回退——因此需要有效的 FCB 才能启用回退。

- - 比较 - -

i.MX8M Plus(本主板):
控制器:eCSPI(传统SPI)
读取操作码:0x03 读取
FCB 存在:否(eCSPI 没有 FCB 概念)
读取损坏的主服务器上的辅助服务器:否 -- 总线从未显示“0x03 40 xx xx”
结果:砖块(加载 0xFF -> 崩溃)

i.MX8QM(参考):
控制器:FlexSPI
读取操作码:0x0B 快速读取
FCB 存在:是(0x400,魔法值“FCFB”)
读取损坏主盘上的辅助盘:是 -- "0x0B 40 10 00", 相同RESET
结果:辅助设备启动成功

==== 摘要 ====

从总线捕获信息来看,IMG_CNTN_SET1_OFFSET 辅助映像在 i.MX8M Plus 上启动。
似乎仅支持 FlexSPI,或者受 HAB 关闭配置的限制,并且无法启用。
适用于 OPEN 配置中的 eCSPI NOR。

NXP能否确认:
- i.MX8M Plus 是否支持 eCSPI(而非 FlexSPI)或非 进行二次映像启动;
- 触发条件是 HAB-auth-failure(仅限已关闭配置)还是任何无效标头(也包括已打开配置);
- 回退方案是采用相同的重置方式还是需要断电重启;
- 是否必须为该偏移量单独构建辅助副本,或者字节相同的副本也可以。

谢谢!

Re: i.MX8M Plus — Secondary image boot (IMG_CNTN_SET1_OFFSET) on ECSPI/SPI NOR: does ROM fall back i

你好@djordje_nod

希望你一切都好。


Q1.什么原因导致 ROM 回退到 ECSPI NOR 的辅助模式?

在 OPEN 模式下,ROM/HAB 执行映像认证,但所有认证错误都会被忽略,并且仍然允许执行映像。

在 CLOSED 模式(SEC_CONFIG 融合)下,当 HAB 对主映像的认证失败时,ROM 将 PERSIST_SECONDARY_BOOT (SRC_GPR10[30]) 设置为 1 并执行软件复位。

Manuel_Salas_0-1785176534778.png


Q2. 在 OPEN 配置下,辅助镜像启动是否正常工作?

在 OPEN 模式下,ROM 永远不会自动设置 PERSIST_SECONDARY_BOOT,因为它会忽略 HAB 错误。


Q3:第一次 RESET 还是第二次 RESET?

主启动失败 HAB 认证(关闭模式)----> ROM 设置 SRC_GPR10[30] = 1 ----> 触发信号软件复位。

在下一个 RESET 周期,ROM 读取持久位,发现它是 1,于是从辅助偏移量而不是主偏移量加载数据。


Q4. 是字节相同的副本,还是位于 0x400000 的单独构建的映像?

由于 IVT/启动数据字段包含的是 RAM 地址,而不是闪存地址,因此字节相同的副本就足够了。


顺祝商祺!

萨拉斯。

标记 (1)
无评分
版本历史
最后更新:
昨天
更新人: