I2C为什么要接上拉电阻?
因为它是开漏输出。

为什么是开漏输出?
I2C协议支持多个主设备与多个从设备在一条总线上,如果不用开漏输出,而用推挽输出,会出现主设备之间短路的情况。所以总线一般会使用开漏输出。
为什么要接上拉电阻?
接上拉电阻是因为I2C通信需要输出高电平的能力。一般开漏输出无法输出高电平,如果在漏极接上拉电阻,则可以进行电平转换。
I2C由两条总线SDA和SCL组成。连接到总线的器件的输出级必须是漏极开路,都通过上拉电阻连接到电源,这样才能够实现“线与”功能。当总线空闲时,这两条线路都是高电平。
我们知道了SDA需要开漏输出和上拉电阻的原因,那为什么连SCLK也要使用这种模式呢?
这是因为虽然大部分时间都是由主机来驱动SCLK的,但是从机也是有情况来驱动SCLK线的;比如:当从机需要处理自身的数据,暂时不能和主机通信,就需要驱动SCLK(拉低SCLK)
这种情况不使用开漏输出的话就容易短路。
IIC的协议层
I2C 总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。
开始信号:SCL 为高电平时,SDA 由高电平向低电平跳变,开始传送数据。
结束信号:SCL 为高电平时,SDA 由低电平向高电平跳变,结束传送数据。
(开始位“Start”和停止位“Stop”,只能由Master来发出。)
应答信号:接收数据的 IC 在接收到 8bit 数据后,向发送数据的 IC 发出特定的低电平脉冲,表示已收到数据。CPU 向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU 接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。
这些信号中,起始信号是必需的,结束信号和应答信号,都可以不要。
IIC 总线时序图

IIC协议采用开漏输出并接上拉电阻以避免主设备间短路,实现多设备共线通信。其通信过程包括开始信号、结束信号、应答信号,通过SCL和SDA线进行数据传输。在数据传输中,SCL高电平时SDA数据需稳定,反之可切换状态。数据传输带响应,接收端通过ACK或NACK确认继续传输。注意SCL由主机控制,数据有效性至关重要,软件模拟IIC时需遵循数据稳定性原则。
https://blog.csdn.net/qq_43732429/article/details/112755804

2605

被折叠的 条评论
为什么被折叠?



