I2C每一根线路(SDA和SCL)进入器件后,内部接有输入/输出两部分。输入部分的输入阻抗很高,可以不理会它对线路的影响。输出部分则必须是漏极开路的结构。
漏极开路输出结构有个特点:当拉低它时,它的输出为0;当抬高它时,输出端相当于与芯片“断开”,输出电平由外部的与上拉电阻所连接的高电平决定,而与器件的电源电压无关。
I2C是个多主总线。大家都挂在总线上需要随时“说话”(输出)。只有这种线与的结构,才能在硬件层面保证大家的“声音”都能随时发出来。至于同时发声可能导致的碰撞,那由冲突检测机制解决。
回头再看看“线与”的逻辑关系:当大家都不“讲话”时,所有芯片内部置输出为高,线路被外部电阻上拉为高;当任何一个器件要“讲话”时,该器件置输出为低,线路也立刻为低。这种大家都为高(1)时线路为高(1),任何一个为低(0)时线路就为低(0)。这正好是一种“与”关系,所以叫线与。