I2C协议概述
-
I2C 协议由两根信号线组成,分别是 SDA 和 SCL。分别代表 Data 和 Clock。
- 其中,SCL 的频率在 FM 模式下为 400KHz,在 FM+ 模式下为 1MHz。
- 连接到总线的器件输出级必须是漏极开路或集电极开路(即可以执行线与的功能)。详见《集电极开路输出 与 推挽输出》文章。
- 初始状态 SCL 和 SDA 同为高,SDA 拉低(SCL 仍为高)时,表示发送开始;SCL 为高,SDA 由低变为高时,表示发送结束。
-
SCL 在高电平时采样,所以 SDA 需要在 SCL 为低电平时完成改变,如下图所示。
- 每个发送周期发送 8 位数据,其中 Slave Address 为 7 bit 加上 1 bit 的读写位,其中 1 表示读,0 表示写。
-
主机发送数据时,通常 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
网友评论