STM32
直播中

张国厚

8年用户 1469经验值
私信 关注
[问答]

求助,关于NorFlash DQ6Toggle bit的问题求解

在使用STM32746G-EVAL进行NORFlash测试时,发现在禁止异步等待的情况下,调用HAL_NOR_GetStatus的时候,来判断NORFLAHS的忙闲状态,连续读取Nor Flash的状态值,会出现(tmpSR1   NOR_MASK_STATUS_DQ6) == (tmpSR2   NOR_MASK_STATUS_DQ6)的情况,但此时wait信号为底电平状态,说明FLASH还处在忙的状态,说明这种判断逻辑存在错误,查找错误原因,发现,在连续读取两次FLASH状态值时,即:  /* Read NOR status register (DQ6 and DQ5) */
    tmpSR1 = *(__IO uint16_t *)Address;
    tmpSR2 = *(__IO uint16_t *)Address;
时,插入了中断,关闭中断不会出现,这种问题,但中断时ST官方例程提供的Systick_Handler函数,此函数我没有修改,不会访问外部FALSH。
通过示波器观察,再推出中断时产生了一个读信号,不清楚是什么原因?
然后我在SK-M32F407开发板上去验证,看ST32F407是否也存在这种现象,经过测试,没有发现这种现象,
请麻烦管理员,反馈一下这个问题,看问题出在何处!!!
谢谢!!!!

回帖(1)

风来吴山

2024-5-11 17:28:20
在这种情况下,问题可能出在连续读取Nor Flash状态值时,两次读取之间的时间间隔过短,导致第二次读取的状态值与第一次相同。这可能是由于Nor Flash尚未完成其操作,或者STM32的读取速度过快。

为了解决这个问题,你可以尝试以下方法:

1. 在两次读取之间添加一个延时函数,以确保Nor Flash有足够的时间完成其操作。例如,使用HAL_Delay()函数:

```c
HAL_Delay(1); // 延时1毫秒
tmpSR1 = *(__IO uint16_t *)Address;
...
HAL_Delay(1); // 延时1毫秒
tmpSR2 = *(__IO uint16_t *)Address;
```

2. 如果问题仍然存在,可以尝试增加延时时间,例如:

```c
HAL_Delay(10); // 延时10毫秒
```

3. 如果延时仍然无法解决问题,可以考虑修改Nor Flash的时序参数,以确保STM32在读取Nor Flash状态时不会过快。这可能需要查阅Nor Flash的数据手册,以了解其推荐的时序要求。

4. 另外,确保你的Nor Flash模块支持非同步操作。如果Nor Flash模块不支持非同步操作,那么在没有异步等待的情况下,可能会出现状态判断错误的问题。

5. 最后,检查你的硬件连接是否正确,确保STM32和Nor Flash之间的通信没有受到干扰。

通过尝试上述方法,你应该能够找到问题的根源并解决它。如果问题仍然存在,请提供更多的信息,以便进一步分析。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分