我发现我们的文件系统通过调用 FLEXSPI_TransferBlocking() 通过 flexspi 驱动程序擦除/写入闪存有一个非常奇怪的行为。
在我们的项目中,我们使用 RT1165 作为 MCU 并使用了两个 FLEXSPI。
FlexSPI 1 用于 XIP 闪存(执行代码),FlexSPI 2 用于文件系统闪存。
当问题发生时,我们的文件系统将一遍又一遍地在相同的块地址擦除/写入 flexspi2 闪存。似乎从闪存中读回的数据与写入闪存的数据不同。这就是说,由于未知原因,数据无法通过 FlexSPI 2 正确写入闪存,即使它可以通过调用 FLEXSPI_TransferBlocking() 返回 true。而且这个问题的发生率非常低。
有趣的是,如果我在 FLEXSPI_TransferBlocking() 中添加 DisableGlobalIRQ(),奇怪的问题将永远不会发生。
所以,我的问题是我们是否需要在 FLEXSPI_TransferBlocking() 中使用 DisableGlobalIRQ()?如果是,我们为什么需要它,是否有任何解释可以帮助澄清这个问题。
感谢和问候,
凯尔
PS:代码更改为 FLEXSPI_TransferBlocking()