zoukankan      html  css  js  c++  java
  • I2C协议简介

     主从芯片如何传输数据

    AT24C02是一个存储芯片,需要把数据从ARM板发给AT24C02,也需要从AT24C02读取数据。

    I2C是一个主从结构,Master发起传输,slave接收或回应

    一主多从:如何选在哪个从芯片呢?每个从芯片都有设备地址,设备地址各不相同,这些地址都是在芯片里写死的。

     

     

     设备地址是7位,先传输地址的最高位MSB。

    SCL为低电平时,SDA可变化

    SCL为高电平时,SDA不可变。

    问:如何在SDA上实现双向传输?

    主从设备里面必然有两个引脚,发送引脚和接收引脚。

     1)主设备发送时,从设备不应该发送。

    可以通过SCL区分控制。

    2)主设备发送时,从设备的发送引脚不影响SDA上传输的数据。同样从设备发送时,主设备的发送引脚不要影响SDA上传输的数据。怎样做到呢?

    如上图所示,使用开极电路。

    使用一真值表来表示A、B以及SDA引脚电平状态。

     1)当A为低电平时,主设备里的三极管不导通。B为低电平时,从设备里的三极管也是不导通的。那么此时SDA引脚的电平状态是什么?

    如果没有接那个上拉电阻,那么SDA引脚是出于悬空状态的,悬空引脚的电平状态是无法确定的,这也是为什么加上上拉电阻的原因。加上上拉电阻后,此时SDA引脚电平的状态是由上拉电阻决定的,为1。

    2)当A为低电平时,主设备三极管不导通。B为高电平时,从设备的三极管导通,因此SDA引脚的电平为低电平。

    后面两种情况的分析,和上面两种情况的原理是一样的,在此不再赘述。

    从上面分析可以看出,

    1)芯片不影响数据线上即SDA上的数据,只要使这个芯片不驱动三极管即可。

    2)要使SDA引脚上电平为高电平,不要驱动主从设备任意的三极管

    3)要使SDA引脚上电平为低电平,驱动主从设备上的任意一个三极管即可。

    举个例子:

    主设备发送8bit数据给从设备

     

     问题:SCL是不是一直由主控芯片来决定?

    答案:不是的。第9个时钟以后,如果某一方(比如说,我现在还忙不过来,再等一会儿),它可以一直把SCL拉低。当SCL为低电平时,主从芯片都不应该使用I2C总线。

    SCL为低电平时,表示大家都在忙,当变为高电平时,再来操作。

    注意:对于I2C协议,它只能规定如何传输数据,这个数据是什么含义,它完全不能控制。数据的含义由设备决定。

  • 相关阅读:
    Python爬取暴走漫画动态图
    ADB server didn't ACK 的解决方法
    安装APK时报Local path doesn't exist错误
    当Web Services遇到Android(初步接触时可能遇到的错误)
    eclipse启动时出现Incompatible JVM Version [###] of the JVM is not suitable for this product ...
    两个Activity之间的切换和响应
    关于不同Android手机适配的几个问题(转)
    ERROR: Unknown command 'crunch' 解决方法
    eclipse无法启动的常见原因
    获取手机屏幕的宽和高
  • 原文地址:https://www.cnblogs.com/-glb/p/11483711.html
Copyright © 2011-2022 走看看