用 Saleae 分析 LM75 的 I2C 协议

目录 Content
[hide]

LT 曾入手过一个山寨 Saleae 逻辑分析仪《山寨利器 Saleae8 逻辑分析仪》,这次用来捕捉分析一下  LM75 的 I2C 协议。

一、Arduino 测试程序

使用  Arduino 编写测试程序,向 LM75 地址 0x72 读取 2 个 byte,使用的 LM75  还是这篇《Arduino 和 LM75 的 I2C 总线通讯(1)》里面的,啧啧,8年了!

#include <Wire.h>

void setup()
{
  Wire.begin();
  Serial.begin(9600);
}

void loop()
{
  Wire.requestFrom(72, 2);  
  while(Wire.available()) 
  { 
    int part1 = Wire.read();
    Serial.print("part1  is : ");
    Serial.println(part1,BIN);
    
    int part2 = Wire.read();
    Serial.print("part2  is : ");
    part2 &= B10000000;
    part2 >>= 7;
    Serial.println(part2,BIN);

    float result = part1 + part2 * 0.5;
    Serial.print("result is : ");
    Serial.println(result);
    Serial.println("-----------------");
    
  }


  delay(4000);
}

二、协议分析

Saleae 设置 8M 采样率,采集时长 12 秒。可以这样操作:按住 Arduino 的复位按钮,点击开始采集后立即松开,能采到3次数据。

采集的数据保存文件(可用 1.2.14 版本 导入打开查看): 8 MHz, 96 M Samples [6]

得到以下信息:

Time [s]  Analyzer Name  Decoded Protocol Result
2.2441445 I2C Setup Read to [‘145’] + ACK
2.244238875 I2C ’28’ + ACK
2.244334375 I2C ‘127’ + NAK
6.25228 I2C Setup Read to [‘145’] + ACK
6.2523745 I2C ’28’ + ACK
6.252469875 I2C ‘127’ + NAK
10.2604155 I2C Setup Read to [‘145’] + ACK
10.26050988 I2C ’27’ + ACK
10.26060525 I2C ‘255’ + NAK

同时从时钟波形上得知,时钟频率为 100kHz,表明工作在标准模式。

在分析之前,了解一下I2C协议的基本规则:

  • 在SCL为高电平时,SDA 下降沿开始通信,SDA上升沿结束通信。
  • 在SCL为低电平时,SDA 数据变化
  • Master 每发送1个byte,Slave 要应答0 (ACK)
  • Slave 每发送1个byte,Master 如果准备读取下一个数据应答0 (ACK),否则结束通信应答1 (NAK)

参照 LM75 datasheet 里的时序

1. 第一、二次读取

Setup Read to [‘145‘] + ACK

1001000(地址)+ 1 (读)+ 0 (ACK by LM75)

28‘ + ACK

00011100(数值) + 0 (ACK by Arduino)

127‘ + NAK

01111111(数值) + 1( NAK by Arduino)

所以温度为00011100 0 , 换算成 28.0 度。

2. 第三次读取

Setup Read to [‘145‘] + ACK

1001000(地址)+ 1 (读)+ 0 (ACK by LM75)

27‘ + ACK

00011011(数值) + 0 (ACK by Arduino)

255‘ + NAK

11111111(数值) + 1 ( NAK by Arduino)

所以温度为00011011 1 ,换算成 27.5 度。

三、点评

I2C 协议是飞利浦发明的一个总线协议,用一根时钟线和一根数据线完成数据交换,相比现在的高级通信方式显得很落后,但是对于理解器件之间的物理通讯协议是很有帮助的。

四、延伸阅读

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.