本篇文章通过浅显形象的讲解让大家理解常见的通信总线UART、I2C、SPI,以及串行并行的区别,全双工和半双工是什么意思。
更多技术文章关注“摸鱼IT”,全网首发“摸鱼IT”公众号。
常用通信方式介绍
目录
串行通信和并行通信
同步通信和异步通信
单工通信,半双工通信和全双工通信
常见数据通信总线
波特率
串行和并行是按照每次传输的数据的方式进行区分。顾名思义,串行就是数据按位依次传输,并行就是多位数据同时并行线传输。
例如,发送端需要发送“010”三位数据:
串行通信只有一个通道,串行通信需要“0”、“1”、“0”依次传输。
而并行通信有多个通道同时发送数据,如果传输3位的数据“010”,发送端一次同时发送“010”即可完成传输。
这个是在串行通信中进行区分的,毕竟并行通信一次发送多组数据,不存在同步异步的问题。
同步串行通信需要时钟线同步,发送端和接收端除了数据线,还需要时钟线进行同步,例如I2C总线。
因为有时钟线,发送端和接收端在同一个时钟节拍下进行工作。同步通信发送数据后,等待接收端发回响应后再发下一个数据。
异步串行通信没有时钟线,只是在发送数据中包含起始和结束标志位start/end 相关信息,接收端根据标志位使用本地时钟进行采样,例如UART总线。
异步通信不需要等待接收端的响应就可以发送下一个数据。异步通信没有统一的时钟节拍,按照各自的内部的时钟节拍进行通信。
这三者的区别在于传输方向的不同。
单工通信:数据只能从发送端到接收端,只能单向传输。可以理解为一个单行道,只允许车辆单向行驶。例如广播、遥控器。
半双工通信:可以双向传输,但是发送和接收不能同时进行,同一时间下只能发送或者只能接收。也就是说,允许车辆双向行驶,但是不允许车辆同时双向行驶。例如I2C总线。
全双工通信:支持双向传输,同时可以发送和接收数据。也就是允许车辆同时双向行驶,数据可以在发送机和接收机之间同时传输。例如UART总线、电话(说话的同时也可以接收对方的说话)。
UART总线:全称是通用串行异步收发器(Universal Asynchronous Receiver Transmitter),它是串行异步通信总线,可以实现全双工的数据传输。
UART总线是由两个数据线和一个GND地线构成。当电平由空闲状态(高电平)转为低电平时,就是数据传输的起始位,然后开始传输数据,传输完8位数据后,由低电平变为高电平,表示结束。
I2C总线:是一种串行、半双工同步通信总线。
具体内容在之前文章中有介绍 - 最常用的通信协议 - I2Chttp://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:从机片选信号线。通过片选信号确定与哪个从机进行通信。
这三种总线区别特点可以通过这个表看出来。
对于各种通信方式中,有一个概念来表示数据的速率,就是波特率,它衡量串口通信速度。
波特率(Baud Rate),单位bps,它表示每秒钟发送的比特数。
如果一个串口的波特率为9600,就表示该串口在一秒钟内可以发送9600个比特的数据。每个数据的传输间隔就是104us。
1s / 9600 = 104us
通过对常见的通信总线类型和区别,还有一些关键概念的介绍,大家是否对通信有了基本的认识?通过生动学习了一个小知识,还是收获满满。