[AT32F403/403A] spi从机数据错位

[复制链接]
 楼主| 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 来自手机 | 显示全部楼层
软片选还是硬片选?
 楼主| 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上升沿中断后初始化);
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拉低,不发送数据时无条件拉高。
单片小菜 发表于 2020-12-21 11:09 | 显示全部楼层
恭喜楼主,解决了,就好了,没有特别的了。
musich 发表于 2020-12-21 23:56 | 显示全部楼层
SPI/I2S 从机错位, 这是先天的, 原理上很难根治,

可这样验证: 在主机持续发送数据时, 对地短路一下 SCK, 大概率会错位, 错位后 就不可恢复了.
hoop 发表于 2020-12-23 11:43 | 显示全部楼层
musich 发表于 2020-12-21 23:56
SPI/I2S 从机错位, 这是先天的, 原理上很难根治,

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

没错,这是协议决定的,所以做好同步是关键,且用好NSS的话,还能规避很多问题
kepe 发表于 2020-12-31 14:55 | 显示全部楼层
速度多少呀?
csv7k1 发表于 2020-12-31 14:56 | 显示全部楼层
为什么要对地短路一下?
hoop 发表于 2021-1-1 17:22 | 显示全部楼层
csv7k1 发表于 2020-12-31 14:56
为什么要对地短路一下?

我理解他是想故意造干扰吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

9

帖子

0

粉丝
快速回复 返回顶部 返回列表