我正在为 TMS570LC4357开发引导加载程序。 我需要检查应用程序是否已编程或者闪存地址是否已被擦除。
闪存的擦除状态是一个已知值。 如果我读取它、这会产生可纠正的错误或不可纠正的错误、还是出于某种原因不可预测?
2.如果我的 NMI 服务确定这个错误应该被忽略、我可以从中断返回还是违规的返回地址不像其他中断那样存储在堆栈上?
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开发引导加载程序。 我需要检查应用程序是否已编程或者闪存地址是否已被擦除。
闪存的擦除状态是一个已知值。 如果我读取它、这会产生可纠正的错误或不可纠正的错误、还是出于某种原因不可预测?
2.如果我的 NMI 服务确定这个错误应该被忽略、我可以从中断返回还是违规的返回地址不像其他中断那样存储在堆栈上?
您好!
擦除闪存时、闪存及其 ECC 都会被擦除。 两个区域的内容都是0xFFFFFFFF。 当您读取闪存时、您将得到一个不可纠正的 ECC 错误。
3.您可以使用引导加载程序的链接器 cmd 文件对整个闪存的 ECC 进行编程。
http://software-dl.ti.com/hercules/hercules_docs/latest/hercules/Examples/index.html
在读取程序/数据之前、所有闪存存储器空间(闪存组0至6)的 ECC 值必须被编程到闪存中。 这可以通过生成正确的 ECC 值来完成。 Cortex R5F CPU 可以生成推测取指令、将其取指令到闪存存储器空间内的任何位置。 对 具有无效 ECC 的位置的推测取指令(随后未使用)不会创建中止、但会为可纠正或不可纠正的错误设置 ESM 标志。 不可纠正的错误将无条件地导致 nERROR 引脚切换为低电平。 因此、必须注意为整个闪存空间生成正确的 ECC、包括段和任何未使用或空白闪存区域之间的空洞。