你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于STM32的SPI读取数据的最后位出错问题经验分享

[复制链接]
STMCU小助手 发布时间:2023-8-21 13:37
01 问题描述
客户在项目开发中使用STM32F427GT6的SPI连接外部Flash时,发现在常温下能正常读写,但是在高温下一段时间后(大概5分钟左右)出现读写异常的情况。读写异常时发生在发送0x5指令后,返回数据通过软件读取的是0,而硬件抓取的是1。同时也发现同一份代码,同样硬件,如果flash换成别的厂家的,在同样温度条件下又没有出现读写异常。

) u+ z% b+ H) \1 b3 V+ H( J
02问题的排查
根据客户的描述,初期怀疑是否是不同Flash厂家的兼容性问题,现场进一步测试,发现客户软件在70℃环境温度下,除了program、erase时寄存器会读错数据,用只读指令0x03也会读错数据(0x55、0xaa会被软件读成0x54、0xab)。

7 H" M( Y. D& K3 M2 m
根据这个结果,我们怀疑到tCLQV这个参数。看上去当前的软件是在flash输出数据时,在CLK下降沿时去采集flash MO数据的,所以高温引起的细微的tCLQV变化可能会导致软件采集出错。我们建议MCU在下一个CLK的上升沿去采集数据,此时flash MO数据已经稳定为1。

- c/ |7 O$ `7 _8 w: ?' g! f
微信图片_20230821133545_1.png
" ~  ]8 m, |' `
现场调整GPIO(即flash CLK/SI/SO)OSPEEDR速率后异常现象消失,GPIO速率调整后CLK信号斜率变大,tCLQV跟随变小,软件抓到错误数据的现象消失,这个实验结果也与上述tCLQV这个怀疑点相匹配。下面是不同GPIO速率下的测试结果。

0 \" x" `7 C! U/ [, L+ {
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。

& }" p, S1 t+ a& ]( k
03原因的进一步分析

! n* W. E. z% p8 {: `" 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。

: v, A1 w' N# i& D' c
查找到STM32F42xx的勘误手册,我们发现有同样问题的描述:
- J/ D: K5 p. g# K, S
微信图片_20230821133545.png
6 f  `# V& j, S* M  z! y: C
对于文档推荐的2种workaround也和我们测试时发现的一样。

' y' a5 v, q5 Z/ J" Q% Y1 ~
微信图片_20230818125818.png
3 H7 [3 }" V7 S4 ?& u8 x9 {4 P. G, x
至此也是能较好的和客户解释了MCU底层的一些原理,并建议客户按照相应workaround的配置,去设定APB总线与OSPEEDR的关系,最终让问题得以解决。
) L$ |* o' W. e% R$ y
转载自: STM32单片机
如有侵权请联系删除
  u$ e% K& p1 q0 g5 G5 K

) t* O( g# @  b
收藏 评论0 发布时间:2023-8-21 13:37

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版