![shequ.stmicroelectronics.cn](./template/st_v1/static/img/logo2.png)
01 问题描述 客户在项目开发中使用STM32F427GT6的SPI连接外部Flash时,发现在常温下能正常读写,但是在高温下一段时间后(大概5分钟左右)出现读写异常的情况。读写异常时发生在发送0x5指令后,返回数据通过软件读取的是0,而硬件抓取的是1。同时也发现同一份代码,同样硬件,如果flash换成别的厂家的,在同样温度条件下又没有出现读写异常。 6 c# z6 T' y6 _7 M% j* ? 02问题的排查根据客户的描述,初期怀疑是否是不同Flash厂家的兼容性问题,现场进一步测试,发现客户软件在70℃环境温度下,除了program、erase时寄存器会读错数据,用只读指令0x03也会读错数据(0x55、0xaa会被软件读成0x54、0xab)。 9 [ ~+ u2 ~% V7 c( K 根据这个结果,我们怀疑到tCLQV这个参数。看上去当前的软件是在flash输出数据时,在CLK下降沿时去采集flash MO数据的,所以高温引起的细微的tCLQV变化可能会导致软件采集出错。我们建议MCU在下一个CLK的上升沿去采集数据,此时flash MO数据已经稳定为1。 & c# R% O6 r% I1 C( c8 P ![]() 现场调整GPIO(即flash CLK/SI/SO)OSPEEDR速率后异常现象消失,GPIO速率调整后CLK信号斜率变大,tCLQV跟随变小,软件抓到错误数据的现象消失,这个实验结果也与上述tCLQV这个怀疑点相匹配。下面是不同GPIO速率下的测试结果。 0 M' m8 b9 J7 L) k6 i' H$ P GPIO_SPEED_FREQ_LOW,常温:tCLQV=5.584ns。 GPIO_SPEED_FREQ_LOW,70℃:tCLQV=6.064ns,FAIL。 GPIO_SPEED_FREQ_MEDIUM,70℃:tCLQV=4.805ns。 GPIO_SPEED_FREQ_HIGH,70℃:tCLQV=4.577ns。 6 w( p7 N+ [# a' C& J 03原因的进一步分析: J: i! h. H& S- {4 A 进一步了解客户系统的初始化,其中clock配置信息如下:采用外部晶振为25MHZ,plln=360,pllm=25,pllp=2,pllq=8,系统主频:25/25*360/2=180MHz,APB2:180/2=90MHz,SPI的波特率为2.8MHz。SPI的引脚设置均为GPIO_Initure.Speed为low。 查找到STM32F42xx的勘误手册,我们发现有同样问题的描述: : d7 \0 `4 ^) {) ^" G ![]() % s9 Z8 `* _# ]0 N 对于文档推荐的2种workaround也和我们测试时发现的一样。 ![]() 至此也是能较好的和客户解释了MCU底层的一些原理,并建议客户按照相应workaround的配置,去设定APB总线与OSPEEDR的关系,最终让问题得以解决。 : |. w- ~- E6 |5 D- a- s, ^ 转载自: STM32单片机 如有侵权请联系删除 ! @! `" l$ ^! G3 [& \. E8 l |
【STM32C0评测】4、驱动Lorasx126x,实现透传
基于STM32的SPI传输时会丢失数据吗?
基于STM32基础的SPI总线概述
基于STM32关闭SPI会导致WRPERR错误的问题分析
基于STM32关闭SPI导致WRPERR错误经验分享
基于STM32CubeMX的SPI总线经验分享
如何实现基于STM32 SPI+DMAWS2812灯的驱动
基于STM32F030硬件SPI经验分享
基于STM32的经验分享—SPI详解
基于STM32的语经验分享—SPI读写FLASH