美文网首页
I2C 协议

I2C 协议

作者: 土DOU吹雪 | 来源:发表于2019-06-10 08:22 被阅读0次

    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

    相关文章

      网友评论

          本文标题:I2C 协议

          本文链接:https://www.haomeiwen.com/subject/hfhaxctx.html