打印
[信息]

【实战经验】SPI 接收数据移位分析一例

[复制链接]
3347|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
香水城|  楼主 | 2015-12-16 14:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 香水城 于 2017-8-16 14:49 编辑

SPI 接收数据移位分析一例


       问题:
该问题在不同客户使用不同芯片的SPI功能时都曾经提到.
主要现象是slave端接收到的数据时有移位现象,例如0x10接收成0x08。此种移位一旦发生,当前通讯的后续数据也都发生了移位。


调研:
重复进行接收数据试验,发现并非所有情况下数据接收都有问题,但是某次通讯中有某个字节发生移位,则后续字节均会发生移位现象。只有将当次通讯中断,重新进行新的通讯。
经过查看波形,发现数据线上的波形是正确的。再仔细查看,发现时钟和数据不匹配,即按照时钟来读数据,接收的数据是正确的——然而并非是master端发送的数据。
由于SPI属于同步接口,通讯的时钟完全由master端提供。因此,一旦通讯开始,slave端是无法区分时钟线上的沿变化是否是一个有效时钟。这样当这个沿变化满足SPI电气特性的要求的时候,就被当成一个有效时钟从而同样可以接收数据。此时,由于master端和slave端的各自认为的时钟实际上已经有差别,自然slave端接收的数据也就无法保证正确了。
常见的一个不同步的例子是当master端开始发送数据时,slave端还未完成初始化。于是,slave端事实上是从数据的中间开始接收的,这样也就导致后续数据同样出错。


      结论:
通过以上的分析可以得知,该问题是由于SPI通讯中master端和slave端不同步造成的,而不是器件本身问题。


      处理:
重新考虑程序设计,确保master端和slave端保持时钟的同步性;
同时,考虑到通讯过程中可能出现的干扰,在应用层对接收的数据进行校验。常见的处理方法有CRC校验,checksum校验;或者多次发送数据在接收端进行判决。
一旦在通讯中发现数据出错, 则中断当前通讯重新进行通讯。


对应PDF:SPI接收数据移位

更多实战经验请看:【ST MCU实战经验汇总贴】



沙发
mmuuss586| | 2015-12-16 17:15 | 只看该作者

不错,通讯出错的时候重新开始通讯;

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:意法半导体(中国)投资有限公司
简介:STM32技术专家

596

主题

17099

帖子

287

粉丝