物联网调试工程师面试宝典 - 第3节
3. 物联网调试核心基础问题:网络协议、传感器原理、嵌入式系统基础高频问答
本章聚焦物联网调试岗位最常被考察的三大基础领域:网络协议栈、传感器接口原理、嵌入式系统底层机制。以下结构化问答卡片与项目实战模板帮你形成“考点—框架—话术”闭环。
问题1:请描述TCP与UDP在物联网场景下的区别及调试经验。
① 对比TCP(面向连接、可靠、有序)与UDP(无连接、尽力交付、低开销);② 举例MQTT over TCP、CoAP over UDP;③ 调试方法:Wireshark抓包看三次握手/四次挥手,tcpdump分析重传;④ 低功耗场景:UDP+应用层ACK可减少握手功耗。
TCP适用于网关-云端可靠通信,我曾在NB-IoT下用MQTT over TCP,抓包发现网络差时重传率达15%,后改UDP+私有ACK,功耗降低30%。UDP适合传感器上报,需自行处理丢包重试。
· TCP连接在弱网下如何保活?· 遇到TCP粘包如何解决?· UDP广播在局域网内如何避免冲突?
不要只说理论区别,必须给出真实调试手段(如抓包命令、重传阈值调整)。避免将UDP简单说成“不可靠”,实际通过ACK和超时可将可靠性提升至99%。
问题2:如何调试I²C或SPI传感器?请举例说明常见故障排查方法。
① 硬件检查:上拉电阻、电平匹配、引脚焊接;② 协议确认:时序图(起始/停止/ACK)、速率匹配(400kHz/1MHz);③ 工具使用:逻辑分析仪抓取SCL/SDA波形;④ 软件调试:读寄存器ID确认通信,调整时钟极性/相位。
调试BME280时SPI读取全0,逻辑分析仪发现CS片选未拉低,原因是GPIO初始化时输出模式未配置。I²C调试SHT30时地址错误,确认器件7位地址0x44后通信正常。示波器看下降沿斜率可判断上拉电阻是否过弱。
· SPI多从机如何防止数据冲突?· I²C总线仲裁原理?· 如何通过DMA提高传感器采样吞吐?
切勿只回答“看时序图”而不提及具体工具(Saleae、立创逻辑分析仪)。注意区分3.3V与5V电平,烧坏传感器是常见低级错误。回答中应体现一手排查顺序:电压→时钟→数据→ACK。
问题3:嵌入式系统出现死机或看门狗复位,你的调试步骤是什么?
① 复现与隔离:缩小到特定模块/中断/外设;② 硬件检查:电源纹波、晶振频率、复位引脚波动;③ 软件调试:添加串口日志、打印task栈剩余、检查数组越界;④ 工具联调:JLink/RTT输出堆栈回溯,找出死循环或HardFault地址。
某项目每2小时看门狗复位,通过配置FreeRTOS任务栈水线发现某任务栈溢出,将栈从256增至512后稳定。另一次是外部中断ISR中调用printf造成重入,改用队列通知任务处理,复位问题解决。
· HardFault_Handler如何解析栈帧?· 如何用SysTick做软看门狗?· 低功耗模式下看门狗如何配置?
不要只说“加printf打印”,这会改变时序,导致问题不重现。应优先使用硬件断点、栈回溯、RTOS钩子函数。回答时最好提及具体IDE或调试工具(如Keil调试窗口、STM32CubeIDE的Live Watch)。
项目案例:智能温湿度采集网关(STM32 + LoRaWAN + Modbus)
| 项目名称 | 智慧农业现场环境监测网关(v2.0) |
|---|---|
| 业务背景 | 为某大型蔬菜大棚基地部署200+节点,采集温湿度/光照/CO₂,通过LoRaWAN上传云端,要求电池供电工作≥1年,数据上报成功率≥99.5%。 |
| 规模指标 | 节点数:256;网关数量:8(覆盖半径2km);上报周期:5min;丢包率:初始阶段3%→优化后0.3%;电池寿命:原方案8个月→优化后14个月。 |
| 技术栈 | MCU:STM32L051(Cortex-M0+);无线:SX1278 LoRa(CAD + ADR);协议:LoRaWAN 1.0.3 / MQTT over NB-IoT(备用);传感器:SHT30(I²C)、BH1750(I²C)、MH-Z19(UART);调试工具:Saleae逻辑分析仪、Wireshark、PuTTY串口、J-Scope。 |
| 核心难点 | ① 弱网环境LoRa长距离发包失败(RSSI<-120dBm)导致重传过多,电池耗尽快;② 传感器I²C总线受长走线干扰,偶发ACK丢失;③ 网关同时处理多路Modbus RTU从机超时导致任务阻塞。 |
| 面试高频追问 |
|
| 可迁移回答话术 |
“本项目核心挑战在功耗与可靠性的平衡。针对LoRa弱网重传,我采用自适应数据速率(ADR)并调整重传间隔为随机退避,使重传次数从4次降至1.5次。对于I²C长线问题,我在SCL/SDA加上拉电阻4.7kΩ并增加100pF电容,波形上升沿改善。Modbus超时改用独立超时定时器+任务通知,避免阻塞其他任务。最终网关功耗降至120μA@sleep,整网丢包率0.3%,电池续航14个月。” 可迁移亮点:ADR 调优经验、长线I²C硬件修复方法、RTOS任务解耦设计。 |