工具与软件:
我们得到了一个定制板、其中两个 ADS112C04连接到同一 I2C 总线(地址0x40和0x45)。 现在、我们并不是真正了解其中任何一个结果、因此我们认为应该退一步尝试先读取内部温度传感器。
目前、我们正在 Linux shell 中执行所有操作:
adr=0x45 # reset i2cset -y 0 $adr 0x06 c # Reg [0] will be ignored anyway #i2cset -y 0 $adr 0x40 0x00 b # Reg [1] - Continuous conversion mode and temperature sensor i2cset -y 0 $adr 0x44 0x09 b # Reg [2] - Data counter and integrity check with inverted data output i2cset -y 0 $adr 0x48 0x50 b # Reg [3] - no IDAC #i2cset -y 0 $adr 0x4c 0x00 b # print out all configuration registers i2cdump -y -r 0x20-0x2F 0 $adr # start i2cset -y 0 $adr 0x08 c # poll results watch -n1 i2cget -y 0 $adr 0x10 i 6
i2cdump 会输出这些值、因此我们确保寄存器的写入正确。 为了进一步测试此情况、我们启用/禁用数据计数器、并且 RDATA 中的字节数随之改变。
0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef 20: 00 00 00 00 09 09 09 09 50 50 50 50 00 00 00 00 ....????PPPP....
读取 RDATA 的结果为
0xfd 0x0c 0x97 0x02 0xf3 0x68
[0]是数据计数器、[3]是反向值。 它一直向上计数、这正是我们所期望的。
[1]/[2]是温度传感器值、[4]/[5]是反向值。
我们在理解的问题是、0x0c97为(根据表13)一个100.7摄氏度。 我们可以触摸 IC、它肯定没有那么热。
所以,我们显然在做一些错误的事情,但我们不知道什么。 有人能给我们一个线索,我们的错误可能是什么?