嵌入式软件面试避坑指南:SPI、I2C与TCP/UDP的深度解析
当面试官抛出"请对比SPI和I2C协议"这个问题时,至少有60%的候选人会陷入相同的表述陷阱——他们能说出"SPI是全双工,I2C是半双工"这样的标准答案,却无法解释为什么智能手表的心率传感器通常选择I2C而非SPI。这种知其然不知其所以然的回答,正是嵌入式面试中最容易被淘汰的致命伤。
1. SPI协议的认知误区与高阶回答策略
1.1 被忽视的SPI时钟极性与相位配置
大多数面试者能复述SPI的四种工作模式(CPOL/CPHA组合),但极少有人能说清楚模式选择对实际项目的影响。在工业传感器应用中,错误的时钟配置会导致数据采样错位。例如:
c复制// 正确的MPU9250陀螺仪SPI初始化代码
spi_config.mode = SPI_MODE_3; // CPOL=1, CPHA=1
spi_config.clock_speed_hz = 1 * 1000 * 1000;
spi_init(SPI1, &spi_config);
提示:不同厂商的SPI设备对模式要求可能不同,务必查阅器件手册的时序图部分
1.2 片选信号管理的常见错误
候选人们常犯的三个典型错误:
- 认为SPI总线必须共用片选线(实际上每个从设备应有独立片选)
- 忽略片选信号的建立/保持时间要求
- 在多从机系统中忘记实现片选互斥机制
正确的实现方式应包含:
- 硬件设计阶段预留足够的GPIO作为片选线
- 软件层面封装带超时检测的片选控制函数
- 在RTOS环境中使用互斥锁保护SPI总线
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. I2C协议理解中的七个致命盲区
2.1 上拉电阻计算背后的电子学原理
当被问及"I2C总线的上拉电阻如何选择"时,90%的候选人只会背诵"4.7kΩ"这个魔法数字。实际上,电阻值需要根据:
| 参数 | 计算公式 | 典型值范围 |
|---|---|---|
| 上升时间 | RC = 0.847 × tr | 100-400ns |
| 功耗约束 | P = V²/R | <3mA |
