STM32面试:I²C总线的START、STOP和ACK分别是什么?SDA被拉低怎么排查?

浏览量:2
时间: 2026-11-03 11:44:12

嵌入式单片机 · 高频面试题 · 工程实战

I²C设备扫描不到地址或者总线一直Busy,是嵌入式面试中很常见的排查场景。

面试回答先说这段

I²C是开漏/开集电极总线,空闲时SCL与SDA由上拉电阻拉高;SCL为高时SDA由高到低形成START,由低到高形成STOP。每8位数据后,第9个时钟由接收方通过拉低SDA表示ACK。

示波器真实I2C协议波形,SCL和SDA同步显示,包含START、RESTART、STOP与ACK/NACK位置

面试官继续追问时,按这个逻辑展开

01先读清时序,再动代码

除了START和STOP,数据位通常要求在SCL高电平期间保持稳定。地址字节中的读写位与7位设备地址不能混淆;收到NACK不等于一定是硬件损坏,也可能是地址、供电、时序或设备状态错误。

02SDA被拉低时排查顺序

先确认电压和上拉电阻是否合理,断开从设备分段判断由哪侧持续拉低;再排查主机复位时从设备停在传输中间、引脚复用配置错误、SCL时钟被拉低或电平转换器异常。

03总线恢复和异常保护

部分从设备可按器件资料通过最多若干个SCL脉冲推进未完成的传输,再产生STOP;不能把“强行输出高电平”作为开漏总线恢复策略。若不响应,应采用受控复位或断电重上电方式,具体取决于器件手册。

04用逻辑分析仪验证

记录SCL、SDA,逐位检查时钟频率、START、地址、R/W位、ACK时刻及STOP,并观察上升沿是否因上拉过弱和总线电容过大而变慢。

面试里容易踩的两个坑

  • 将8位地址数值直接当7位地址写入外设寄存器而不看HAL接口约定。

  • 总线被拉低时,直接用推挽高电平硬顶,可能导致总线争用。

面试官可能再问一句

I²C出现时好时坏的NACK,你会怎样区别地址错误与上升沿太慢?


声明:本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。仅供学习交流使用,不构成商业目的。版权归原作者所有,如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时删除。侵权投诉
相关推荐HOT
中断与异常有何区别?

中断是指外部硬件产⽣的⼀个电信号从CPU的中断引脚进入,打断CPU的运⾏。 异常是指软件运⾏过程中发⽣了⼀些必须作出处理的事件,CPU⾃动产⽣⼀个陷入来打断CP... 详情>>

2023-11-21 11:34:26
PCB信号回流路径怎么分析?

PCB信号回流路径怎么分析?PCB仿真面试深度题:信号回流原理、参考平面完整性与跨分割影响分类:PCB仿真经验级别:2-5年难度:中等偏难题型:原理分析题本文概... 详情>>

2026-08-25 10:16:03
单片机面试:增量式编码器A/B相为什么相差90°?怎么判断方向又避免高速丢脉冲?

增量式编码器常输出A、B两路正交信号。只统计A相脉冲可以得到位移,但无法可靠判断方向;同时利用A/B相的相位先后关系,就能判断正转和反转。高速场景下,还要考虑输... 详情>>

2026-10-21 17:04:29
Linux字符设备驱动怎么写?cdev、file_operations、ioctl、设备号怎么处理?

一句话答案字符设备驱动核心是注册cdev并实现file_operations(open/release/read/write/ioctl/mmap);设备号用a... 详情>>

2026-10-11 15:25:40
微带带通滤波器仿真中心频率正确,实物却偏移:先怀疑模型哪一项?

在微波PCB里,走线不只是互连;线宽、耦合间距、介质参数和金属外壳都是滤波器的一部分。从实物读结构|边缘耦合谐振器不是独立电感电容图中是边缘耦合的微带半波谐振器... 详情>>

2026-10-27 17:08:36
开班信息