amoBBS 阿莫电子论坛

 找回密码
 注册
搜索
bottom↓
查看: 966|回复: 24

SPI通信问题求助

[复制链接]
发表于 2015-10-20 11:09:19 | 显示全部楼层 |阅读模式
现在在写SPI通信程序,MCU带有SPI通信接口。有个问题想不明白,SPI通信时发送方可以直接把MCU设置为主机,然后再发送数据就好了。
但是从机怎么知道什么时候会发送数据?SPI通信有个SCS选择脚,从机是不是通过检测SCS脚位上的电压来判断是不是要进入接收模式。换句话说
就是每隔一段时间从机都要检测一次SCS脚位上的电压,以决定是否需要接收数据。
发表于 2015-10-20 11:15:06 | 显示全部楼层
片选脚是为了多个从机跟主机通讯用的,就像开关一样。
 楼主| 发表于 2015-10-20 11:16:40 | 显示全部楼层
Hhhhhhhh 发表于 2015-10-20 11:15
片选脚是为了多个从机跟主机通讯用的,就像开关一样。

那我把MCU设置为从机的话是不是只要主机发数据过来他自己会接收
发表于 2015-10-20 11:20:55 | 显示全部楼层
夜尽天明 发表于 2015-10-20 11:16
那我把MCU设置为从机的话是不是只要主机发数据过来他自己会接收

是的。。
发表于 2015-10-20 11:27:25 | 显示全部楼层
一般都是通过中断来干这个事
发表于 2015-10-20 11:39:41 | 显示全部楼层
那个只是片选引脚,主机是不断的查询是否接收到数据。有的硬件模块SPI有IRQ引脚,就可以通过IRQ引脚发送给主机的外部中断,来决定是否接收数据。
发表于 2015-10-20 11:40:16 | 显示全部楼层
两个MCU都默认把SPI设置为从机,DMA方式接收,设置一个足够大的缓冲区,然后设置一个接收中断,在主机发送完成之后向从机产生一个中断信号,从机中断,处理数据。
发表于 2015-10-20 11:42:01 | 显示全部楼层
我在做这个,实际上的双MCU使用SPI通信要实现大量数据通信的话不太好做,
 楼主| 发表于 2015-10-20 11:44:49 | 显示全部楼层
小Z 发表于 2015-10-20 11:39
那个只是片选引脚,主机是不断的查询是否接收到数据。有的硬件模块SPI有IRQ引脚,就可以通过IRQ引脚发送给 ...

明白了,下午测试下,谢谢
 楼主| 发表于 2015-10-20 11:46:40 | 显示全部楼层
momo_li 发表于 2015-10-20 11:42
我在做这个,实际上的双MCU使用SPI通信要实现大量数据通信的话不太好做,

我的通信数据量不会很大,50个字节以内
 楼主| 发表于 2015-10-20 11:47:10 | 显示全部楼层
vmalloc 发表于 2015-10-20 11:27
一般都是通过中断来干这个事

单片机是有通信功能的中断
发表于 2015-10-20 11:49:52 | 显示全部楼层
如果两个 MCU 用 SPI,又想双向有高速度,就必须用两组 SPI 端口
一组端口的中断应答模式速度不行,过去搞过
发表于 2015-10-20 11:53:23 | 显示全部楼层
本帖最后由 zxq6 于 2015-10-20 11:55 编辑

从硬件层来说,丛机只要拉低CS,就激活了SPI模块,不是通过轮询来实现接收的。
接收数据是通过判断SCK引脚状态来判断的。看配置,有些是检测上升沿,有些是检测下降沿。
接收到的数据会放在一个寄存器里面。
当接收到足够的数据位后,(根据配置,8bit,16bit,24bit等等),根据配置,可以向软件系统发送中断信号。
软件系统再来处理接收到的数据。
有些spi还有fifo,这个就更复杂一些了。
至于DMA,那个更复杂了。

有机会,你用fpga实现一次spi,你就懂了。其实很简单的。比fpga实现uart简单太多了。
 楼主| 发表于 2015-10-20 12:00:35 | 显示全部楼层
zxq6 发表于 2015-10-20 11:53
从硬件层来说,丛机只要拉低CS,就激活了SPI模块,不是通过轮询来实现接收的。
接收数据是通过判断SCK引脚 ...

知道怎么用了,不过FPGA我是真心不懂
发表于 2015-10-20 12:37:44 | 显示全部楼层
scs 若是模拟接收,肯定是接中断了。要是MCU自带spi,就不用管了。
fpga 是并行处理,scs等于说是一直处于等待状态。
不存在轮询的说法。
发表于 2015-10-20 13:10:46 | 显示全部楼层
13楼讲的很不错,大赞
只要片选了从机,从机就会把匹配自己的时钟极性和相位的数据缓存,不管你处理不处理数据。
发表于 2015-10-20 13:13:55 | 显示全部楼层
momo_li 发表于 2015-10-20 11:40
两个MCU都默认把SPI设置为从机,DMA方式接收,设置一个足够大的缓冲区,然后设置一个接收中断,在主机发送 ...

