嵌入式常用通讯协议
<摘要>
嵌入式硬件主要关注通信协议的物理层规范和数据链路层协议。信号的比特流转化为物理信号的过程称为调制与编码。
- 物理层规定物理连接特性,关注协议的硬件实现方式,具体来说包括电压电平标准、信号类型是数字信号/模拟信号、引脚连接为差分信号/单端信号、连接器和线缆类型。
- 数据链路层负责数据帧组织,将原始比特流打包成一定格式的数据帧,并提供错误检测机制,还会通过握手或阻塞等方式实现流量控制,保证接收方处理的及时性。
通信协议按数据在通信通道上的方向和同时性分为单工、半双工和全双工;按同步方式分为同步和异步;连接方式分点对点连接和总线连接。单工指只能单向传输;半双工指可发送或接收,但不能同时进行;全双工指可同时发送和接收。同步方式指用同步字符完成同步,异步方式用一帧中的起始位和停止位完成同步。
通信速率用比特率和波特率描述。比特率指每秒钟传送的比特数,单位为 bit/s(bps);波特率指每秒钟传送的码元数,单位为 Baud。码元是通信系统中传输的最小信号单位,每个码元可以承载一个或多个比特的信息。比特率 = 波特率 * log2 M ,M 表示每个码元承载的信息量。在二进制系统中,波特率在数值上等于比特率。带宽表征了通信链路的最大数据传输能力,是比特率的理论上限,单位为 bps。
嵌入式中常见的串行通讯协议包括串口通信、I2C、SPI、CAN、USB 等。一般来说串口通信特指 UART 通信 (即常说的 COM 口),是串行通讯的异步形式,而 I2C 和 SPI 可以看作是串行通讯的同步形式。UART、I2C 和 SPI 属于标准的串行通信外设,而 USB 是一种高速串行总线协议,不是简单的串口,而是包含复杂的协议栈(有分层结构、包格式、端点管理等),有专属的寄存器、中断、DMA 等,两者的硬件实现机制完全不同。USB 的其中一种应用是通过 CH340、CP2102 等芯片以虚拟串口的方式模拟串口。
UART
UART 串口通信只需发送、接收和地线三根线,是全双工异步通信,采用 TTL 电平,为点对点通信方式。一帧串口数据包含起始位、数据位、校验位(可选择不校验)和停止位。通信双方约定好采用的波特率,常见波特率有 4800、9600、115200 等。硬件连接时 TX 和 RX 需反接,其输出方式为推挽输出。UART 没有规定实现的电压标准和布线拓扑,需要和具体的物理层标准配合使用,最常用的是 TTL 或 CMOS 标准,此外还有 RS232 和 RS485 标准等,后两者都是为了增加传输距离而产生的。RS232 通过电平转换芯片提升抗干扰能力和传输距离,RS485 则将信号转化为差分信号,抗干扰能力更强,可实现一主多从组网通讯。
MAX3232 是常用的电平转换芯片(只能电平转换,不能协议转换),将 MCU 的 UART TTL 电平转换为 RS232 标准电平,常用的 RS232 转 USB 线中配备了 CH340、CP2102 这样的转换芯片(带协议转换功能),一边是 USB 协议,另一边输出 RS232、TTL 等电平。在很长一段时间里,PC 的串口就是 RS232 COM 口,且工业设备和仪器仪表中大量使用 RS232,因此需要 USB 转 RS232 来兼容。今天面向嵌入式开发,一般直接用 TTL UART 即可,不需要 RS232 兼容。
I2C
I2C 用于芯片间通讯,采用一主多从模式,通过时钟线和数据线进行数据传输,是通信线路较少的一对多通信方式,节约了 PCB 布线成本。数据传输时,起始位和停止位有特定的电平跳变要求,时钟线用于同步信号,发送端在时钟高电平时发出数据,接收端在时钟高电平接收数据。设备地址码为七位,可表示 128 种结果,读写数据时需发送相应的控制位和应答信号。I2C 使用开漏输出,避免总线短路问题,通过上拉电阻实现高电平,常见速率有 100KB 比特、400K 比特,受上拉电阻影响,更高速率较难实现。另外,I2C 规定了电平标准为 TTL 或 CMOS。
SPI
SPI 用于芯片间通讯,采用一主多从模式,需要片选信号线 CS、时钟信号线 SCK、发送信号线 MOSI 和接收信号线 MISO,共四条信号线。通过片选信号线确定通信从机,数据在时钟信号的上升沿或下降沿采样,具体取决于芯片设定。SPI 是全双工同步通信,通讯速率高,可从几百 BPS 到几兆 BPS 甚至更高,其高速通信得益于时钟线同步和推挽输出的设计。另外,SPI 规定了电平标准为 TTL 或 CMOS。
CAN
CAN 总线用于汽车中 ECU 之间的通讯,减少布线复杂度。CAN 协议使用差分信号,抗干扰能力强,传输距离可达 1000 米。CAN 通信的一帧数据包含起始位、识别码、控制位、数据长度码、CRC 校验码等,通过识别码确定接收设备,采用仲裁机制解决总线冲突问题,隐性电平表示逻辑一,显性电平表示逻辑零,总线空闲时为隐性电平。CAN 通信为半双工异步通信,无主机,所有设备逻辑平等,波特率由最小时间片 TQ 和每一位的三个段组成,常见最大波特率为一兆比特每秒。









