欢迎加入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等技术
创作不易,点个赞支持一下吧!