常用通信总线UART、I2C、SPI以及串行并行,半双工全双工区别

本篇文章通过浅显形象的讲解让大家理解常见的通信总线UART、I2C、SPI,以及串行并行的区别,全双工和半双工是什么意思。

更多技术文章关注“摸鱼IT”,全网首发“摸鱼IT”公众号。

常用通信方式介绍

目录

串行通信和并行通信 

同步通信和异步通信 

单工通信,半双工通信和全双工通信 

常见数据通信总线 

波特率 


串行通信和并行通信 

串行和并行是按照每次传输的数据的方式进行区分。顾名思义,串行就是数据按位依次传输,并行就是多位数据同时并行线传输

常用通信总线UART、I2C、SPI以及串行并行,半双工全双工区别_第1张图片

例如,发送端需要发送“010”三位数据:

串行通信只有一个通道,串行通信需要“0”、“1”、“0”依次传输。

而并行通信有多个通道同时发送数据,如果传输3位的数据“010”,发送端一次同时发送“010”即可完成传输。

同步通信和异步通信 

这个是在串行通信中进行区分的,毕竟并行通信一次发送多组数据,不存在同步异步的问题。

同步串行通信需要时钟线同步,发送端和接收端除了数据线,还需要时钟线进行同步,例如I2C总线。

因为有时钟线,发送端和接收端在同一个时钟节拍下进行工作。同步通信发送数据后,等待接收端发回响应后再发下一个数据。

异步串行通信没有时钟线,只是在发送数据中包含起始和结束标志位start/end 相关信息,接收端根据标志位使用本地时钟进行采样,例如UART总线。

异步通信不需要等待接收端的响应就可以发送下一个数据。异步通信没有统一的时钟节拍,按照各自的内部的时钟节拍进行通信。

单工通信,半双工通信和全双工通信 

这三者的区别在于传输方向的不同

单工通信:数据只能从发送端到接收端,只能单向传输。可以理解为一个单行道,只允许车辆单向行驶。例如广播、遥控器。

常用通信总线UART、I2C、SPI以及串行并行,半双工全双工区别_第2张图片

半双工通信:可以双向传输,但是发送和接收不能同时进行,同一时间下只能发送或者只能接收。也就是说,允许车辆双向行驶,但是不允许车辆同时双向行驶。例如I2C总线。

常用通信总线UART、I2C、SPI以及串行并行,半双工全双工区别_第3张图片

全双工通信:支持双向传输,同时可以发送和接收数据。也就是允许车辆同时双向行驶,数据可以在发送机和接收机之间同时传输。例如UART总线、电话(说话的同时也可以接收对方的说话)。

常用通信总线UART、I2C、SPI以及串行并行,半双工全双工区别_第4张图片

常见数据通信总线 

UART总线:全称是通用串行异步收发器(Universal Asynchronous Receiver Transmitter),它是串行异步通信总线,可以实现全双工的数据传输。

常用通信总线UART、I2C、SPI以及串行并行,半双工全双工区别_第5张图片

UART总线是由两个数据线和一个GND地线构成。当电平由空闲状态(高电平)转为低电平时,就是数据传输的起始位,然后开始传输数据,传输完8位数据后,由低电平变为高电平,表示结束。

常用通信总线UART、I2C、SPI以及串行并行,半双工全双工区别_第6张图片

I2C总线:是一种串行、半双工同步通信总线。

具体内容在之前文章中有介绍 - 最常用的通信协议 - I2Cicon-default.png?t=N5K3http://mp.weixin.qq.com/s?__biz=MzkxNTUwMjc4Ng==&mid=2247483838&idx=1&sn=a31a0703925dd7d28b606e6024c15817&chksm=c15f6213f628eb05e3fcc88458849df3dce11a380cc88b4750781ebbbef76a95a841ffd444af&scene=21#wechat_redirect

SPI总线:串行外围设备接口(Serial Peripheral Interface),是一种全双工同步通信总线。

它是一主多从的模式,一个主机(master)和一个或多个从机(slave)通信。SPI通信需要4根线,分别是:

SCLK:时钟信号线。由主机来产生。

MOSI:Master Output, Slave Input。主设备从这个线上输出数据,从设备接收数据。也就是主机发送指令给从机。

MISO:Master Input, Slave Output。主设备接收从设备发出的数据,也可以理解为主机读取从机状态。

CS:从机片选信号线。通过片选信号确定与哪个从机进行通信。

常用通信总线UART、I2C、SPI以及串行并行,半双工全双工区别_第7张图片

这三种总线区别特点可以通过这个表看出来。

波特率 

对于各种通信方式中,有一个概念来表示数据的速率,就是波特率,它衡量串口通信速度。

波特率(Baud Rate),单位bps,它表示每秒钟发送的比特数。

如果一个串口的波特率为9600,就表示该串口在一秒钟内可以发送9600个比特的数据。每个数据的传输间隔就是104us。

1s / 9600 = 104us

通过对常见的通信总线类型和区别,还有一些关键概念的介绍,大家是否对通信有了基本的认识?通过生动学习了一个小知识,还是收获满满。

你可能感兴趣的:(嵌入式硬件,驱动开发)