UART
UART是通用异步收发器(Universal Asynchronous Receiver/Transmitter)的缩写,是一种串行、异步、全双工的通信协议。
串行/并行
串行:一次传输一个数据。
并行:一次传输多个数据。
异步/同步
异步:一方发送,不考虑另一方是否收到,直接进行下一次传输(不带时钟同步信号)。
同步:一方发送,另一方应答,否则不进行下一次传输(带时钟同步信号传输)。
单工/半双工/全双工
单工:单向通信,只能由一方发送数据,另一方接收。
半双工:双方都可发送数据,但同一时刻只能一方发送,一方接收。
全双工:双方都可发送数据,并且可同时发送数据。
波特率
波特率(bits per second):每秒传输的比特位。例如:9600bps,传输一个比特1/9600≈104.2us。
各位含义
空闲位:总线空闲时信号线为‘1’高电平,表示没有数据传输。
起始位:每开始一次通信,发送方发出一个‘0’低电平信号。
数据位:起始位之后是数据位,数据位可以是5、6、7、8,9位,一般都是8位。先发送最低位,最后发送最高位,使用低电平表示‘0’,高电平表示‘1’。
奇偶校验位:可选。
停止位:一次数据的结束标志。可以是1位、1.5位、2位的高电平。
SPI
SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种串行、同步、全双工的通信协议。由于时钟频率可以上百 MHz,因此SPI 速率很快,可以达到几十MHz(Mb/s)。
各位含义
CS/SS(Slave Select/Chip Select):片选信号线,低电平有效。
SCK(Serial Clock):时钟,由主机产生。
MOSI/SDO(Master Out Slave In/Serial Data Output):主机向从机发送数据。
MISO/SDI(Master In Slave Out/Serial Data Input):从机向主机发送数据。
工作模式
SPI有四种工作模式:
SPI模式 | 时钟极性(CPOL) | 时钟相位(CPHA) | 空闲时SCK时钟 | 采样时刻 |
---|---|---|---|---|
0 | 0 | 0 | 低电平 | 第1个边沿 |
1 | 0 | 1 | 低电平 | 第2个边沿 |
2 | 1 | 0 | 高电平 | 第1个边沿 |
3 | 1 | 1 | 高电平 | 第2个边沿 |
时钟极性(CPOL):0/1,串行时钟低/高电平空闲
时钟相位(CPHA):0/1,串行时钟第1/2跳变沿采样
IIC
IIC是集成电路总线(Inter-Integrated Circuit)的缩写,是一种串行、同步、半双工的通信协议,由数据线SDA和时钟SCL组成。每当主机向从机发送完一个字节的数据,主机总是需要等待从机给出一个应答信号,以确认从机是否成功接收到了数据。如果两个或更多的主机同时请求总线,可以通过冲突检测和仲裁防止总线数据被破坏。
起始结束信号
起始信号:时钟线SCL为高时,数据线SDA由高到低。
停止信号:时钟线SCL为高时,数据线SDA由低到高。
注:SDA和SCL同时为高时,为IIC总线的空闲状态。
在起始信号后必须发送7位从机地址+1位方向位,“0”:主机发送数据,“1”:主机接收数据。
数据有效
数据有效:时钟线SCL为高时。
应答信号
应答信号:数据发送完后,时钟线SCL为高时,数据线SDA被拉低。
读写时序
常用的数据收发方式:写一个字节、连续写多个字节、当前地址读一个字节、随机读一个字节、连续读多个字节。
代码基础类
函数指针/指针函数
函数指针是一个指针,用来指向函数的。
指针函数是一个函数,是函数指针指向的那个函数。
段的初始化启动方式
参考文献
[1] UART、SPI、I2C串行通讯协议解释 同步/异步 全双工/半双工通信含义
https://blog.csdn.net/qq_41709234/article/details/122948501
[2] 串行和并行的区别
https://baijiahao.baidu.com/s?id=1736121445985086158
[3] UART串口协议详解
https://zhuanlan.zhihu.com/p/150504364
[4] SPI通信的4种工作模式
https://www.elecfans.com/tongxin/202209301900633.html
[5] 一文深入理解IIC通信基础知识
https://www.elecfans.com/d/1845634.html