UART ,IIC 和SPI三种总线协议
1.UART
1.1 简介
UART(Universal Asynchronous Receiver/Transmitter)即通用异步收发器。
常见的串行、异步通信总线,两条数据线Tx、Rx,实现全双工通信,常用于主机与外设的通信,点对点。
1.2 硬件连接
交叉连接

1.3 串口数据帧格式

在起始阶段, 向数据线发送一位逻辑0 (低电平), 以此启动数据传输过程.
数据字段通常包含5至8个二进制数字, 并按照从低位到高位的顺序依次传输.
奇偶校验用于确保传输的数据准确性. 校验字段可选可不选, 主要取决于具体的通信需求.
终止信号用于指示数据传输已结束. 它可以是以单个逻辑1 (高电平) 或多个连续的高电平表示.
空闲时段中, 若无数据传输请求, 则应保持高电平状态.为了确保通信稳定性和准确性, 发送端与接收端必须严格同步其工作频率. 这一要求来源于避免累计误差的可能性. 因此, 不应连续发送超过一个字节的数据块.
UART 传输速率的概念 —— 比特率.
比特率的概念: 比特率是指单位时间内能够传递的数据量, 单位是 bit/second (每个比特). 例如: 比特率为9600bps 表示每秒传递9600个比特; 而比特率为115200bps 则意味着每个比特仅需8微秒的时间.

1.4 实现方式
以下是对原文的改写
1.5 UART存在的问题
- 电气接口存在不一致现象。
UART仅规定了信号的时间序列,并未对接口的电气特性做出规范。
(1) UART在不同器件间建立连接时缺乏统一的标准规范,
导致操作较为不便。
(2)通常情况下,在UART通信中所采用的电压水平与处理器内部的工作电压一致,
由于不同处理器的工作电压有所差异,
导致无法直接实现相互兼容。 - 系统在抗干扰方面的能力较弱。
通常采用TTL(其中+5V相当于逻辑"1"状态, 0V相当于逻辑"0"状态)的形式来表示数字信号的高低电平, 然而由于其抗干扰性能不足, 在实际应用中可能会导致数据传输时出现误码现象
3、通信距离极其有限
TTL信号因易受干扰而传输范围受限,在同一印制电路板上仅限于相邻的两个芯片之间进行通信。
2.IIC
2.1 简介
采用两根双向信号线的I2C总线系统仅包括数据线SDA和时钟线SCL两种基本线路。
该系统能够支持多主机与多从机之间的通信模式以及单主机与多个从机之间的通信模式。
I2C总线系统具备串行传输特性、半双工特性以及硬件结构简单等优点,并且具有低成本高性价比的特点。
2.2 硬件连接
把芯片的SCL接到总线SCL上,把芯片的SDA接到总线SDA上。
IIC总线是一种多主机总线,连接在总线的器件分为主机和从机,主机有权发起和结束一次通信,而从机智能被呼叫。
当由多个主机同时启用总线时,IIC也具有冲突检测和仲裁的功能来防止错误的产生。
每个器件都可以作为主机或者从机,但是同一时刻只能由一个主机。总线上增加和删除器件,不影响其他器件正常工作。
每一个连接到IIC总线上的器件都有一个唯一的地址(7bit)。
一个器件,当它接收数据的时候是作为接收器,发送数据的时候作为发送器。
2.3 通信过程
2.3.1 IIC的信号
i2c总线是一种同步通信总线,也就表示通信双方的通信过程要在各种时钟信号的作用下实现。
起始信号、终止信号、应答信号、非应答信号、数据接收和发送信号
起始信号:SCL为高电平时,SDA由高变低表示起始信号
停止信号:SCL为高电平时,SDA由低变高表示停止信号
字节传输与应答
IIC总线通信时每个字节为8位长度,数据传输时先发高位、再发低位。
发送器每发完一个字节数据,接收器必须发送1位应答位来回应发送器,即一帧共有9位。
IIC总线协议:

- 主机向系统发送启动指令
- 主机向目标设备传输包含其地址信息的7位编码,并在末尾附加一个读写控制标志位
- 目标设备接收到后立即做出响应
- 数据传输端接收并完成数据包的传输
- 数据接收端完成确认反馈
- 再次执行数据传输流程
- 终止操作前已完成所有通信环节
- .....
当主机发出终止指令时,通信流程自然结束。
3.SPI
3.1 简介
SPI常被缩略为串行外设接口(SPI),是一种由Motorola公司开发的技术。
它是采用同步串行接口技术的一种先进电子设备。
该技术具有多个显著特点:运行速度快且高效;支持全双工通信;采用串行总线方式;具备主从机模式;操作简便;传输效率高。
该系统不带确认机制,在接收方无法确认数据是否成功传输。
相比于IIC协议而言,其可靠性略低于IIC协议。
3.2 硬件连接
SPI总线通信存在四根数据线进行连接:

(1)SDO/MOSI:该系统通过主端口实现数据输出,并接收来自外设的数据
(2)SDI/MISO:该系统通过主端口实现数据输入,并发送给外设
(3)SCLK:此信号用于定时器的时钟源,并且其来源为控制器内部生成
(4)CS/SS:此信号用于控制外围芯片的启用状态,并且其功能由控制器决定当存在多个外设需要连接时,在每个外设上都需配置一个片选引脚以连接至主机内线总线上。具体而言,在与主机进行通信之前,请确保将对应外设的片选引脚电平设置为高电平或低电平。
3.3 SPI四种模式
SPI通信包含4种不同的通信模式。 各种不同类型的设备在出厂时通常会被预设为特定的通信模式这一特性是固定的 但为了实现有效的数据传输我们必须确保所有参与通信的端口都运行在同一具体的通信协议上 因此 我们可以通过调整主设备的SPI参数设置来进行相应的配置 具体来说 我们可以利用CPOL设置(时钟极性)以及CPHA设置(时钟相位)来进行相应的调整

CPOL用于配置何时使S\texttt{clk}进入空闲态或有效态。
该电路还包含一个参数C\texttt{pha}来确定何时进行数据采集。
C\texttt{pha}取值范围包括:
- 当C\texttt{pha}=0时(默认值),则表示在第一个上升沿处进行数据采集;
- 当C\texttt{pha}=1时,则表示在第二个上升沿处进行数据采集。
同时, - C\texttt{pol}=0表示当输入信号处于低电平时电路进入空闲状态;
- C\texttt{pol}=1则表示只有当输入信号处于高电平时才进入空闲状态。
