[热门应用] 单片机SPI还能实现单线半双工模式?

[复制链接]
 楼主| probedog 发表于 2024-10-29 10:06 | 显示全部楼层 |阅读模式
本帖最后由 probedog 于 2024-10-29 10:09 编辑

SPI:Serial Peripheral Interface,串行外设接口。
SPI是嵌入式项目中常用的一种通信接口,正常情况下,SPI都是“双线”全双工模式。但有些情况由于产品设计的要求或者接线数目的限制, 外设会使用单线半双工模式。
SPI半双工原理
SPI单线半双工,指少一根数据线,即只有SDI/SDO,SCLK,GND 三根线。这种方式在相同的连接线的基础上,比UART更具备稳定的通讯能力和更高速的数据传输量。
硬件连接方式:通常情况下MCU端只需要把MOSI和MISO管脚短接, 但需要考虑MOSI实际输出能力和设备端的输出电平状态因素, 建议串接一个电阻避免由于双方同时输出不同的高低电平造成的短路现象。

437067204362a0259.png
单片机实现SPI半双工
现在绝大部分单片机都集成了 SPI 外设,而且几乎都支持全双工模式。但是,通过一定设置,还是可以支持半双工模式。
本文以瑞萨 RA 系列单片机为例,给大家讲述一下实现方法。
FSP配置:只需要按照实际通讯模式的要求做配置就可以。DTC功能和中断回调函数等的配置也是按照FSP的手册说明来做就可以。


1539367204379667e5.png
由于SPI本身是采用全双工运行的, 就算调用函数 (R_SPI_Read) 在MISO做接收数据时, MOSI也是会有同步输出的。但在单线的情况下, 这样就会干扰到Slave端的数据输出, 甚至造成数据线上的短路情况。所以需要在接收数据前将MOSI的管脚配置改为GPIO 功能, 并且配置为输入状态, 这样MOSI管脚就不会在接收的过程中制造干扰。在接收完毕后将MOSI管脚的配置还原为外设功能的MOSI状态。
发送数据:直接调用函数R_SPI_Write()或者R_SPI_WriteRead().


117306720439448eef.png
切换到接收状态并接收数据:


33499672043a3925b2.png
还原MOSI状态:


30680672043b7a98b6.png
通过以上的软件配置流程,单线半双工模式的SPI通讯就能够正常运行。

钟爱柳州 发表于 2024-10-29 16:29 | 显示全部楼层
实测可行
您需要登录后才可以回帖 登录 | 注册

本版积分规则

486

主题

3268

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部

486

主题

3268

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部