I2C相关知识学习
- 通过I2C访问的模块:
SFP、XSFP、QSFP、QSFP28等等
通过MDIO访问的模块:
X2、CFP/CFP2/CFP4、XENPARK等等
- SDA:数据线,主机从机都能够控制。
SCL:时钟线,由主机控制
- 数据在时钟为高电平时有效:
SCL |
H |
H |
H |
H |
L |
SDA |
H->L |
L->H |
L |
H |
ALL |
FLAG |
Start |
Stop |
0 |
1 |
invalid |
- I2C中一个完整的数据包由9个字节组成:
器件地址有7位,总共地址128个,预留16个地址(0xFxxx, 0x0xxx),剩余112个地址,也就是说最多可以有112个器件。
- I2C写操作:
由主机控制start然后由器件地址寻址从机,从机下拉ack,由寄存器地址寻址写入内存,每个字节应答,最后由主机控制stop结束写操作。
- I2C读操作:
当前地址读:在I2C从机中存在一个当前地址寄存器,记录当前寄存器地址,改地址是最近一次I2C读写操作的寄存器地址+1。主机控制start然后由器件地址寻址从机,从机应答然后从当前地址发送数据,没字节主机应答一次,最后主机not ack并控制stop,结束读操作。
随机读:在当前地址读的方式前先将要读取的寄存器地址写入当前地址寄存器,然后主机控制restart(有些芯片需要先stop在start),紧着着进行当前地址读操作。