[CPU-3.9] CPU 在访问外部 SRAM 时会小概率发生读写错误

影响版本: v1.0 v1.1

描述

CPU 在执行下面汇编指令访问外部 SRAM 时会小概率发生错误:

store.x at0, as0, n
load.y at1, as1, m

其中 store.x 表示 x 位写操作,load.y 表示 y 位读操作,且 as0+nas1+m 访问的外部 SRAM 的地址相同。

  • 指令可以是连续的,也可以包含在同一个流水线中(少于 4 个中间指令,并且没有流水线刷新)。

  • x >= y 时,写数据会丢失。(注意:当 load 和 store 都是 32-bit 值时,写数据只有在第一个和第二个指令之间发生中断时才发生。)

  • x < y 时,写数据会丢失,且读数据错误。

变通方法

当外部 SRAM 在 ESP-IDF v3.0 及更高版本中启用时,此问题自动绕过。

  • x >= y 时,在 store.xload.y 之间插入 4 个 nop 指令。

  • x < y 时,在 store.xload.y 之间插入 memw 指令。

解决方案

已在芯片版本 v3.0 中修复。