找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1106|回复: 8
收起左侧

SPI正真用上全双工的实际应用有那些?

[复制链接]
ID:146878 发表于 2024-11-4 17:10 | 显示全部楼层 |阅读模式
玩单片机好几年了,用过很多SPI接口的设备,但是一直没有哪个是真正有用到SPI发送时同时接收的功能?都是发送命令地址,然后发FF从MISO读取。
有没有大佬做过真正用上全双工功能的项目?
回复

使用道具 举报

ID:1135506 发表于 2024-11-4 20:48 来自手机 | 显示全部楼层
确实,在使用SPI(串行外设接口)通信时,很多情况下我们并不需要真正的全双工通信。通常的应用场景中,主设备会先发送命令或地址,然后发送一个或多个空闲字节(如0xFF)以从从设备读取数据。这种模式实际上是一种半双工通信,因为虽然数据可以在两个方向上传输,但并不是同时进行的。  然而,SPI协议本身支持全双工通信,即主设备和从设备可以同时发送和接收数据。这样的功能在某些特定应用中非常有用,比如:  1. **实时控制与反馈** - 在一些控制系统中,主控器可能需要持续发送控制信号给执行器,同时接收来自传感器的反馈数据。这种情况下,全双工通信可以减少延迟,提高系统的响应速度。  2. **高速数据传输** - 当需要在两个设备之间快速交换大量数据时,利用全双工特性可以有效提升数据吞吐量。  3. **多路复用** - 在一些复杂的数据采集系统中,主设备可能需要同时向多个从设备发送配置信息,并同时接收来自这些设备的状态信息。  4. **同步操作** - 对于要求高度同步的操作,例如同步多个外部设备的工作状态,全双工通信可以确保所有设备之间的操作更加一致。  实现全双工SPI通信的关键在于软件设计。当主设备发送数据的同时,也需要正确处理从设备返回的数据流。这通常涉及到更复杂的编程逻辑,以及对SPI硬件特性的深入了解,包括中断处理、DMA(直接内存访问)等高级功能的使用。  如果你正在寻找具体的例子,可以考虑查找有关高速数据采集系统、实时控制系统或同步多设备操作的项目。这些领域的文献和技术文档可能会提供一些灵感和实际的实现细节。此外,开源硬件社区(如Arduino、Raspberry Pi等)也是寻找全双工SPI应用案例的好地方。
回复

使用道具 举报

ID:190832 发表于 2024-11-4 21:00 | 显示全部楼层
两个STM32通过SPI通信,主从都用DMA。
回复

使用道具 举报

ID:440403 发表于 2024-11-4 23:16 | 显示全部楼层
我之前有一个想法,就是一边读w25q,一边把读出来的数据刷到lcd上面,先读取一帧,然后就读下一帧,然后刷上一帧
回复

使用道具 举报

ID:807591 发表于 2024-11-5 07:50 | 显示全部楼层
这种事情只能异步传输,除非能做到   你还没开口 别人就一定知道你要说什么
回复

使用道具 举报

ID:830831 发表于 2024-11-5 12:02 | 显示全部楼层
没细研究过这个东西,有中断模式吗?有的话,就能双工
回复

使用道具 举报

ID:624769 发表于 2024-11-5 12:35 | 显示全部楼层
一般,真正双工用在 你自己设计的双机通讯里,比如,你发一个 8位地址,然后,发下一个8位地址的时候,从机正好把上一个8位地址存储的8位数据传上来,这样就真正实现随机读取了,也可以衍生到 发送32位地址,接收32位数据。而市面上常见的SPI器件,大多都是设计好顺序上传,所以只发一个首地址,后面就会源源不断的把数据传上来,所以不需要主机不停的给新地址,此时,你如果需要有点参与感的话,可以把 下发0xff 改成后续的地址,是不是会看上去更舒服点?
回复

使用道具 举报

ID:23640 发表于 2024-11-5 13:59 | 显示全部楼层
所有的通信不都是一问一答的方式吗?
回复

使用道具 举报

ID:146878 发表于 2024-11-8 00:19 | 显示全部楼层
综合前边几楼的思路。我能想到一个应用就是主从都采用消息队列的方式通信时,或许可以一定程度用上全双工。主机从机有数据就按协议格式打包往队列里扔,没数据就发0xff。SPI都是一直工作。这样主机只是提供始终维持信息的通信,数据上并没有主从之分。不过这样就有点像是多了clk的UART。不如直接用UART吧。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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