stm32F4芯片高温环境读写spiFlash失败

文章描述了一种在60摄氏度以上读取SPIFlash可能失败的现象,并通过实验排除了等待就绪机制的影响。问题最终归因于STF4系列芯片中的SPI相关bug,与APB总线频率和CLK引脚GPIOspeed配置不匹配导致的时钟不同步。通过将GPIOspeed设置为至少HIGH级别,解决了这一问题,并在高温环境中经过24小时运行验证未再出现故障。
摘要由CSDN通过智能技术生成

一、现象:

在60摄氏度以上,存在一定概率读取spiFlash失败。

二、记录一下该问题的大致分析解决过程:

  1. 在周期写flash数据时(先擦除后写入)需要先读取当前状态是否就绪,未就绪需要延时。常温下擦除flash需要十几ms的延时时间,而高温下没有看到延时。(注:是否需要继续延时是根据读取的flash状态来决定的,当读取到第一个bit为1时delay 1ms继续等待,直到读取到0)

  1. 擦除和写入flash数据需要检查flash状态是否就绪,但是读flash数据不需要检查。为了确定是否“等待就绪”导致的问题,做了如下实验:先在常温下未出现问题时擦除掉所有数据,然后再写入一条数据,此时读写都是正常的。然后放入温箱中等待问题的复现,此时再仅读取数据。结果发现读取数据也是异常的。此实验说明问题与“等待就绪”无关。

  1. 参考其他例程的 SPI 配置,看是否是配置不当引起的问题。测试修改SPI 的clk和data引脚GPIO speed,发现高温下问题没有出现。目前项目中GPIO speed 配置的是“LOW”,如果配置成MEDLIUM以上(包括medium)都可以解决问题。

  1. 目前只知道修改GPIO speed能解决问题,但是为什么能解决问题还没有弄清楚。最后,联系ST原厂支持,给出了解释,这是ST F4系列芯片上一个SPI 相关的bug:SPI挂在APB总线上,APB总线的频率与CLK 引脚的GPIOspeed有一个约束关系,如果配置的不匹配则可能出现MCU芯片内部的时钟不同步问题。具体解释附下:

项目中配置的APB总线时钟正好是90M,所以SPI 的CLK引脚的GPIO speed至少要配置为HIGH。

三、修改

四、验证

高温环境中,设备连续运行24小时,未再出现读写spiFlash失败现象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值