示波器测量i2c信号实例

1. 配置示波器

  1. 将两个表笔接触 SCL、SDA 触点,确认表笔都接触上的标志是两个表笔都是高电平。
  2. 将trigger MENU中的 【触发方式】 设置成边沿触发,【信源】 选择SDA表笔,【边沿类型】 设置成下降沿,【触发MODE】 先变成auto,
  3. 将触发点设置到偏向屏幕的左侧,以便能看到更多的波形。
  4. SCL比SDA稍微靠上一点,容易分析。
  5. 发出信号,先整体观察下整体波形。
  6. 【触发MODE】变成Single,即可单次采集到波形,想再一次触发新的波形,按SINGLE键。

 

在linux下发送i2c的波形可以使用i2cdetect工具

实例采集的是7位地址的i2c地址的波形

 

2. 数据规律

开始标志 + 8位数据(7位器件地址+1个读写位) + 1个ACK/1个NACK + 8位有效数据 + ACK + ...

  • 开始表示:SCL高电平期间SDA的下降沿
  • 读写位:1读,0写
  • 有效位:SCL的高电平器件,SDA的电平一定是稳定的,每个SCL高电平期间的SDA的电平表示的是各个位。依次读即可。

 

3. 实例分析

如下是一个典型的波形

图中直接读取结果

0b 1011 1010 0 1000 0001 0

其中前八个位 0b 1011 1010,则

器件地址 0b 1011 1010 >> 1 = 0b 0101 1101 = 0x5d,

读写位是移出的位,0表示写。

后边紧跟着的0 表示的是ACK

然后紧跟着传输的数据 0b 1000 0001 + 一个 0作为ACK。