第4章:嵌入式硬件接口面试题

对于BSP工程师而言,I2C、SPI、UART、GPIO、中断与DMA是每天都要打交道的底层接口。面试中,这部分内容重点考察你对协议时序的理解深度、驱动框架的设计能力以及软硬件联调的排错经验。

复习提示: 本章以“驱动实现五步法”和“DMA异常排查路径”为主线,配合3个高频问答卡片与1个实战项目模板,帮你构建可迁移的接口知识体系。

接口驱动实现核心框架

核心回答框架 ① 协议与原理识别 ② 电路与 Pin 脚确认 ③ 中断/DMA 策略选择 ④ 寄存器与时钟配置 ⑤ 数据收发与验证 查数据手册,确认设备时序要求 复用功能(AF)与上下拉配置 共享数据锁保护与临界区处理 时钟极性/相位(CPOL/CPHA) 逻辑分析仪抓波形对比验证

嵌入式总线协议速查表

特性 I2C SPI UART
线数 2 (SCL, SDA) 3+N (SCK, MOSI, MISO, CS) 2 (TX, RX)
速率 100k~3.4M bps 10M~50M+ bps 115.2k~1M bps
通信方式 半双工 全双工 全双工
多设备 是(地址寻址) 是(片选) 否(点对点)
适用场景 传感器、EEPROM 显示屏、ADC、Flash 调试串口、GPS模块

📌 面试官问:你在实际项目里,是怎么选 I2C、SPI 还是 UART 的?

  • 考察点:协议本质理解、工程折中思维、场景敏感度。
  • 回答框架:速率匹配 → 硬件资源(引脚/FIFO)→ 开发效率(复用现有驱动)。
  • 示例回答:“优先看速率和从机数量。I2C省引脚但速度慢,适合片外传感器配置。SPI快且全双工,适合音频或LCD数据通道。UART最简单,适合两设备间固定波特率通信,多数SOC自带FIFO,CPU开销低。
  • 可能追问:① I2C的ACK/NACK驱动怎么处理?② SPI设备丢数据怎么排查?
  • ⚠ 避坑提醒:不要只谈性能,忽略开发成本和SoC的IP已知Bug。

📌 面试官问:你在 BSP 驱动里写中断服务程序(ISR)时,会特别注意哪些问题?

  • 考察点:实时系统思维、竞态条件处理、ISR设计规范。
  • 回答框架:唤醒源确认 → 数据紧急拷贝 → 清中断标志 → 触发任务(信号量/队列)。
  • 示例回答:“ISR里只做最少工作:读取数据推到环形队列,立即清中断,发信号量解锁等待任务。禁止在ISR内调用printf或malloc,避免使用延时函数,防止阻塞系统调度造成优先级反转。
  • 可能追问:① 中断嵌套怎么处理?② 如何测量中断延迟?
  • ⚠ 避坑提醒:切勿忘记对ISR与任务间共享数据加锁(关中断或使用spinlock)。

📌 面试官问:用 DMA 做 SPI 传输有什么坑?什么情况你会放弃 DMA 改回轮询?

  • 考察点:Cache一致性理解、DMA描述符配置、性能边界把握。
  • 回答框架:D-Cache一致性 → 描述符链表 → 中断回调 → 传输粒度判断。
  • 示例回答:“必须处理Cache一致性,否则读到脏数据。开启DMA前invalidate源地址,传输完invalidate目的地址。若单次传输小于FIFO深度(如4字节),用轮询/中断比DMA快,因DMA配置开销更大。
  • 可能追问:① Scatter-Gather模式原理?② 如何测量DMA传输吞吐量?
  • ⚠ 避坑提醒:不要忽略MMU/MPU对DMA地址空间的限制,高速传输务必关D-Cache或手动维护一致性。

DMA 异常排查路径(面试高频追问)

DMA 传输异常排查路径(面试加分) ① DMA 传输无响应/卡死 ② 检查 DMA 中断标志 超时/错误标志 ③ 检查描述符配置与地址 LLI 链表中断 ④ 处理 Cache 一致性 Invalidate/D-Cache ⑤ 确认外设时钟与复位 RCC/Reset 寄存器

🚀 项目案例模板:多传感器数据采集 BSP 驱动开发

项目名称 工业物联网网关 - 多传感器驱动子系统
业务背景 网关需采集温度(I2C SHT30)、加速度(SPI BMI160)等数据,上传至云端。要求低功耗与高稳定性。
规模指标 采样率 100Hz,I2C 总线挂载 3 个设备,SPI 时钟 10MHz,DMA 传输速率 2MB/s。
技术栈 STM32H7 / RT-Thread / Sensor框架 / DMA + Cache管理 / 逻辑分析仪
核心难点 ① I2C总线冲突与重试机制设计。② SPI DMA传输的Cache一致性维护。③ 传感器在不同电源状态下的恢复流程。
面试高频追问 ① SHT30的I2C地址怎么确定?② BMI160的SPI是Mode0还是Mode3?如何配置?③ DMA传输卡死,排查步骤?
可迁移话术 “我会先看Datasheet定位Device Address和Register Map,再用逻辑分析仪抓波形确认时序。针对高速DMA,Cache一致性是必考题,我的标准做法是…”。
💡 复习建议: BSP面试中,接口部分80%的问题都能用“抓波形”和“看手册”解决。遇到不会的时序问题,主动提出用逻辑分析仪分析,是极具工程经验的表现。