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.

[参考译文] TMS570LC4357:RAM 上的闪存 API 在 FapiDoBlankCheck 函数处获得预取中止

Guru**** 2390765 points
Other Parts Discussed in Thread: HALCOGEN, TMS570LC4357

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1490142/tms570lc4357-flash-api-on-ram-i-get-prefetch-abort-at-fapidoblankcheck-function

器件型号:TMS570LC4357
主题中讨论的其他器件:HALCOGEN

工具/软件:

我在应用代码中将闪存 API 代码复制到 RAM 中、之后我尝试使用费用函数编写闪存组7。 当我尝试在闪存组7上写入数据时收到预取错误。
下面是我的配置。
内存上的-FAPI 代码区域起始地址是0x0807E000。
RAM 上的-FAPI 代码区域结束地址为0x0807FFFF
FAPI 代码区域大小为8KB。
FAPI 代码区域类型是正常的 OINC 共享
FAPI 代码区域权限为 RW_RW_EXEC。
-我使用总共10个 MPU 区。 FAPI MPU 区域编号为7、之后区域7没有与 RAM 相关的 MPU 配置(因此该区域之后的其他 MPU 区域不得影响区域7)
-我使用的是 freeRTOS。 我的任务可配置区域编号为3。
-我的 HCLK 频率是150MHz, GCLK 频率是300MHz.
-我的闪存数据等待状态是3 (它自动从 halcogen 创建)
-我的链接器配置与我的 MPU 配置兼容。
-我正在使用"F021_API_CortexR4_BE_L2FMC_V3D16.lib",我在链接器进行了如下配置(忽略拼写错误,我无法在这里上传我的真实代码)
FAPI_RAM (RW):origin=0x0807E000 lenght=0x2000
FlashAPI:

Fapi_User 定义函数.obj (.text、.data)
-- library = F021_API_CortexR4_BE_L2FMC_V3D16.lib (.text、.data)
}palign=8 load=flash、run=FAPI_RAM、load_start (apiloadstart)、run_start (apirunstart)、size (apiloadsize)

首先、我检查了故障源、发现故障原因是指令地址0x0807e7e4。 当我反汇编地址时、我发现 Fapi_doBlankCheck 函数。 此地址来自我的 FAPI_RAM 区域、该区域是可执行的、因此我不应该收到预取错误。 发生错误后、我将所有512KB 的 RAM 区域配置为可执行区域、但我再次收到预取错误、因此我认为该错误应该与 MPU 配置无关。 (我在遇到故障时检查了 MPU 权限和类型)

我在 BareMetal 项目上尝试过它,我没有遇到任何问题。
故障的来源是什么? 如何修复此错误? 它与数据等待状态有关吗?