打印
[STM32F0]

ST大本营+STM32F030 从机SPI回送数据错误的问题分析

[复制链接]
1524|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhouzpd|  楼主 | 2017-7-20 18:43 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
最近在做一个SPI通信,发现主机发送数据从机能接收,但从机回送的数据主机接收错误,
将从机放入发送缓冲的数据打印出来,发现和示波器上的波形数据不一样,但主机接收的和示波器数据一样
故可确定主机的接收没问题,问题出在从机的回送上了。

数据正常波形


数据异常波形


下面是问题分析的过程:
1、配置问题?
  主机和从机都是STM的芯片,配置都是一样的,但本着不怕一万只怕万一的原则,将从机从新配置了几种状态,
结果数据更乱了。故先排除配置问题
2、通信速度问题?
  SPI是时钟同步的,速度才1M,应该不存在从机速度匹配问题,只要不是太快。
  将主机的读取由读一串改为单个读取,结果正确了。

原来是从机回送中断不及时,导致的数据错位。(由于其他原因,SPI的中断优先级不是最高)
为了验证这一结论,从机进入中断时取反一个IO,通过示波器观察确实是中断不及时(没有拍照了)

结论
以后SPI还是用DMA比较好。
示波器是分析底层的利器
沙发
feelhyq| | 2017-7-20 19:08 | 只看该作者
本帖最后由 feelhyq 于 2017-7-20 19:16 编辑

楼主这个结论........ “以后SPI还是用DMA比较好”,那要是你的片子不支持DMA怎么办?

使用特权

评论回复
板凳
feelhyq| | 2017-7-20 19:15 | 只看该作者
从你描述的现象来看,单个读取是对的,那么原因很可能出现在片选CS上,建议用时如下两种方法解决。
1.主机每发送完一个dummy字节(通过发送dummy产生时钟),之前拉低片选,发送完后在拉高片选。读多个字节重复该操作。

2.主机和从机都是用SPI3模式,即时钟信号在空闲时为高电平(polarity = 1),第二个有效边沿采样(phase =1),
不过从波形来看,貌似你好像是使用的SPI3模式

使用特权

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

本版积分规则

22

主题

330

帖子

1

粉丝