主题中讨论的其他器件: UNIFLASH
您好!
我使用的是 AM2631器件、需要帮助来回答几个问题。
1) 1)我想知道如何配置启动和链接器脚本、以便能够防止在软复位后擦除某些存储器区域。
2) 2)如何在写入访问操作时配置存储器访问断点。
3)如何 将缓存重新刷新到内存中
此致、
阿尔特姆
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.
尊敬的 Arterm:
1.您可以在链接器脚本中创建专用段并将 NOINIT 类型分配给此输出段:例如:
.section_noinit: > OCRAM、type=NOINIT
NOINIT 段不会由链接器在 C 自动初始化过程中进行初始化。 您需要自行根据需要对此段进行初始化。
2.你试过观察点吗? 可以针对特定的存储器读取/写入触发一个观察点。
CCS-->运行-->新建断点-->硬件观察点
3.您可以调用缓存 API 来查看缓存失效情况:
CacheP_wbInv (addr、size、CacheP_TYPE_ALL);
请参阅 SDK API 参考:
我附上了演示项目、您可以尝试使用该项目来重现问题。
步骤:
实际结果:
RESET_ADDRESS 变量在软件复位后复位为0
预期结果:
RESET_ADDRESS 变量在每个复位周期中增加。
我希望该接口可用作 QSPI 引导模式。 软件重置有什么问题?
只要内核复位、ARM Cortex-R5F 处理器内核就会从复位向量地址0x00000000处开始执行。 循环通电后、位于0x00000000处的异常矢量更新为应用程序映像的复位矢量、如果异常矢量的内容未损坏(噪声、辐射等)、则 CPU 复位、SW 复位应开始代码执行。
我修改了 RTI LED 闪烁示例、并将该示例编程为通过 QSPI SBL 作为应用映像进行闪存。
应用映像可通过上电复位、SW 复位和 nRESET 启动。
若要启用 NRESET 引脚来控制热复位、 必须清除 WARM_RESET_CONFIG 寄存器的位字段[2:0]:
SoC_configureWarmResetSource (0x77777770);//QJ 添加了
下面是我的示例:
您是否能够在每个复位周期增加 reset_address 变量?
RESET_ADDRESS 不增加。 这是另一个问题。
我的测试显示应用程序映像可以通过 PORRST、nRESET 和 SW 复位开始执行。
您好!
由于设计限制、我们无法在闪存中存储任何内容。 由于复位地址是从异常环境中捕获的、比如 Hard_FAULT 处理程序、因此将其存储在 RAM 或任何在复位时不被清除的系统寄存器中的唯一方法。
有几个问题需要您澄清:
是否无法 在 SBL 中初始化 OCSRAM 区域、或为什么需要将其初始化?
为什么在软件复位后清除断点?
我们是否应该通过应用复位处理程序覆盖矢量表、以防止在复位时执行 SBL?
是否可能无法 在 SBL 中初始化 OCSRAM 区域,或为什么需要将其初始化?
SBL 初始化 TCMA、TCMB、以及 OCSRAM 的组2和组3。 无法初始化 OCSRAM 的存储体(2或3)或存储体(2和3)(在热复位后)。
硬件初始化的目的是根据它们的错误检测方案–ECC、将具有错误检测能力的存储器阵列设定为一个已知状态。 例如、上电复位后 OCSRAM 的内容未知。 可启动硬件自动初始化、这样就不会出现 ECC 错误。
为什么断点在软件重置后被清除?
如 TRM 中所述、所有 IO 配置都会在热复位置位期间复位、并且在复位取消置位后、器件将启动、应用程序将重新加载到 OCSRAM、并且不应保留断点。
我们是否应该通过应用程序复位处理程序覆盖向量表,以防止在复位时执行 SBL?
在引导期间、应用程序映像的异常向量或复位向量由 SBL 复制到0x00000000。