Thread 中讨论的其他器件:SYSCONFIG、UNIFLASH
工具/软件:
尊敬的团队:
我对 XIP(就地执行)的理解是、它通过 OSPI 接口、逐指令直接从外部 NOR 闪存提取并执行最终应用程序二进制文件的指令。
为了了解代码中的实现细节、我引用了 SDK 中的两个示例:
-
SDK_path\examples\drivers\ospi\ospi_flash_xip\am263px-cc -
SDK_path\examples\hello_world_xip_fss1\am263px-cc
但是、这些示例造成了很多混淆:
-
在中 ospi_flash_XIP 示例、OSPI 实例使用 SysConfig 进行配置、外设也在代码中进行初始化。
-
在中 Hello_World_XIP_FSS1 例如、SysConfig 中未添加 OSPI、并且没有显式代码对 OSPI 进行初始化。 但是、该文档声称“此示例不仅仅是执行驱动程序和电路板初始化并打印字符串 Hello World! 在 UART 控制台上。 在通过 FSS1 接口执行 XIP 时这样做 “
-
另一方面是 ospi_flash_XIP 示例只需将一些已知数据写入闪存、将其读回、然后计算 CRC 以验证其是否匹配、并打印测试通过或失败。 不清楚这是如何演示 XIP 功能的。
SBL_OSPI_Multicore_elf先介绍一下次级引导加载程序示例工程。 在该工程中、仅在代码中初始化 OSPI 外设、不使用闪存读取/写入 API。 我使用uniflash.py脚本将 SBL 映像和 LED 闪烁应用程序映像刷写到闪存中、将引导 DIP 开关更改为 xSPI 模式,代码运行良好 — LED 按预期闪烁。 这方面如何处理 XIP?
我的问题是:
-
为了实施 XIP 并直接从闪存执行代码、是否确实需要闪存读取/写入 API?
-
出于这一目的、是否仅 OSPI 读取/写入 API 就足够了?
- 在将
.mcelf或.mcelf-xip文件刷写到外部闪存时、整个映像是写入闪存器件、还是仅写入某些部分或段? 在引导期间、RBL(ROM 引导加载程序)会将整个 SBL 复制到 RAM 中并执行它、使其按预期运行。 但是、应用程序映像呢? RBL 或 SBL 是否将应用程序的某些段(例如代码,只读数据等)复制.text.data到 RAM 中进行执行、或者所有这些段是否都保存在外部闪存中、直接从闪存中的第一条指令开始执行?
提前感谢…
非常感谢您的快速响应