嵌入式之ARM体系与架构面试题(四)通信协议篇

通信协议是嵌入式设备 "互联互通" 的核心------无论是单片机与传感器通信、开发板与外设交互,还是设备间数据传输,都离不开 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。"++

相关推荐
AI视觉网奇2 小时前
ue5 默认相机设置
笔记·学习·ue5
IT19952 小时前
C++ 实战笔记:OpenSSL3.5.2 实现 SM2 数据加密(附完整源码 + 注释)
开发语言·c++·笔记
vx-bot5556662 小时前
企业微信接口在行业解决方案中的架构应用与实践
架构·企业微信
DBBH2 小时前
DBBH的AI学习笔记
人工智能·笔记·学习
June bug2 小时前
【实习笔记】正交实验法设计测试用例
笔记·学习·测试用例
hellojackjiang20113 小时前
如何保障分布式IM聊天系统的消息有序性(即消息不乱)
分布式·架构·即时通讯·im开发
丝斯20113 小时前
AI学习笔记整理(54)——大模型之Agent 智能体开发前沿技术
人工智能·笔记·学习
hetao17338373 小时前
2026-01-16~19 hetao1733837 的刷题笔记
c++·笔记·算法
GLDbalala3 小时前
GPU PRO 4 - 5.2 Kinect Programming with Direct3D 11 笔记
笔记