烽火通信软开芯片 offer 面经:I2C 数据帧、芯片选型与 IAP 一问到底
- 轮次
- 一面
- 时间
- 2026-10
- 来源
- 牛客网
《面试题目》
一面
- 针对实习经历提问:Modbus RTU 协议相关的问题。
- 实习里的通信协议 I2C:数据帧长什么样?怎么配置?
- SOC 的选型是怎么算的?为什么这么选?
- 进程和线程的区别是什么?
- IAP 相关的问题。
- 多线程之间有哪些数据通信方式?
- 反问。
二面
- 实习中遇到的难的问题,你是怎么排查的?
- 实习里的私有通信协议为什么这么设计?
- 反问。
《参考解析》
Modbus RTU 要能背出帧结构和时序。 帧格式是「从站地址(1B)+ 功能码(1B)+ 数据(N B)+ CRC16(2B)」,帧间至少 3.5 个字符时间的静默作为分隔,帧内字符间隔不能超过 1.5 个字符时间,否则判为断帧。常用功能码是 03(读保持寄存器)、04(读输入寄存器)、06(写单个寄存器)、16(写多个寄存器)。常见追问:CRC 为什么用 CRC16 而不是校验和(能发现突发错误)、主从架构下从站怎么知道帧结束(靠 3.5T 静默而不是长度字段)、波特率与线长/终端电阻的关系(RS-485 半双工,两端 120Ω 终端匹配,长线要降速)。
I2C 的数据帧与配置,答「起始—地址—应答—数据—停止」的时序细节。 起始条件是 SCL 高电平期间 SDA 由高变低,停止相反;随后发 7 位从机地址 + 1 位读写位,从机拉低 SDA 回应 ACK,之后每 8 位数据跟一个 ACK/NACK,最后主机发停止。配置上要点:上拉电阻(开漏输出,空闲时靠上拉拉高,典型 4.7k,速率高时减小)、时钟频率(标准 100k、快速 400k、快速+ 1M)、时钟延展(从机忙时拉低 SCL)、多主仲裁(靠 SDA 线与逐位比较)。排错思路也要有:NACK 先查地址与从机供电,总线被拉低不恢复通常是某个从机在传输中被复位,需要主机补 9 个时钟脉冲把从机状态机推完再发停止。
SOC 选型这题,答「约束条件 → 候选 → 权衡」而不是「我们用了某颗芯片」。 先列硬约束:算力(主频、是否有 DSP/NPU)、外设(需要几路 UART/SPI/I2C/CAN、是否有以太网 MAC)、存储(Flash/RAM 容量、是否支持外扩)、功耗与散热、封装与引脚数、工作温度等级、供货周期与价格、生态(SDK 成熟度、是否有参考设计)。再算账:比如「图像采集需要 30fps 720p,M4 主频 200MHz 软件解码跟不上,所以要选带硬件 JPEG 或更高主频的 M7」。面试官追问「为什么不选另一颗」时,要能说出具体的 trade-off(贵 2 块钱但少一颗外置 PHY、或者功耗高 30mA 但开发周期短两个月)。
IAP 与多线程通信是嵌入式面的常客。 IAP 的核心是「把升级包写到非当前运行的分区,校验通过后改启动向量」,要讲清 Flash 的分区布局、写 Flash 前必须擦除(按扇区/页)、升级过程中不能执行同区域的代码(所以要跳转到 RAM 或另一分区里跑升级逻辑)、以及掉电保护(启动标记最后写、失败回滚)。多线程通信方式按场景答:共享内存 + 互斥锁/信号量(最快,要注意临界区大小)、消息队列(解耦,RTOS 里最常用)、邮箱/事件标志(轻量通知)、管道/socket(跨进程)。加分点是说出「中断与任务之间传数据不能用会阻塞的锁,通常用环形缓冲区 + 单生产者单消费者」。