在线情况
楼主
  • 头像
  • 级别
  • 门派
  • 职务总版主
  • 声望+9
  • 财富5
  • 积分3065
  • 经验390701
  • 文章6744
  • 注册2006-03-07
IIC总线简介
  [imga]../../upload/2006/05/01/161729.gif[/imga]
   在现代电子系统中,有为数众多的IC需要进行相互之间以及与外界的通信。为了提供硬件的效率和简化电路的设计,PHILIPS开发了一种用于内部IC控制的简单的双向两线串行总线I2C。I2C总线支持任何一种IC制造工艺,并且PHILIPS和其他厂商提供了种类非常丰富的I2C兼容芯片。作为一个专利的控制总线,I2C已经成为世界性的工业标准。
  [imga]../../upload/2006/05/01/161755.gif[/imga]
每个器件都有一个唯一的地址,而且可以是单接收的器件(例如:LCD驱动器)或者可以接收也可以发送的器件(例如:存储器)。发送器或接收器可以在主模式或从模式下操作,这取决于芯片是否必须启动数据的传输还是仅仅被寻址。I2C是一个多主总线,即它可以由多个连接的器件控制。
    基本的I2C总线规范于20年前发布,其数据传输速率最高为100Kbits/s,采用7位寻址。但是由于数据传输速率和应用功能的迅速增加,I2C总线也增强为快速模式(400Kbits/s)和10位寻址以满足更高速度和更大寻址空间的需求。
    I2C总线始终和先进技术保持同步,但仍然保持其向下兼容性。并且最近还增加了高速模式,其速度可达3.4Mbits/s。它使得I2C总线能够支持现有以及将来的高速串行传输应用,例如EEPROM和Flash存储器。

 摘自:zlgmcu
[COLOR=#0000ff]欢迎发贴分享设计心得、开源DIY...[/COLOR]
在线情况
2
  • 头像
  • 级别
    • 积分3
    • 经验2
    • 文章7
    • 注册2006-05-18
    请问:为何IIC传送过程中,其地址(slaver address)是7bits?
    IIC的书上说:送入SDA中的每个字节长度必须是8-bits,在IIC总线上,START信号后,一个从地址(slave address)被传送,在该字节中的bit7是一个读写选择信号,“0”表示写,“1”表示读。但在实际中传送的地址是8bits的,如在我们门的一个系统中EDID的地址是0xA0,这种矛盾怎么解释?请e-mail:xintan_chen@amlogic.com
    微控网感谢您的参与
    在线情况
    3
    • 头像
    • 级别
    • 门派
    • 职务总版主
    • 声望+9
    • 财富5
    • 积分3065
    • 经验390701
    • 文章6744
    • 注册2006-03-07
    你可能还没理解到,因为第一个字节(为slave address)由7位地址和一位R/W读写位组成的,这字节是个器件地址。
    首先,你要知道:常用IIC接口通用器件的器件地址是由种类型号,及寻址码组成的,共7位。
    如格式如下:
      D7 D6 D5 D4 D3 D2 D1 D0
    1-器件类型由:D7-D4 共4位决定的。这是由半导公司生产时就已固定此类型的了,也就是说这4位已是固定的。

    2-用户自定义地址码:D3-D1共3位。这是由用户自己设置的,通常的作法如EEPROM这些器件是由外部IC的3个引脚所组合电平决定的(用常用的名字如A0,A1,A2)。这也就是寻址码。
    所以为什么同一IIC总线上同一型号的IC只能最多共挂8片同种类芯片的原因了。

    3-最低一位就是R/W位。这位不用我多说了。

    这没什么矛盾可解释,你再看看书本和多动脑子我想你很快就会明白的。
    [COLOR=#0000ff]欢迎发贴分享设计心得、开源DIY...[/COLOR]
    在线情况
    4
    • 头像
    • 级别
      • 积分3
      • 经验2
      • 文章7
      • 注册2006-05-18
      经你这么一说,我大概明白了,谢谢!
      按你的说法:在IIC传送中,先传送最高位D7,我现在明白为何在我们的系统中EDID有两个地址是0xA0/0xA1,一个是读地址,一个是写地址,我以前还真没搞懂
      微控网感谢您的参与
      在线情况
      5
      • 头像
      • 级别
        • 积分3
        • 经验2
        • 文章7
        • 注册2006-05-18
        您好,有关I2C的传送又来请教你了。

        1st、 在我们系统的主芯片与MStar芯片的通信过程中,传送的第一个数据的最高位总是为低电平,比如我向某寄存器中先写一个数(0xff),再读取该寄存器,读出的数据的最高位总是为“0”(0x7f)。不过这种错误仅仅在第一个数据出现,以后的数据就正确了。

        2nd、 在我们系统的主芯片与EEPROM芯片的通信过程中,情况就更糟糕,不管向memory Addr 中写什么数据,然后再读取这个memory Addr中数据,出来的数据总是“0xff”(note:slaver Addr正确,芯片的电源ok,也没有写保护WP=0),我实验了两块板子,不可能这两块板子的EEPROM都坏了吧!程序(与1st中的)是一样的,只是slaver Addr发生改变。

        微控网感谢您的参与
        在线情况
        6
        • 头像
        • 级别
        • 门派
        • 职务总版主
        • 声望+9
        • 财富5
        • 积分3065
        • 经验390701
        • 文章6744
        • 注册2006-03-07
        从你的资料看来,我无法总判定是那里或什么问题;估计很大程序上是你的程序问题。
        要知道,主机向从访问时。
          1-先向总线发出芯片地址
          2-如果有芯片地址正确的芯片,会产生一个SDA上应答。
          3-接着主机再发出应答过的芯片发出将要所进行操作的片内地址。
          4-芯片地址正确的芯片,会再产生一个SDA上应答。
          5-此时如果是读操作,从芯片将输出数据到SDA上。如果是写操作,主机会将数据写到SDA上。
          就这样可以完成了一个读或写的操作。当然这里面还开始和停止位这些动作。
          对以此类的分析,我们一般建议学生使用我站销售的虚拟示波器来做分析,用ezSDO虚拟示波器可以方便地为IIC总线进行分析,因为有较深圳的波动存储功能。捕获回来的波形后,可以进行分析比较等动作。
        [ 此贴最后由DC在2012-11-6 23:46:09编辑过 ]
        [COLOR=#0000ff]欢迎发贴分享设计心得、开源DIY...[/COLOR]
        Powered by LeadBBS 9.2 .
        Page created in 0.2012 seconds with 5 queries.