打印
[以太网/USB/其他总线]

浅谈USART、SPI、I2C三种常用通信协议的异同优劣

[复制链接]
2457|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
呐咯密密|  楼主 | 2022-1-12 12:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
协议 USART SPI I2C
总线 TXD、RXD、GND CSN、MISO、MOSI、GND VCC、GND、SCL、SDA
同步/异步 异步 同步 同步
全/半双工 全双工 全双工 半双工
传输速度 较低
场景 板内/板间 板内/板间(板间距离需要短,速度需要低) 板内
模式 一对一 一对多 一对多/多对多
多从机实现 不可多从机 使用CSN寻址 地址
等了这么多期,终于有一期我能稍微参加一点的了,简单的三种协议对比可参考上表,但是因为环境和应用的偏差,以及大神的花式操作,上表所述可能不尽详细,望各位海涵。
USART
首先是USART,这是一种异步的全双工通信方式,通信速度一般较低。因为没有时钟线,所以通信的双方需要保持相同的波特率,否则会造成数据异常。单纯的USART通信只适合短距离的通信,但是在此基础上加上RS485、RS232等电路也可实现较远距离的通信。传统的USART通信波特率一般在115200bps及以下,但是现在的技术提升,可以达到4M甚至8M的通信波特率。属于简单易用的通信方式。在代码实现和调试时都比较简单。
SPI
SPI是一种高速的同步全双工通信,因其具有时钟线和数据接收和发送线,可以做到数据收发一体。四根线分别是CS(片选)、MOSI(主发从收)、MISO(从发主收)、CLK(时钟)。通信时主机送出CLK信号,主机到从机的数据在MOSI线上传输,从机到主机的数据在MISO线上传输。在启动传输之前,需要先拉低,对应从机的CS管脚,在传输完成之后,再拉高CS管脚。缺点是在进行一主多从通信时,每多一个从机就多一根CS线,在高速以及硬件IO足够时可选用。
I2C
I2C是一种低速的同步半双工通信。撇开电源线,I2C只有两根通信线,一根SCL用于时钟同步,一根SDA用于数据传输。和从机通信时靠7bit的地址寻找设备,所以通信开始前先发送起始信号,再发送7比特位的地址数据和1比特位的读写信号,因为每个从设备都有唯一的地址,当从设备发现主机发送的地址与自身地址相匹配就会拉低SDA(即回复ACK信号),主机收到ACK回复,便可发送或接收数据,传输完成之后,主机发送停止位,完成该次传输。此方式可实现多机间的通信,每个设备都可作为主机或从机。通信方式灵活,速度偏慢。且协议对一新手不太友好,如果对IIC的速度要求不高,一般都采用软件模拟的方式进行I2C通信。因为硬件IC2多容易卡死。但是随着产品的发展和工程师的优化,目前大多MCU的硬件I2C也变得易用了起来。

无论是那种协议,都是为了通信,每个协议都有优势和劣势,在开发过程中可根据项目需要灵活选择,速度要求不高选择USART,高速选择SPI,多机灵活通信就选择I2C。但是大多数的主从会发生在MCU和传感器之前,而传感器的协议都是固定的,开发时只能取匹配传感器。

本人经验有限,学识较为浅薄,只能分析这么多,有错误之处还望大佬们包涵指正。谢谢!

使用特权

评论回复
沙发
内政奇才| | 2022-1-13 14:36 | 只看该作者
大佬把三种协议的对比数据建个表就更好了

使用特权

评论回复
板凳
renzheshengui| | 2022-2-5 09:01 | 只看该作者
我不太喜欢iic

使用特权

评论回复
地板
tpgf| | 2022-2-5 09:06 | 只看该作者
哪种更加容易调试啊

使用特权

评论回复
5
wakayi| | 2022-2-5 09:14 | 只看该作者
每种方式都有难易之分

使用特权

评论回复
6
wowu| | 2022-2-5 09:20 | 只看该作者
怎么说呢 iic对时序的要求很严格

使用特权

评论回复
7
xiaoqizi| | 2022-2-5 09:25 | 只看该作者
既然存在就 有存在的合理性

使用特权

评论回复
8
木木guainv| | 2022-2-5 09:42 | 只看该作者
三种通讯的应用场合是不一样的

使用特权

评论回复
9
asmine| | 2022-2-8 15:17 | 只看该作者
串口一般是板间通信

spi和i2c一般是板内通信

使用特权

评论回复
10
豌豆爹| | 2022-2-9 14:55 | 只看该作者
学习一下比较一下

使用特权

评论回复
11
B1lanche| | 2022-2-16 16:21 | 只看该作者
讲的挺好,感谢楼主分享啊,I2C也有速度快的

使用特权

评论回复
12
Alina艾| | 2022-2-16 17:54 | 只看该作者
SPI的话,一般比较常用,驱动屏之类的还是很奈斯的

使用特权

评论回复
13
Carmen7| | 2022-2-16 18:05 | 只看该作者
串口用的多,串口可以做板对板之间通讯,也可以做板与外设之间的通讯

使用特权

评论回复
14
Betty1299| | 2022-2-16 18:26 | 只看该作者
其实优势我觉得就是速率吧,SPI好像速率较高?

使用特权

评论回复
15
Betty996| | 2022-2-16 19:13 | 只看该作者
串口点对点通讯还是有优势的,如果是总线来说,不行

使用特权

评论回复
16
Emily999| | 2022-2-16 19:23 | 只看该作者
SPI和I2C是有总线和地址的,串口不能,不过串口可以用通信芯片实现串口总线

使用特权

评论回复
17
Charlene沙| | 2022-2-16 19:47 | 只看该作者
这个还是得看实际情况,如果实际来说需要高速而且IO用的少,可以考虑串口

使用特权

评论回复
18
Candic12e| | 2022-2-16 20:02 | 只看该作者
个人还是比较喜欢用串口和SPI

使用特权

评论回复
19
alxd| | 2022-2-16 20:13 | 只看该作者
你可以看看你平时用的那种通信比较多哈,这种通信就是很有优势

使用特权

评论回复
20
Belle1257| | 2022-2-16 20:25 | 只看该作者
还得是串口,通信稳定,而且距离能长一点

使用特权

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

本版积分规则

认证:苏州澜宭自动化科技嵌入式工程师
简介:本人从事磁编码器研发工作,负责开发2500线增量式磁编码器以及17位、23位绝对值式磁编码器,拥有多年嵌入式开发经验,精通STM32、GD32、N32等多种品牌单片机,熟练使用单片机各种外设。

489

主题

3834

帖子

47

粉丝