楼主最近因工作需要,需要利用iic总线在应用层读取某温度传感器的温度寄存器。下面简单介绍下遇到的主要问题,以及逻辑分析仪的简单使用。 首先,根据设计的电路图,分析出该设备挂在i2c-2总线上。
接着计算从机地址,根据温度传感器的说明文档,发现该芯片从机地址共七位,前四位是固定的,为1001,后三位通过A0,A1,A2三个引脚控制。
通过查看电路图,发现这三个引脚均接地,则都为0,从机地址即为1001000,即0x48。需求是要读取0x00处的温度寄存器,读两位。可以通过总线命令,把0x00写入芯片的指针寄存器,再读取两字节,即为存储的温度信息。
尝试在控制台下使用i2ctansfer命令读取数据(需要安装支持包) i2ctransfer -f -y 2 w1@0x48 0x00 r2 上面的参数意思分别为 -f 强制执行 -y 取消提醒 2 代表i2c-2 w1 写一位 0x48 从机地址 0x00 写入的数据 r2 读两字节数据。 执行后遇到问题,提醒设备不存在。 尝试使用逻辑分析仪分析发出的指令。
如图,通过左上角的相关设置按钮,可以选择使用的通道,可以设置采样点以及每秒钟的采样数。点击开始按钮即可捕捉四个通道上的电平信号,在后台发送指令之后,点击停止按钮完成采集,在相应通道中就是对应的波形。
然后,我们在右侧选择解析器,选择i2c,对应好SDA和SCL线,就可以看到相应的解析结果了。
楼主遇到的问题主要是一开始CH2和CH3没有信号,检查后发现0x48这个地址没有透传过去,修改好结果就如上图所示,发送端和接收端收到的i2c指令是一样的了。
图片中写入的地址是0x90,即0b10010000,读取的地址是0x91,即0b10010001,读写均为八位地址,发现就是从机地址扩展了一位,最后一位为0时是写,最后一位为1时是读。
此时,成功读取到需要的数据。