I2C | 如何读 I2C 波形()

分析I2C时序波形时需要注意如下几点:

  • I2C 发出字节的bit顺序是从高位-->低位
    注意,这里有个很容易想当然犯错误的地方 – 有些人错误的看波形的方式是"先发出的波形被后发出的波形推着往前(右)走"。
    正确看懂波形的方式是“波形是从左往右增加的,已发出的bit波形位置固定了不会移动;简单理解就是左边的波形是先发出来的,是高位,右边的波形是后发出来的,也就是低位。。
  • Start / Restart 信号波形:SCL 高电平 + SDA 由高变低
  • 每次传输是9 bits = 8 bits data + 1 bit ACK
    8bits data可能的情况是:7bit addr + 1 bit 1/0(读写);8 bits register addr;8 bits tx data;8 bits rx data
    注意:有些 register addr是16 bits 或者 32 bits,这个时候就会连续发 2个或4个 8 bits 来组成 register addr。
  • Stop 信号波形:SCL 高点平 + SDA 由低变高
  • ACK – 拉底SDA
    host send to slave 时:ACK由slave发出;
    slave send to host 时:ACK由host发出;
  • 注意:波形中 Start/7bit addr + 1 bit 1/0(读写)/Restart/Stop 是由I2C host 发出的,在Slave驱动中找不到对应的数据;其余的波形对应的是Slave 驱动代码中 i2c read/write函数中构造的i2c_msg.buf 和 i2c_msg.len。这一点在结合驱动分析波形时很重要哦~
【I2C | 如何读 I2C 波形()】上传一份实际的波形图:
I2C | 如何读 I2C 波形()
文章图片

    推荐阅读