I2C通信时,谁拉住了我的总线

💡 原文中文,约1800字,阅读约需5分钟。
📝

内容提要

I2C是一种串行通信方式,由两根双向信号线组成,具有时钟延展特性。通信协议中可以有一个或多个主机和多个从机。主机负责产生时钟周期,从机在接收到主机地址后进行通信。通过增加两个电阻可以判断谁拉住了总线。

🎯

关键要点

  • I2C是一种串行通信方式,由两根双向信号线组成,分别是数据线SDA和时钟线SCL。
  • I2C的高电平要求不严格,可以设置为3.3V、1.8V等,但低电平必须低于0.3倍的VDD。
  • I2C协议中可以有一个或多个主机和多个从机,主机负责产生时钟周期并初始化总线。
  • 从机在接收到主机地址后进行串行通讯,主机发送地址信息并等待从机的应答位ACK。
  • I2C的时钟延展特性允许从机强制拉低时钟线,以减缓数据通讯速度。
  • STM32支持时钟延展特性,可以在作为从机时拉低主机的时钟。
  • 判断谁拉住总线需要增加两个电阻,分别在靠近MCU和设备的一端,阻值为上拉电阻的十分之一和二分之一。
  • 通过检测电压,可以判断是哪个设备拉低了总线,正常情况下电平可以低下来。
  • 如果总线出现异常,通过测量中间点的电压可以判断拉住总线的设备。
  • 增加两个电阻的方式可以有效判断总线控制权,便于数据处理和恢复。
➡️

继续阅读