打印
[STM32F1]

SPI双机通信出错处理

[复制链接]
1837|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lison0103|  楼主 | 2016-4-27 11:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现在使用stm32F1进行双机通信,使用DMA传输数据,SPI硬件CRC检验
问题是:正常情况不出错是没问题,但是一旦数据出错或者移位了,CRC出错,要怎么处理才可以恢复正常通信呢?
谢谢!
沙发
lison0103|  楼主 | 2016-4-28 08:27 | 只看该作者
顶顶~有人知道怎么处理吗?
看到一些文档上说,一旦在通讯中发现数据出错, 则中断当前通讯重新进行通讯。
尝试出错的时候重新初始化SPI,有时是会不再错了,但有时还是会错

使用特权

评论回复
板凳
dichi| | 2016-4-28 08:44 | 只看该作者
1) spi的错位问题一般是由于spi总线上还有数据,数据又开始填入缓冲器导致的。那么解决起来就需要按照手册上的,先要检查bsy位,确保总线已经不在忙碌了,总线上不忙碌了再进行下一步操作就不会出现错位的现象。2)确保bsy位之后,即使出现错误,也是位错误。位错误有两种可能,一是主从机启动不同时,二是由于缓冲的DR(数据)没有及时取走,导致的数据积压。前一种需要用NSS来保证主机先启动,然后从机启动。 后一种在发送之前,先将数据缓冲的DR读出(就是清空缓冲器)。3)最终的解决方式,必定是环形缓冲+DMA处理方式。快速,无无码!!!!!o(^▽^)o   ...............当然主从机的启动时序也可以在一定程度上减少错位

使用特权

评论回复
地板
lison0103|  楼主 | 2016-4-28 09:25 | 只看该作者
dichi 发表于 2016-4-28 08:44
1) spi的错位问题一般是由于spi总线上还有数据,数据又开始填入缓冲器导致的。那么解决起来就需要按照手册 ...

谢谢回答~
你说的这个主要是预防出错的方法,但是一旦出错了要怎么处理呢?
1、我现在用的也是DMA收发,有去判断bsy位的。
2、1)NSS脚用的是软件管理模式,只能通过延时的方法先让从机先启动
2)发送之前也有读出的,因为用的DMA收发

使用特权

评论回复
5
lison0103|  楼主 | 2016-5-3 19:49 | 只看该作者
顶顶呀~~

使用特权

评论回复
6
lison0103|  楼主 | 2016-5-26 13:28 | 只看该作者
顶一顶~有小伙伴分享一下吗

使用特权

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

本版积分规则

1

主题

14

帖子

0

粉丝