打印
[AT32F403/403A]

spi从机数据错位

[复制链接]
1172|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
142207103117|  楼主 | 2020-12-14 11:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
AT32f403做spi从机,主机发送aa,从机接收后转发给主机,现发现从机接收不正确,转出去也应该是不正确的,可是在逻辑分析仪上看到的,mosi发出的是aa,mosi上也是aa,这就很奇怪,单片机接收不正确,收到的是55,发出去也是55,逻辑分析仪却显示都是对的。。。。(主从配置都一致)

使用特权

评论回复
沙发
hoop| | 2020-12-14 11:51 | 只看该作者
波特率多大,NSS怎么用的,比较怀疑是主机初始化SPI及GPIO产生的边沿被从机当做一个数据CLK边沿了

使用特权

评论回复
板凳
自己的灌饼| | 2020-12-16 16:27 | 只看该作者
你的速度多少?SPI的速度多少?

使用特权

评论回复
地板
lidi911| | 2020-12-16 22:30 | 只看该作者
软片选还是硬片选?

使用特权

评论回复
5
142207103117|  楼主 | 2020-12-19 10:12 | 只看该作者
这几天把问题解决了,我的问题出在SPI的主从同步错误,导致数据移位,最开始查问题发现主、从模式居然没保持一样,主机mode0,从机mode3,神奇的居然正常通信了快两年了,但是只要从机重启,数据一定错位,另外就是有偶发性启动就错位,因此我把从机模式改为mode0,原以为就可以正常了,可反而更糟糕,启动就错位,单独重启从机正常;但我坚信主从mode应该保持一致,这个不容怀疑,与是我开始细致查问题,我还是坚信是软件或者硬件造成的,于是迫不得已我开始折腾硬件工程师来查,别人根本不想理你,觉得他们跑了两年的板子不会有问题,但最后迫于项目压力要甩锅,别人帮我接好测试线上逻辑分析仪,更奇怪的问题发生了,从机接收错误的情况下(主机发来aa,从机收到55),从机将收到的转给主机(将收到的55转给主机),逻辑分析仪上看到的都是正常(mosi上是aa,miso上也是aa),于是我又开始怀疑了,逻辑分析仪不对?还会从机错错得对?于是我感觉自己真的找不到原因了,就想错位后的处理办法,偶尔听到一个同事说,接收前读DR寄存器就可以清楚里面的内容,这特么带我入沟,查资料看到清单的是空标志位,并不能清理啥,毕竟主机的sck后面有发,错位了不可能清理就好了,还是出错后重新初始化吧,这样靠谱。这时候问题就来了,主机每10ms就发一包数据,我在什么时候初始化呢?必须在当前包接收完,下一包来之前,不然还会引入移位,这时我想到的就是NSS信号脚,从机SPI的nss做软件吧,采用上升沿中断触发,就知道当前接收完,结果我配了不起作用,我特么连个外部中断都不会了?肯定不是,我开始怀疑硬件接错线了(说明一下,我们代码不能仿真),真的他妈NSS脚错了,到这里才基本完成。
总结,spi数据移位问题,要确保主从mode一致;硬件管脚接对;从机先启动,做握手处理,或者数据错了后的重新初始化处理(考虑初始化后再错,反复初始化问题,可利用NSS上升沿中断后初始化);

使用特权

评论回复
6
hoop| | 2020-12-20 15:10 | 只看该作者
本帖最后由 hoop 于 2020-12-20 15:11 编辑
142207103117 发表于 2020-12-19 10:12
这几天把问题解决了,我的问题出在SPI的主从同步错误,导致数据移位,最开始查问题发现主、从模式居然没保 ...

恭喜,解决了就好。SPI通讯做好同步是关键,不然初始化时的CLK翻转或者其他干扰被从机当有效CLK边沿的话,通讯永远无法正常
我比较喜欢从机用硬件NSS主机用软件NSS,每次主机发送数据时才将连接到从机NSS线的GPIO拉低,不发送数据时无条件拉高。

使用特权

评论回复
7
单片小菜| | 2020-12-21 11:09 | 只看该作者
恭喜楼主,解决了,就好了,没有特别的了。

使用特权

评论回复
8
musich| | 2020-12-21 23:56 | 只看该作者
SPI/I2S 从机错位, 这是先天的, 原理上很难根治,

可这样验证: 在主机持续发送数据时, 对地短路一下 SCK, 大概率会错位, 错位后 就不可恢复了.

使用特权

评论回复
9
hoop| | 2020-12-23 11:43 | 只看该作者
musich 发表于 2020-12-21 23:56
SPI/I2S 从机错位, 这是先天的, 原理上很难根治,

可这样验证: 在主机持续发送数据时, 对地短路一下 SCK,  ...

没错,这是协议决定的,所以做好同步是关键,且用好NSS的话,还能规避很多问题

使用特权

评论回复
10
kepe| | 2020-12-31 14:55 | 只看该作者
速度多少呀?

使用特权

评论回复
11
csv7k1| | 2020-12-31 14:56 | 只看该作者
为什么要对地短路一下?

使用特权

评论回复
12
hoop| | 2021-1-1 17:22 | 只看该作者
csv7k1 发表于 2020-12-31 14:56
为什么要对地短路一下?

我理解他是想故意造干扰吧

使用特权

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

本版积分规则

2

主题

9

帖子

0

粉丝