嵌入式面试八股文之外设
嵌入式面试八股文之外设
为巽1.1 GPIO
GPIO(General Purpose Input/Output)是芯片控制外部电路最基础的引脚接口。
1. 八种工作模式
| 分类 | 模式名称 | 核心特点与典型应用场景 |
|---|---|---|
| 输入模式 | 浮空输入 (Floating) | 电平完全由外部决定,引脚悬空时电平不确定。常用于UART RX、外部按键(已有外部上下拉)。 |
| 上拉输入 (Pull-up) | 内部连接上拉电阻,默认高电平。用于检测低电平有效的外部中断或按键。 | |
| 下拉输入 (Pull-down) | 内部连接下拉电阻,默认低电平。用于检测高电平有效的外部信号。 | |
| 模拟输入 (Analog) | 关闭施密特触发器,信号直通内部 ADC 模块。用于ADC 电压采集或低功耗模式下的省电配置。 | |
| 输出模式 | 开漏输出 (Open-Drain) | PMOS 不工作,NMOS 导通输出低电平,截止呈高阻态。必须外接上拉电阻才能输出高电平。 |
| 推挽输出 (Push-Pull) | PMOS 和 NMOS 交替导通,可直接输出强高低电平,驱动能力强。用于驱动 LED、继电器、SPI/UART TX。 | |
| 复用模式 | 复用开漏 / 复用推挽 | 引脚控制权交给片上外设硬件(如 I2C、SPI、PWM),而非 CPU 直接写 ODR 寄存器。 |
1.2 UART
UART 是一种异步、全双工、点对点(1对1)的串行通信协议。
1. 协议核心要素
- 物理连线:
TX(发送)、RX(接收)、GND(共地,必不可少)。硬件流控需额外增加RTS(请求发送)和CTS(允许发送)。 - 数据帧格式:
- **空闲态 (Idle)**:持续高电平。
- **起始位 (Start Bit)**:1 bit 低电平(标志传输开始,触发接收端采样定时器)。
- 数据位 (Data Bits):5~8 bits(通常为 8 bits,低位 LSB 先发)。
- **校验位 (Parity Bit)**:可选(奇校验、偶校验、无校验),用于简单检错。
- **停止位 (Stop Bit)**:1 / 1.5 / 2 bits 高电平,拉开帧间间隔并校准时钟。
2. 高频面试考点
既然没有时钟线(CLK),异步通信如何保证收发同步?
- 收发双方预先约定相同的波特率(Baud Rate)。接收端检测到起始位下降沿后,以 16 倍波特率的内部时钟进行过采样,取每个 bit 中间位置(第 7、8、9 次采样值)进行表决,从而滤除边沿毛刺并容忍一定程度的时钟偏差(通常要求收发双方时钟误差小于 **2.5%~3%**)。
UART、RS232、RS485 的区别?
特性 UART (TTL电平) RS232 RS485 信号类型 单端信号(3.3V/5V) 单端信号(±3V~ ±15V 负逻辑) 差分信号(A/B 两线压差) 通信方式 全双工(1对1) 全双工(1对1) 半双工(支持 1对多 总线组网,最多32~256节点) 传输距离 板级(小于 1 米) 约 15 米 可达 1200 米(抗共模干扰极强) 串口接收不定长数据怎么处理?
- 最优解是 DMA + 串口空闲中断(IDLE Interrupt)。DMA 在后台自动搬运每个字节到内存缓冲区,当总线出现超过 1 个字节时间的空闲高电平时,触发 IDLE 中断,通知 CPU 一帧数据接收完毕。
1.3 I2C
I2C 是 Philips 开发的同步、半双工、支持多主多从的双线制串行总线。
1. 物理层与协议时序
- 双线结构:
SDA(串行数据线)、SCL(串行时钟线)。两条线均配置为开漏输出 + 外部上拉电阻(典型值 1.8kΩ ~ 10kΩ)。 - 传输速率:标准模式(100 kbps)、快速模式(400 kbps)、高速模式(3.4 Mbps)。
- 核心时序规则:
- **起始信号 (START)**:SCL 为高电平时,SDA 由高变低。
- **停止信号 (STOP)**:SCL 为高电平时,SDA 由低变高。
- 数据有效性:SCL 为高电平时,SDA 必须保持稳定(供接收方采样);SCL 为低电平时,SDA 才允许改变状态。
- 应答信号 (ACK/NACK):每传输完 8 bits(1字节,高位 MSB 先发),发送方释放 SDA,在第 9 个时钟周期由接收方拉低 SDA 表示 ACK,保持高电平表示 NACK。
2. 高频面试考点
- I2C 读寄存器的完整流程是什么?(为什么读操作包含写过程?)
- 读操作本质是复合格式(Combined Format),需要先“写”告诉从机要读哪个寄存器地址:
- 主机发送
START+从机地址(7bit) + 写标志(0)-> 等待从机ACK。 - 主机发送
目标寄存器地址(8bit)-> 等待从机ACK。 - 主机发送
Repeated START(重复起始信号,不发 STOP 以防总线被其他主机抢占) +从机地址(7bit) + 读标志(1)-> 等待从机ACK。 - 从机发送数据字节,主机回复
ACK(若读完最后一个字节,主机必须回复NACK通知从机停止发送)。 - 主机发送
STOP释放总线。
- 主机发送
- 读操作本质是复合格式(Combined Format),需要先“写”告诉从机要读哪个寄存器地址:
- I2C 总线死锁(SDA 被一直拉低)的原因及如何解除?
- 原因:主机正在读从机数据时,从机正好输出 bit
0(拉低了 SDA),此时主机发生异常复位。复位后主机处于空闲态,而从机因为没有收到后续的 SCL 时钟,一直卡在拉低 SDA 的状态等待时钟,导致总线死锁。 - 解决方法:主机初始化时检测 SDA,若为低电平,将 SCL 引脚临时配置为普通 GPIO,软件模拟连续输出 9 个 SCL 时钟脉冲,让从机走完剩余的 bit 状态机并释放 SDA,最后主机再发一个
STOP信号恢复总线。
- 原因:主机正在读从机数据时,从机正好输出 bit
1.4 I2S
I2S(Inter-IC Sound)是专为数字音频设备之间传输 PCM 音频数据设计的同步串行接口。
1. 信号线定义
- CK / BCLK(Bit Clock,位时钟):对应数字音频的每一位数据。
- 计算公式:
- WS / LRCK(Word Select / Left-Right Clock,帧时钟/声道选择):频率等于**采样率 ($f_s$)**。用于区分当前传输的是左声道(通常
0表示左)还是右声道(1表示右)。 - SD / SDATA(Serial Data):实际的二进制补码音频数据线(MSB 先发)。
- MCLK(Master Clock,主时钟,可选):通常为采样率的 256 倍或 384 倍(如 $256 \times f_s$),专供外部 Audio Codec 内部的锁相环(PLL)和 $\Delta-\Sigma$ 调制器使用,不属于标准 I2S 三线制强制要求,但实际硬件中极其常见。
2. 三种对齐格式对比
- 标准 I2S 格式(Philips 标准):最高有效位(MSB)在 LRCK 发生翻转后的第 2 个 BCLK 上升沿才开始有效(即延迟 1 个 BCLK 周期)。
- 左对齐格式(Left-Justified):LRCK 翻转的同时,紧接着的第 1 个 BCLK 周期就开始传输 MSB(无延迟)。
- 右对齐格式(Right-Justified):LSB 对齐在 LRCK 下一次翻转前的最后一个 BCLK 周期。
3. 高频面试考点
- 为什么音频传输不直接用 SPI 或 I2C,而要专门设计 I2S?
- ① 时钟抖动(Jitter)隔离:音频将数据和时钟完全分离,配合硬件 PLL 降低采样时钟抖动,避免爆音或底噪;② 天然支持双声道同步:通过 LRCK 硬件切换左右声道;③ 容忍位宽不匹配:标准 I2S 因为 MSB 固定在 LRCK 翻转后第 2 个时钟,若发送端发 24-bit 而接收端只支持 16-bit,接收端直接截取高 16 位、忽略后 8 位即可,无需修改协议即可兼容。
1.5 MIPI
嵌入式面试中提到的 MIPI 通常指用于摄像头的 MIPI CSI-2(Camera Serial Interface)和用于显示屏的 MIPI DSI(Display Serial Interface)。
1. 物理层(D-PHY)核心机制
Lane(通道)结构:由 1 对差分时钟线(Clock Lane) + 1~4 对差分数据线(Data Lanes) 组成。
两种工作状态自动切换(高频考点):
状态模式 信号类型 电平范围 速率 作用 LP 模式 (Low Power) 单端信号 0~ 1.2V 小于 10 Mbps 空闲省电、传输控制命令(如屏幕初始化寄存器配置)。 HS 模式 (High Speed) 低摆幅差分信号 100mV~ 300mV (典型 200mV) 80 Mbps~ 2.5 Gbps/Lane 高速传输图像帧数据(像素流)。 状态切换时序:发送图像帧前,总线从 LP11 -> LP01 -> LP00 序列进入 HS 高速差分模式;一帧或一行传完后(消隐期 Blanking),立刻退回 LP11 省电状态。
2. MIPI DSI 的两种工作模式
- Video Mode(视频模式):类似传统 RGB 接口,主控必须持续不断地向屏幕刷新像素流和同步信号(VSYNC/HSYNC)。屏幕内部没有显存(GRAM),一旦主控停止发送数据,屏幕就会黑屏或花屏。
- Command Mode(命令模式):屏幕内部自带显存(GRAM)。主控只在画面变化时通过 MIPI 发送更新的数据包,平时主控可以休眠,由屏幕自刷新,极大降低系统功耗(常用于智能手表、手机息屏显示)。
1.6 SDMMC 与 SDIO
SDMMC 是控制器或存储卡标准,而 SDIO 是基于 SD 总线扩展出来的外设接口协议。
1. 概念区分
- MMC / eMMC:MMC 是最早的多媒体卡标准;eMMC(Embedded MMC) 是将 NAND Flash 芯片和主控(负责磨损均衡、坏块管理 ECC)封装成 BGA 焊死在主板上的存储芯片,通常支持 1-bit、4-bit、8-bit 数据位宽。
- SD 卡(Secure Digital):在 MMC 基础上发展而来的可插拔存储卡,支持 1-bit 和 4-bit 模式(以及兼容 SPI 模式)。
- SDIO(Secure Digital Input/Output):复用 SD 卡的物理引脚和命令协议,但连接的不是存储卡,而是外设芯片(最典型的是 SDIO Wi-Fi / 蓝牙模组,如 AP6212、ESP8266/ESP32 作为从机网卡)。
2. 硬件信号线(以 4-bit SD/SDIO 为例)
- **
CLK**:主机提供给从机的同步时钟。 - **
CMD**:双向命令/响应线(用于发送控制指令,如CMD0复位、CMD5SDIO 初始化、CMD52/CMD53SDIO 读写寄存器与数据块)。 DAT0 ~ DAT3:4 根双向数据线。
3. 高频面试考点
- SDIO 和 SD 卡在中断机制上有什么重要区别?
- 普通 SD 存储卡是纯被动的,没有硬件中断概念;而 SDIO 外设(如 Wi-Fi 收到网络数据包)需要主动通知主机。在 4-bit SDIO 模式下,复用
DAT1引脚在数据传输间隙作为硬件中断线,通知主控读取数据。
- 普通 SD 存储卡是纯被动的,没有硬件中断概念;而 SDIO 外设(如 Wi-Fi 收到网络数据包)需要主动通知主机。在 4-bit SDIO 模式下,复用
- 为什么板载大容量存储普遍用 eMMC 而不是 Raw NAND Flash?
- Raw NAND 需要主控软件自行处理坏块管理(BBM)、磨损均衡(Wear Leveling)和复杂的 ECC 纠错;而 eMMC 内部自带 FTL(Flash Translation Layer)控制器,对外呈现为标准的块设备,极大地简化了 Linux/RTOS 的驱动开发。
1.7 SPI/QSPI
- 标准 SPI(串行外设接口)
SPI 是 Motorola 提出的同步、全双工、一主多从的高速串行接口(常见速率 10MHz ~ 50MHz+)。
四根信号线:
SCLK(Serial Clock):同步时钟,由主机产生。MOSI(Master Out Slave In):主机输出,从机输入。MISO(Master In Slave Out):主机输入,从机输出。CS / NSS(Chip Select):片选信号(通常低电平有效),每个从机独占一根 CS 线。
四种工作模式(必考核心):由 CPOL(时钟极性) 和 CPHA(时钟相位) 组合决定:
SPI 模式 CPOL(空闲时 SCLK 电平) CPHA(数据采样边沿) 采样时刻与数据切换时刻 Mode 0 (最常用) 0(空闲为低电平)0(第 1 个跳变沿采样)上升沿采样,下降沿切换数据 Mode 1 0(空闲为低电平)1(第 2 个跳变沿采样)下降沿采样,上升沿切换数据 Mode 2 1(空闲为高电平)0(第 1 个跳变沿采样)下降沿采样,上升沿切换数据 Mode 3 (最常用) 1(空闲为高电平)1(第 2 个跳变沿采样)上升沿采样,下降沿切换数据 记忆技巧:不管 Mode 0 还是 Mode 3,都是上升沿采样数据,这也是绝大多数 SPI Flash 和传感器默认同时兼容 Mode 0 和 Mode 3 的原因!
2. QSPI(Queued / Quad SPI)
嵌入式语境下的 QSPI 绝大多指 Quad SPI(四线数据 SPI),专用于连接外部 NOR Flash。
- 与标准 SPI 的核心区别:
- 半双工 4 线并行传输:将原本的
MOSI和MISO升级为双向的IO0、IO1,并把原本 Flash 的写保护引脚 (WP) 和保持引脚 (HOLD) 复用为IO2、IO3。一个时钟周期可以同时传输 4 bits 数据,吞吐率直接提升 4 倍(若配合 DTR/DDR 双边沿采样,1 个时钟可传 8 bits)。 - 帧阶段划分:QSPI 协议将一次通信拆分为 **指令阶段 (Instruction) -> 地址阶段 (Address) -> 交替字节 (Alternate Bytes) -> 空周期 (Dummy Cycles) -> 数据阶段 (Data)**,每个阶段都可独立配置为单线(1-line)、双线(2-line)或四线(4-line)传输。
- XIP(eXecute In Place,片内执行)与内存映射模式(Memory-Mapped Mode):
- 标准 SPI 需要 CPU 先发读命令把数据搬到 RAM 才能运行;
- QSPI 控制器支持内存映射,将外部 Flash 直接映射到 MCU 的系统寻址空间(如 STM32 的
0x90000000)。CPU 可以直接通过指针读取外部 Flash,或者直接把代码放在外部 QSPI Flash 中运行(XIP),极大节省片内 Flash 成本。
- 半双工 4 线并行传输:将原本的




