This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMDSCNCD263P:XIP 的确切工作原理

Guru**** 2516600 points
Other Parts Discussed in Thread: SYSCONFIG, UNIFLASH

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1556683/tmdscncd263p-how-exactly-xip-works

器件型号:TMDSCNCD263P
Thread 中讨论的其他器件:SYSCONFIG、UNIFLASH

工具/软件:

尊敬的团队:

我对 XIP(就地执行)的理解是、它通过 OSPI 接口、逐指令直接从外部 NOR 闪存提取并执行最终应用程序二进制文件的指令。

为了了解代码中的实现细节、我引用了 SDK 中的两个示例:

  1. SDK_path\examples\drivers\ospi\ospi_flash_xip\am263px-cc

  2. SDK_path\examples\hello_world_xip_fss1\am263px-cc

但是、这些示例造成了很多混淆:

  1. 在中 ospi_flash_XIP 示例、OSPI 实例使用 SysConfig 进行配置、外设也在代码中进行初始化。

  2. 在中 Hello_World_XIP_FSS1 例如、SysConfig 中未添加 OSPI、并且没有显式代码对 OSPI 进行初始化。 但是、该文档声称“此示例不仅仅是执行驱动程序和电路板初始化并打印字符串 Hello World! 在 UART 控制台上。 在通过 FSS1 接口执行 XIP 时这样做

  3. 另一方面是 ospi_flash_XIP 示例只需将一些已知数据写入闪存、将其读回、然后计算 CRC 以验证其是否匹配、并打印测试通过或失败。 不清楚这是如何演示 XIP 功能的。

  4. 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 中进行执行、或者所有这些段是否都保存在外部闪存中、直接从闪存中的第一条指令开始执行?

提前感谢…

非常感谢您的快速响应