我知道在 I2C 中,SCL 和 SDA 线使用上拉电阻,引脚驱动器是集电极开路 NPN 器件,可以将引脚驱动到地。这为 I2C 提供了一个优势,即现在可以与多个从机共享同一总线,即使两个或多个从机意外地尝试同时驱动总线,也不会对系统造成任何损坏。
但这也可以在 SDA 和 SCL 线上使用PNP 开漏驱动器和下拉电阻器来完成。像时钟延长和多主机仲裁这样的事情也可以用这个来实现。
I2C 协议的当前实现是否比上述建议的替代实现有任何好处?
我知道在 I2C 中,SCL 和 SDA 线使用上拉电阻,引脚驱动器是集电极开路 NPN 器件,可以将引脚驱动到地。这为 I2C 提供了一个优势,即现在可以与多个从机共享同一总线,即使两个或多个从机意外地尝试同时驱动总线,也不会对系统造成任何损坏。
但这也可以在 SDA 和 SCL 线上使用PNP 开漏驱动器和下拉电阻器来完成。像时钟延长和多主机仲裁这样的事情也可以用这个来实现。
I2C 协议的当前实现是否比上述建议的替代实现有任何好处?
从电气上讲,这是有道理的,因为接地是 IIC 总线上所有设备的一个通用连接。这比强制电源成为所有 IIC 设备的公共连接要少得多,如果线路通过下拉驱动为高电平并浮动为低电平,则需要这样做。
请注意,IIC 设备并非都需要由相同的网络或相同的电压供电。如果两条总线都必须被驱动到单个公共电源电压,这将是不正确的。
在过去的美好时光中,TTL 驱动器在拉低信号方面比拉高信号要好得多。因此,I2C 等协议,以及中断线、复位等,都是使用带有分布式下拉的上拉实现的。
在可能具有不同电源电压的子系统之间使用接地作为公共参考更容易。如果您使用 PNP 晶体管上拉至电源电压,则所有子系统都必须连接到同一电源。
这里有很多好的答案,但还有另一个原因。
如果总线的静止状态是接地,则无法判断总线是否已连接或只是悬挂在空间中。
上拉位于主设备上是正常的。奴隶通常没有引体向上。这是因为断言低电平所需的下拉电流会随着连接到总线的设备数量的增加而增加。
从机插入总线后,可以检测到线路被拉高(假设它没有被使用)并知道总线实际上在那里并且安静。接地偏置总线不会出现这种情况。