I2C 协议

2019-06-10  本文已影响0人  土DOU吹雪

I2C协议概述

  1. I2C 协议由两根信号线组成,分别是 SDA 和 SCL。分别代表 Data 和 Clock。


  2. 其中,SCL 的频率在 FM 模式下为 400KHz,在 FM+ 模式下为 1MHz。
  3. 连接到总线的器件输出级必须是漏极开路或集电极开路(即可以执行线与的功能)。详见《集电极开路输出 与 推挽输出》文章。
  4. 初始状态 SCL 和 SDA 同为高,SDA 拉低(SCL 仍为高)时,表示发送开始;SCL 为高,SDA 由低变为高时,表示发送结束。
  5. SCL 在高电平时采样,所以 SDA 需要在 SCL 为低电平时完成改变,如下图所示。


  6. 每个发送周期发送 8 位数据,其中 Slave Address 为 7 bit 加上 1 bit 的读写位,其中 1 表示读,0 表示写。
  7. 主机发送数据时,通常 1 字节 1 字节的发送,当发送完一个字节时,会让出总线的控制权(即让自己处在高阻态)。此时从机若接受正确,会在下一个高电平处拉低 SDA(联系3)。


当一个输出级为漏极/集电极开路时(开漏输出),它只能输出低电平和高阻态,高阻态可理解为通过很大的电阻把输出引脚与 MCU 芯片内部隔开,近似开路的状态(电阻非常大)。这时引脚的电平不确定,可被外部电平轻松改变。

用 FPGA 代码表示如下:

        IIC_ack_setup:// ack prepare
            begin
            NS_iic <= IIC_ack_hold;
            iic_sda <= 1'bz;  //让出总线控制权
            end
        IIC_ack_hold:// ack response
            begin
            if(iic_sda==1||cnt_byte==0)
                NS_iic <= IIC_stop_setup;
            else
                NS_iic <= IIC_data_setup;
            cnt_byte <= cnt_byte -1;
            end

MIPI 的 CSI 协议中,SIOC 等价于 SCL 信号,SIOD 等价于 SDA 信号。

参考资料:
1.https://www.youtube.com/watch?v=6IAkYpmA1DQ
2.https://en.wikipedia.org/wiki/I%C2%B2C
3.https://www.cnblogs.com/kevinchase/p/7411494.html
4.https://blog.csdn.net/jiangdf/article/details/72779046

上一篇下一篇

猜你喜欢

热点阅读