部件号: RM46L852
我正在努力验证闪存内容。
在刷写一个 4K 数据块后、我会进行回读、结果会失败。 但是、当查看调试器中的数据时、它已正确刷写
闪存数据和回读之间是否存在需要注意的一些延迟? (我正在使用闪存 API)。
如果我跳过整个验证过程、一切都正常、但我觉得这是错误的。 我尝试了仅对数据部分进行编程、还尝试了自动生成具有相同结果的 ECC 位。
代码:
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.
部件号: RM46L852
我正在努力验证闪存内容。
在刷写一个 4K 数据块后、我会进行回读、结果会失败。 但是、当查看调试器中的数据时、它已正确刷写
闪存数据和回读之间是否存在需要注意的一些延迟? (我正在使用闪存 API)。
如果我跳过整个验证过程、一切都正常、但我觉得这是错误的。 我尝试了仅对数据部分进行编程、还尝试了自动生成具有相同结果的 ECC 位。
代码:
尊敬的 la Ma:
我在代码中使用的逻辑与您的相同、工作正常:

请参阅我所附的项目一次:
e2e.ti.com/.../FAPI_5F00_TEST_5F00_RM46-_2800_3_2900_.zip
我正在对地址为 0xF0200000 的收费区域进行此测试、您在代码中的哪些位置执行此测试?
--
此致、
Jagadish。
我将使用地址 0x00020000 和转发 (Bank0/Sector7) 中的主闪存区域。 看起来您正在使用 EEPROM 部分。
我已经做了更多的调试,它接缝,如果我强制优化=0 的验证函数,它会接缝工作. (需要更多测试)
通常、所有 C 代码都是使用 optimize=2 进行编译的。
如果我将“__attribute__((optimize(“0")“)))“放在验证过程的前面、它似乎可以正常工作。
我仍然不明白为什么,它可能只是一些时间的东西已经改变了,当去优化。
尊敬的 la Ma:
由于、您的验证失败 闪存包装程序数据高速缓存一致性问题 。 使用对闪存进行编程时Fapi_issueProgrammingCommand()、新编程的数据可能仍在闪存包装程序的流水线缓冲区/数据高速缓存中。 当您立即回读数据进行验证时、您可能会读取过时的缓存数据、而不是实际的编程闪存内容。
禁用优化optimize=0 () 的原因似乎是“修复“该问题、因为它可能会引入足够的延迟并更改内存访问模式、以便可以刷新或绕过高速缓存、但这不是一个可靠的解决方案。
因此、您能否按照以下流程操作并告诉我您的反馈意见:
调用 Fapi_flushPipeline()在执行任何非 API 闪存读取之前对其进行编程。 根据闪存 API 文档:
“该函数可刷新闪存包装程序数据高速缓存。 在进行擦除或编程操作后、必须在读取第一个非 API 闪存之前刷新数据高速缓存。