欢迎加入QQ技术交流群:100479172

一、什么是同步/异步通信?

同步通信:一方发送,另一方应答,否则不进行下一次传输(带时钟同步信号传输)。

异步通信:一方发送,不考虑另一方是否收到,直接进行下一次传输(不带时钟同步信号)。

二、什么是全双工/半双工?

单工:单向通信,只能由一方发送数据,另一方接收。

半双工:双方都可发送数据,但同一时刻只能一方发送,一方接收。

全双工:双方都可发送数据,并且可同时发送数据。

三、常见通讯方式

UART: 全双工、异步通信
SPI :    全双工、同步通信
I2C:     半双工、同步通信

四、UART(Universal Asynchronous Receiver/Trasmitter,异步串行收发器)

USART:通用同步和异步收发器
UART:通用异步收发器

区别:USART在异步通信的时候,它与UART没有什么区别,但是用在同步通信的时候,区别就很明显了,大家都知道同步通信需要时钟来触发数据传输,
也就是说USART相对UART的区别之一就是能提供主动时钟。

串行接口(串口):数据一个一个的顺序传输,通信线路简单。使用两条线即可实现双向通信,一条用于发送,一条用于接收。

空闲位:数据线在空闲状态的时候为逻辑“1”状态。 
起始位:当要传输数据的时候先将数据线拉低,表示开始数据传输。 
数据位:即要传输的数据,数据位数可选择 5~8 位,低位在前,先传输,高位最后传输。 
奇偶校验位:这是对数据中“1”的位数进行奇偶校验用的,可不使用。 
停止位:数据传输完成标志位,停止位的位数可以选择 1 位、1.5 位或 2 位高电平,一般都
选择 1 位停止位。 
波特率:波特率就是 UART 数据传输的速率,也就是每秒传输的数据位数。 

五、I2C(Inter-Integrated Circuit)

* SCL(串行时钟线)
* SDA(串行数据线)
这两条数据线需要接上拉电阻,总线空闲的时候 SCL 和 SDA 处于高电平。I2C 总线标准模式下速度可以达到 100Kb/S,快速模式下可以达到
400Kb/S。

 1.起始位:在 SCL 为高电平的时候,SDA 出现下降沿就表示为起始位。

 2.停止位:在 SCL 位高电平的时候,SDA出现上升沿就表示为停止位。

3.数据传输:数据传输需要保证在 SCL 高电平期间,SDA 上的数据稳定 。

4.应答信号:主机发送完 8 位数据以后紧跟着的一个时钟信号就是给应答信号使用的。从机通过将 SDA
拉低来表示发出应答信号,表示通信成功,否则表示通信失败。 

5.I2C写时序:写入从机地址 + 读写位 + “写入”要写入的寄存器地址 + 写数据。

 6.I2C读时序:写入从机地址 + 读写位(写) + “写入”要写入的寄存器地址 + 再次写入从机地址 + 读写位(读) + 读数据

7.I2C多字节读写时序

多字节读写时序和单字节的基本一致,只是在读写数据的时候可以连续发送多个自己的数据,其他的控制时序都是和单字节一样的。 

六、SPI(Inter-Integrated Circuit 串行外设接口)

SPI 时钟频率相比 I2C 要高很多,最高可以工作在上百 MHz。因此,SPI 接口的通信速度很快,I2C 最多 400KHz,但是 SPI
可以到达几十MHz。 

一般 SPI 需要 4 根线,但是也可以使用三根线(单向传输),标准的 4 线 SPI 含义如下:

1.CS/SS(Slave Select/Chip Select),这个是片选信号线,用于选择需要进行通信的从设备。I2C
主机是通过发送从机设备地址来选择需要进行通信的从机设备的,SPI 主机不需要发送从机设备,直接将相应的从机设备片选信号拉低即可。

2.SCK(Serial Clock),串行时钟,和 I2C 的 SCL 一样,为 SPI 通信提供时钟。 

3.MOSI/SDO(Master Out Slave In/Serial Data Output),简称主出从入信号线,这根数据线只能用于主机向从机发送数据
,也就是主机输出,从机输入。

4.MISO/SDI(Master In Slave Out/Serial Data Input),简称主入从出信号线,这根数据线只能用户从机向主机发送数据
,也就是主机输入,从机输出。 

通过串行时钟极性(CPOL)和相位(COPHA)搭配出SPI的四种工作模式: 

* CPOL = 0:串行时钟低电平空闲
* CPOL = 1:串行时钟高电平空闲
* CPHA = 0:串行时钟第一个跳变沿传输数据
* CPHA = 1:串行时钟第二个跳变沿传输数据

以CPOL = 0, CPHA = 0为例(低电平空闲, 第一个时钟信号边沿传输数据), SPI全双工通信时序图如下:

欢迎大家加入嵌入式linux技术交流群(QQ:100479172),也欢迎大家一起讨论C语言、C++、单片机、数据结构、Qt、Linux、IMX6ULL等技术

 创作不易,点个赞支持一下吧!

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信