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.

[参考译文] TMS570LS1224:在用户模式下 TI_FEEE (Internal_Blank)上发生数据中止

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1381647/tms570ls1224-data-abort-on-ti_feeinternal_blankcheck-in-user-mode

器件型号:TMS570LS1224

工具与软件:

尊敬的先生/女士:

我们将 FEE 驱动程序与 SafeRTOS 和 MPU 结合使用。 在特权模式下、在启动操作系统之前、一切运行正常、我们可以对仿真 EPROM 进行读取/写入。 但是、在用户模式下调用 TI_3054 (Fee_Write)会导致数据中止(FAULT_STATUS:1101、DFAR:0x100)。 数据中止发生在 Fapi_flushPipeline ()中的 Flash API 中,由 Fapi_doBlankCheck ()调用,由 TI_Fee Internal_Blank ()调用,由 TI_BeeBlankCheck Fee_Write ()调用,由 TI_BlushPipeline ()调用)。

闪存 API 的文档告诉我们 Fapi_flushPipeline ()需要对地址0x000、0x100、0x200和0x300进行读取访问。 但是、即使我们在 MPU 中为这些位置启用读访问、在读取0x100时也会发生数据中止。 闪存 API 的文档告诉我们、所有闪存 API 函数都需要特权模式。 但是、FEE 驱动器的文档告诉我们只有 TI_FEEP (Fee_Init)和 TI_FEEE Internal_Write 021 ()需要特权访问。 当发生数据中止时、这两个函数都不是调用堆栈的一部分。 特别是 Fee_Write 在 TI_FEELE_ Internal_Write Internal_Blank 群组群组群组群组群中的 TI_FEELE_群组群组群组群组群组群组群组群组群组群组群组群组群组群组群组群组群组群组群组群中

这就引出了以下问题:

-为什么 FEE 驱动程序中的函数不需要根据 FEE 驱动程序文档的特权模式,即使他们调用闪存 API 函数,这些函数需要根据闪存 API 文档的特权访问?
-我们如何在用户模式下启用对0x000、0x100、0x200和0x300的读访问?
-由于 TI_FEEE Internal_Write F3021 ()以后需要特权模式,我们是否应该将 TI_FEEP Fee_Write ()视为需要特权模式? 这将解决该问题。 但是、我们需要使在特权模式下运行的代码段尽可能短。
——
编辑 :Fee_Main 当函数执行擦除时、TI_3054 ()中也会出现类似的问题。 调用 Fapi_setActiveFlashBank ()、在不处于特权模式时导致 FAULT_STATUS=1001的数据中止、DFAR:0x0800A3A4。

感谢您的帮助、
Philipp