spi是全双工的,发送完也就接收完了,不明白为什么还要主从机切换?
求指教...谢谢
发表于 2015-10-20 13:57:22 来自手机 | 显示全部楼层
mvpgpz 发表于 2015-10-20 13:13
spi是全双工的,发送完也就接收完了,不明白为什么还要主从机切换?
求指教...谢谢 ...

主机和从机唯一的区别就是是否提供时钟信号。如果你第三方提供时钟,那么,两方都配置为从机照样可以通信
发表于 2015-10-20 17:24:28 | 显示全部楼层
zxq6 发表于 2015-10-20 13:57
主机和从机唯一的区别就是是否提供时钟信号。如果你第三方提供时钟,那么,两方都配置为从机照样可以通信 ...

在同一个主机下的两个从机 直接 互相 通信么?
这个我倒是没有试过
这种用法一般会出现在什么情况下呢?
难点在哪里?
求指教 谢谢
发表于 2015-10-20 21:23:02 来自手机 | 显示全部楼层
mvpgpz 发表于 2015-10-20 17:24
在同一个主机下的两个从机 直接 互相 通信么?
这个我倒是没有试过
这种用法一般会出现在什么情况下呢?

这种是很极端的抬杠用的,实际上没人这么用。因为,时钟第三方控制,徒增加一个第三方,吃力不讨好。而且,两个从机之间的软件工作量剧增,所以,虽然能够实现目的,但是确实不是一个好的方案的。
发表于 2015-10-21 08:55:25 | 显示全部楼层
mvpgpz 发表于 2015-10-20 13:13
spi是全双工的,发送完也就接收完了,不明白为什么还要主从机切换?
求指教...谢谢 ...

双MCU使用SPI通信,两个MCU都会主动产生数据向对方发送。数据量大,通信频繁。
希望是能在18M的频率下达到90%的利用率,实际上却做不到,主要是MCU的任务太多,不能及时的响应中断,另一方面就是SPI不是很稳定,有时会出问题。
发表于 2015-10-21 10:07:03 | 显示全部楼层
momo_li 发表于 2015-10-21 08:55
双MCU使用SPI通信,两个MCU都会主动产生数据向对方发送。数据量大,通信频繁。
希望是能在18M的频率下达 ...

其实是可以的。使用dma吧。你这个要求。
我在lm3s上,使用dma,可以让spi的效率到95%以上。
发表于 2015-10-21 10:22:46 | 显示全部楼层
zxq6 发表于 2015-10-21 10:07
其实是可以的。使用dma吧。你这个要求。
我在lm3s上,使用dma,可以让spi的效率到95%以上。 ...

双向通信,会出现两个MCU同时要向对方发送数据的情况,这个时候两个MCU都把自己设置为主机,需要一个仲裁,决定谁先发。
我使用的方案是:每个MCU有一个接收忙状态引脚,一个发送开始引脚。先检测对方的接收忙,如果空闲的话把自己的接收置位忙状态,然后设置SPI为主机置位发送信号,开始发送数据,数据发送完成之后,设置SPI为从机,清除接收忙状态,清除发送信号,此时对方产生中断处理数据。
由于MCU执行每条命令是需要时间的,这个方案仍然无法避免发送冲突,尤其是频繁通信的时候。
你那里是使用的什么方案来解决这个问题呢?
发表于 2015-10-21 10:27:49 | 显示全部楼层
momo_li 发表于 2015-10-21 10:22
双向通信,会出现两个MCU同时要向对方发送数据的情况,这个时候两个MCU都把自己设置为主机,需要一个仲裁 ...

哦,不好意思,看错了,我以为是单向通信。
我以前是单向通信,使用的dma,效率很高。
如果双向,暂时还没啥建议的。
发表于 2015-10-21 10:36:07 | 显示全部楼层
zxq6 发表于 2015-10-21 10:27
哦,不好意思,看错了,我以为是单向通信。
我以前是单向通信,使用的dma,效率很高。
如果双向,暂时还 ...

单向的话相对来说简单一些,这个东西做完之后我感觉还是用串口对发比较合适一些,因为SPI仲裁损失的效率太多,18MSPI实际的数据量估计比不上4.5M的串口。
友情提示:标题不合格、重复发帖,将会被封锁ID。详情请参考:论坛通告:封锁ID、获得注册邀请码、恢复被封ID、投诉必读
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|阿莫电子论坛(原ourAVR/ourDEV) ( 公安备案:44190002001997(交互式论坛) 工信部备案:粤ICP备09047143号 )

GMT+8, 2019-9-19 13:08

阿莫电子论坛, 原"中国电子开发网"

© 2004-2018 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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