
通信协议是嵌入式设备 "互联互通" 的核心------无论是单片机与传感器通信、开发板与外设交互,还是设备间数据传输,都离不开 SPI、I2C、RS232/485 这些经典协议。本篇作为 ARM 体系面试系列第四篇,将聚焦5大高频通信协议考点,从 "定义→接口→时序→差异→面试问答" 逐层拆解,既讲清原理,又给出可直接复用的面试应答思路,适合嵌入式工程师入门和面试复习!
1 基础概念:异步传输 vs 同步传输
通信协议的核心分类依据是 "数据同步方式",这是理解所有协议的基础,先搞懂这两个概念,后续学习事半功倍!
1.1 核心定义与区别
| 传输方式 | 核心特征 | 优缺点 | 典型应用场景 |
| 异步传输 | 无时钟同步信号,数据按 "字节" 独立传输,每个字节前加起始位、后加停止位(如 1 位起始位 + 8 位数据 + 1 位停止位) | ✅ 优点:布线简单(仅需数据线)、设备无需严格时钟同步; ❌缺点:传输速度慢(额外开销位)、抗干扰性一般 | RS232、UART(串口)通信 |
| 同步传输 | 需时钟信号同步(由主机产生),数据按 "帧" 批量传输(帧包含同步头、数据、校验位) | ✅ 优点:传输速度快(无额外开销位)、抗干扰性强; ❌ 缺点:布线复杂(需时钟线)、设备时钟需匹配 | SPI、I2C、RS485(同步模式) |
|---|
1.2 面试简便应答
一句话抓核心: ++"异步传输无时钟,按字节传(带起始/停止位),速度慢;同步传输有时钟,按帧传,速度快;串口是异步,SPI/I2C 是同步。"++
2 工业常用:RS232vsRS485
RS232 和 RS485 是嵌入式工业场景中最常用的串行通信接口,面试高频问 "区别",需从 4 个维度记忆:
2.1 核心差异对比
| 对比维度 | RS232 | RS485 |
| 传输方式 | 单端通信(不平衡传输):信号对地参考 | 差分通信(平衡传输):信号对两根信号线参考(A/B 线) |
| 传输距离 | 短(≤20米),适合近距离设备通信 | 长(≤1200米),适合工业远距离传输 |
| 设备数量 | 点对点通信(1主1从),仅支持1对1连接 | 总线型拓扑(1主多从),最多支持128个设备 |
| 布线与全双工 | 全双工需3根线(TX/RX/GND),半双工 2根线 | 半双工需2根线(A/B),全双工需4根线(A+/A-/B+/B-) |
| 抗干扰性 | 弱(单端信号易受干扰) | 强(差分信号抵消干扰) |
| 传输速率 | 低(最高 20kbps) | 高(最高 10Mbps,距离越短速率越高) |
|---|
2.2 关键原理补充
- RS232电平:逻辑1为-3~-15V,逻辑 0 为 +3~+15V(需电平转换芯片如MAX232);
- RS485电平:逻辑1为A>B(电压差+2~+6V),逻辑0为A 电压差-2~-6V)(需芯片如 MAX485);
- 工业场景优先选 RS485:抗干扰强、传输远、支持多设备,是工业总线的首选。
2.3 面试简便应答
++简化记忆:"RS232 单端、短距、1 对 1;RS485 差分、长距、多设备;工业用 485,近距离用 232。"++
3 高速同步:SPI 协议
SPI(Serial Peripheral Interface)是高速全双工同步协议,由摩托罗拉提出,广泛用于 Flash、LCD、ADC等外设。
3.1 核心接口(4 根线)
SPI 协议需 4 根信号线(主机提供时钟和片选),每根线的作用是面试必考点:
| 信号线名称 | 英文全称 | 功能描述 |
| MOSI | Master Output, Slave Input | 主机输出→从机输入:主机发送数据到从机 |
| MISO | Master Input, Slave Output | 主机输入→从机输出:从机发送数据到主机 |
| SCLK | Serial Clock | 串行时钟:主机产生,控制通信速率(同步信号),不同设备支持最高速率不同 |
| NSS/CS | Slave Select | 从机选择:低电平有效,主机通过拉低对应从机的 NSS 线选中设备(多从机时必备) |
|---|
关键注意点:
- 多从机连接时:MOSI、MISO、SCLK三线并联,每个从机独占一根NSS线(主机通过 NSS 寻址,无设备地址!);
- 通信起始/停止:NSS拉低 = 起始,NSS拉高=停止。
3.2 核心时序(数据有效性 + 通讯模式)
SPI 的时序核心是 "时钟极性(CPOL)" 和 "时钟相位(CPHA)",两者组合形成4种通讯模式,面试常问 "模式0/1/2/3的区别"。
1. 数据有效性规则
- 数据在SCLK的 "边沿" 采样:要么上升沿,要么下降沿;
- 数据传输时MSB先行(高位在前),需确保主从机一致;
- 每次传输可8位或16位为单位,传输长度无限制。
2. CPOL 与 CPHA 定义
| 参数 | 定义 |
| CPOL(时钟极性) | 总线空闲时 SCLK 的电平:CPOL=0→空闲低电平;CPOL=1→空闲高电平 |
| CPHA(时钟相位) | 数据采样时刻:CPHA=0→奇数边沿采样;CPHA=1→偶数边沿采样 |
|---|
3. 4 种通讯模式(重点记模式 0 和模式 3)
| 模式 | CPOL | CPHA | 采样时刻 | 应用场景 |
|---|---|---|---|---|
| 0 | 0 | 0 | SCLK 上升沿采样 | 大多数外设(如 Flash) |
| 1 | 0 | 1 | SCLK 下降沿采样 | 少数特殊外设 |
| 2 | 1 | 0 | SCLK 下降沿采样 | 极少使用 |
| 3 | 1 | 1 | SCLK 上升沿采样 | STM32 与部分传感器通信 |
3.3 面试高频问答
Q:SPI是全双工还是半双工?如何实现?
A:全双工!MOSI和MISO是两条独立数据线,主机发送数据的同时,从机可同步返回数据,无需切换方向。
Q:SPI多从机时如何寻址?与 I2C的寻址方式有何区别?
A:SPI无设备地址,通过NSS线寻址(拉低对应从机NSS);I2C通过设备地址(7位/10 位)寻址,无需片选线。
3.4 面试简便应答
SPI 核心考点总结: ++"4线(MOSI/MISO/SCLK/NSS)、全双工、同步传输;4种模式由CPOL/CPHA决定,多从机用NSS寻址,模式0最常用。"++
4 多主多从:I2C 协议
I2C(Inter-Integrated Circuit)是由飞利浦提出的半双工同步协议,仅需2根线(SDA/SCL),支持多主机多从机,广泛用于传感器、EEPROM 等。
4.1 核心接口(2 根线,总线型拓扑)
| 信号线名称 | 英文全称 | 功能描述 |
| SDA | Serial Data | 串行数据线:双向传输数据(主→从/从→主),需上拉电阻(默认高电平) |
| SCL | Serial Clock | 串行时钟线:主机产生(多主机时需仲裁),控制通信速率(标准 100kbps/快速 400kbps) |
|---|
关键注意点:
- 总线空闲状态:SDA和SCL同时为高电平(上拉电阻维持);
- 多主多从:所有设备SDA/SCL并联,通过设备地址寻址(唯一7位地址)。
4.2 核心时序
I2C 的时序是面试重中之重,需逐个掌握 "起始/停止/数据/应答" 信号的定义:
1. 起始信号(S)
- 条件:SCL为高电平时;
- 动作:SDA由高→低跳变(下降沿);
- 意义:启动I2C通信,仅主机可发起。
2. 停止信号(P)
- 条件:SCL为高电平时;
- 动作:SDA由低→高跳变(上升沿);
- 意义:结束I2C通信,主机发起。
3. 数据传输信号
- 条件:SCL为低电平时,SDA可改变电平(准备数据);
- 采样:SCL为高电平时,SDA电平稳定(高=1,低=0),此时采样数据;
- 规则:每次传输8位数据(1字节),MSB先行。
4. 应答信号(ACK/NACK)
- 位置:每传输1字节后,第9个时钟周期为应答位;
- 发送方:释放SDA(高电平);
- 接收方:拉低SDA=ACK(有效应答),保持高=NACK(非应答);
- 特殊情况:主机接收最后1字节后,可发NACK,随后发停止信号结束传输。
4.3 完整读写操作流程(面试必考)
I2C的读写操作核心是 "设备地址+读写位",设备地址为7位,第8位是读写标志(0=写,1=读)。
1. 写操作流程(主机→从机)
起始信号(S)→ 7位设备地址 + 0(写)→ 从机ACK → 发送数据字节1 → 从机ACK → 发送数据字节2 → 从机ACK → ... → 停止信号(P)
2. 读操作流程(从机→主机)
起始信号(S)→ 7位设备地址 + 1(读)→ 从机ACK → 接收数据字节1 → 主机ACK → 接收数据字节2 → 主机ACK → ... → 主机NACK → 停止信号(P)
3. 关键注意点:
- 地址切换:同一通信中,主机可先写后读(无需停止信号),只需再次发起始信号+设备地址+读标志;
- 总线仲裁:多主机同时发起通信时,通过SDA电平仲裁(低电平优先),避免冲突。
4.4 面试高频问答
Q:I2C是全双工还是半双工?为什么?
A:半双工!因为SDA是双向数据线,同一时间只能传输一个方向的数据(主→从或从→主),无法同时收发。
Q:I2C的应答信号由谁发送?NACK的常见原因有哪些?
A:应答信号由 "接收方" 发送(主机写时从机发,主机读时主机发);NACK原因:从机地址不匹配、从机忙、数据传输错误。
4.5 面试简便应答
I2C核心考点总结: ++"2 线(SDA/SCL)、半双工、多主多从;起始(SCL高SDA降)、停止(SCL高SDA 升);7位地址+读写位,每字节后有ACK,标准速率100kbps。"++
5 SPI vs I2C
SPI 和 I2C 是嵌入式最常用的两种同步协议。
| 对比维度 | SPI | I2C |
| 信号线数量 | 4 根(MOSI/MISO/SCLK/NSS) | 2 根(SDA/SCL) |
| 通信方式 | 全双工 | 半双工 |
| 寻址方式 | NSS 片选(无设备地址) | 7 位 / 10 位设备地址(无需片选) |
| 传输速率 | 高速(最高可达几十 Mbps) | 中速(标准 100kbps,快速 400kbps) |
| 抗干扰性 | 一般(单端信号) | 较强(差分信号思路,SDA/SCL 上拉) |
| 多从机支持 | 支持,但需多根 NSS 线(布线复杂) | 支持,仅需 2 根线(布线简单) |
| 典型应用 | 高速数据传输(Flash、LCD、ADC) | 低速多设备(传感器、EEPROM、RTC) |
|---|
面试选择类问题应答思路: ++"如果需要高速全双工传输(如LCD显示),选SPI;如果设备多、布线受限、速率要求不高(如多个传感器),选I2C;工业远距离选RS485,近距离点对点选 RS232。"++