UART、IIC、SPI、CAN通信协议简介
一、常见术语
1、通信协议的类型
(1)根据数据传输方式分为两大类:串行通信和并行通信。由于并行通信(如早期的PCI总线)需要大量I/O口线,所以在单片机中已较少使用。
串行通信协议又可根据数据是否同步于时钟信号分为:
同步通信:收发双方共享时钟信号(如SPI, I2C)。
异步通信:收发双方使用各自的时钟,依靠事先约定的波特率进行同步(如UART)。
(1)什么是波特率
波特率等于每秒钟传输的数据位数,假如我们的全局时钟频率为100MHz,波特率设置为9600,那么意味着每秒该UART传输协议可以传输9600bits的数据,换句话说传输1比特需时间约为:10^9(ns)/9600=104166(ns)。
(2)如何换算波特率
书接上文,时钟频率假如为100MHz,这意味着我们的时钟周期为10ns,因此10416个时钟周期我们就可以传输1bit数据,换言之我们需要一个大小为10416的分频电路来对100MHz时钟进行处理,因此在设计UART的过程中,我们需要使用分频电路依据波特率处理全局时钟,依据分频后的时钟节奏来发送数据和接收数据。
二、单片机常见的通信协议
1. UART (Universal Asynchronous Receiver/Transmitter)
原理:
异步串行通信。不需要时钟线,仅需两根数据线(TX:发送,RX:接收)即可实现全双工通信。
通信双方必须事先约定相同的通信参数:波特率、数据位、停止位、校验位。
数据以“帧”为单位传输。每帧数据从一个起始位(低电平) 开始,后面是5-9位数据位(通常是8位),然后是可选的校验位,最后是1-2位停止位(高电平)。
在空闲状态下,总线保持高电平。起始位的下降沿通知接收方开始接收数据。
特点:
优点:硬件简单,仅需两根线,全双工。
缺点:没有时钟同步,对波特率一致性要求高;通常用于点对点通信,难以组建多设备网络。
举例:
单片机与PC通信:单片机通过UART连接到USB转串口芯片(如CH340、CP2102),再与电脑的串口调试助手进行数据交换。
GPS模块、蓝牙模块与单片机通信:大多数GPS和蓝牙模块都提供UART接口,单片机通过发送AT指令或直接读取数据流与之交互。
两个单片机之间通信:将单片机A的TX连接到单片机B的RX,单片机A的RX连接到单片机B的TX。
2. I2C (Inter-Integrated Circuit)
原理:
同步、半双工的串行通信协议。由Philips公司开发。
仅需两根线:
SDA:双向串行数据线。
SCL:串行时钟线,由主机产生。
多主多从架构,通过设备地址寻址。总线上每个从设备都有一个唯一的7位或10位地址。
通信由主机发起,遵循严格的时序:
起始条件:SCL为高时,SDA由高变低。
发送地址帧:主机发送7位从机地址和1位读写位。
应答信号:从机确认地址后,拉低SDA一个时钟周期作为应答(ACK)。
数据传输:主机与从机之间传输8位数据,每传输一个字节后,接收方都会发送一个ACK。
停止条件:SCL为高时,SDA由低变高。
特点:
优点:引脚资源占用少(只有两根线),支持多设备。
缺点:速度较SPI慢(标准模式100kbps,快速模式400kbps),协议相对复杂,通信距离短。
举例:
读取传感器数据:读取温湿度传感器(如SHT30)、加速度计(如MPU6050)的数据。这些传感器通常作为I2C从设备。
访问EEPROM存储器:读写存储芯片(如AT24C02、AT24C256)来存储系统参数。
控制IO扩展芯片:使用PCF8574等芯片,通过I2C协议用少量IO口控制多达8个或16个GPIO。
3. SPI (Serial Peripheral Interface)
原理:
同步、全双工的串行通信协议。由Motorola公司开发。
通常需要4根线:
SCLK:串行时钟,由主机产生。
MOSI:主机输出,从机输入。
MISO:主机输入,从机输出。
SS/CS:从机选择片选信号(低电平有效),每个从机都需要一根独立的片选线。
通信由主机控制。主机通过拉低某个从机的SS线来选中该从机,然后产生SCLK时钟。数据在时钟的上升沿或下降沿被采样,实现全双工同时收发。
协议本身非常简单,没有固定的数据帧格式,数据传输的位数和含义由设备自身定义。
特点:
优点:速度非常快(可达数十Mbps),是全双工,协议简单。
缺点:占用I/O口线多(每增加一个从机,需多一根片选线),没有硬件应答机制。
举例:
读写SD/TF卡:SD卡在SPI模式下通信。
驱动显示屏:许多OLED屏、TFT屏(如ILI9341驱动芯片)使用SPI接口以获得高速刷新率。
连接无线模块:如nRF24L01 2.4G无线模块、ESP8266 WiFi模块(某些模式下)。
与高速ADC/DAC通信:需要高速数据流的模数/数模转换芯片。
4. 1-Wire (单总线)
原理:
异步、半双工的串行通信协议。由Dallas公司开发。
只需要一根数据线(加上一根公共地线)即可完成通信和供电(寄生供电)。
所有1-Wire设备都通过一个唯一的64位ROM ID地址进行识别,支持“一主多从”。
通信时序要求非常严格,主机通过控制线上高低电平的持续时间来发出命令和读写数据。
特点:
优点:硬件结构极其简单,布线成本极低。
缺点:通信速度慢,时序复杂,对代码编写要求高。
举例:
读取温度传感器:最经典的DS18B20数字温度传感器。
访问iButton设备:如门禁系统的密钥扣。
识别器件:利用其唯一的ID,用于产品溯源或硬件加密。
5. CAN (Controller Area Network)
原理:
异步、半双工的串行通信协议。专为汽车电子和工业控制等恶劣环境设计。
采用差分信号(CAN_H和CAN_L)传输,具有极强的抗干扰能力。
多主对等网络,任何节点都可以在总线空闲时发起通信。通过报文ID(标识符)来标识消息的优先级,ID值越小,优先级越高。基于CSMA/CR机制解决总线冲突。
具有完善的错误检测和处理机制,通信可靠性极高。
特点:
优点:高可靠性,多主结构,优秀的错误处理,通信距离远(可达数千米)。
缺点:协议复杂,硬件和软件成本较高。
举例:
汽车网络:发动机控制单元(ECU)、车门模块、仪表盘等之间的通信。
工业自动化:PLC、传感器、电机驱动器之间的连接。
医疗设备、电梯控制等对可靠性要求高的领域。
总结对比表
| 协议 | 通信类型 | 线数 | 速度 | 拓扑结构 | 主要特点 | 典型应用 |
|---|---|---|---|---|---|---|
| UART | 异步,全双工 | 2 (TX, RX) | 低-中 | 点对点 | 简单,通用,需约定波特率 | PC通信,GPS,蓝牙 |
| I2C | 同步,半双工 | 2 (SDA, SCL) | 低-中 | 多主多从 | 引脚少,有地址和应答 | 传感器,EEPROM |
| SPI | 同步,全双工 | 3+n (SCLK, MOSI, MISO, CSxN) | 高 | 一主多从 | 速度快,协议简单,引脚多 | 存储器,显示屏,ADC |
| 1-Wire | 异步,半双工 | 1 (DQ) | 低 | 一主多从 | 布线极简,靠ID寻址 | DS18B20温度传感器 |
| CAN | 异步,半双工 | 2 (CAN_H, CAN_L) | 中-高 | 多主对等 | 高可靠,抗干扰,距离远 | 汽车,工业控制 |
选择建议:
简单设备调试:用UART。
连接多个低速传感器:用I2C。
需要高速数据传输(如显示屏、存储器):用SPI。
布线极其苛刻(如远距离温度监测网络):考虑1-Wire。
高可靠性、多节点工业环境:用CAN。
