IIC如何释放数据总线? 为什么=1就是释放?
最近看IIC原理,释放一词经常用遇到,在nxp的标准中也有看到,有点疑惑,因此百度,在百度知道中,有大佬的解释,可以看看何为“释放”,结合数字电子技术,应该可以理解了。
下面总结了一下三个解释何为“释放”的原文:
1、
iic 注意到一点,硬件上总线的输出级必须是漏极开路或集电极开路,这就让总线具备线与功能。线与:顾名思义就是“与操作”,那么当总线上只要存在一个低电平,整个总线上的电平都会被拉低,而只有保持总线所有设备都为高电平,整个总线的电平才会为高电平,这也是高电平被定义默认电平的原因。因此高电平表示释放。
当SDA和SCL都为高电平时,就称之为释放总线。
可以看下协议内容,停止信号:SCL保持高电平的状态下,SDA出现上升沿。停止信号过后,总线被认为“空闲”。
2、
要解释‘释放’这个词,就得搞清I2C的IO配置模式,I2C的IO是开漏或者开集电极模式,即I2C对应的IO口只能输出:
①“低电平(逻辑0,IO被接在GND上,只能是低电平)”
②“高阻态(逻辑1,IO可以被拉高或者拉低)”两种状态,而所谓的“高电平”其实是在输出逻辑1、IO为高阻态时,IO被外部或者内部上拉电阻拉高的。
SDA=0时,SDA脚在IC内部被直接接在GND上,它只能是低电平,外部器件也无法把SDA脚拉高,这叫拉低。
SDA=1时,SDA脚为高阻态,(相当于在万用板上焊了一根IO,这个IO谁都不接,这就是高阻了),这时SDA可以被别的器件拉低或者拉高,即,这时SDA脚的控制权是“释放状态”,如果谁都不去管这个高阻态的脚,这个脚会被上拉电阻拉高以保证不会被空气里的电磁波干扰而高高低低乱跳。
所以,要真正理解释放这个词,先要搞清IO口内部的构造,了解推挽输出和开漏输出的本质
3、
个人理解:io口用的是oc门(三极管)或od门(mos管)。oc、od门可以在输出端直接“线与”。iic的sda线上连有多个器件,他们之间是 与 逻辑关系。当单片机(主机)的端口p21(sda)为0,由于 与 逻辑关系,其他器件(从机)无论输出0还是1,总线上都是0,不会改变,即总线被主机占用。当p21为1,即主机释放总线,此时主机io口(oc、od门)为高阻态,就是直接悬空的状态,这样总线电位由其它器件控制,从机中有一个器件为0,总线就为0,全都是1,总线为1。