如何在Linux中通过USB从i2c设备检索数据

sta*_*005 2 linux usb i2c

我有一个温度传感器,该温度传感器使用USB-I2C适配器(http://www.robot-electronics.co.uk/htm/usb_i2c_tech.htm)连接,并将该设备连接到linux计算机(suse10)。我输入dmesg并看到

usb 3-3: new full speed USB device using ohci_hcd and address 10
usb 3-3: new device found, idVendor=0403, idProduct=6001
usb 3-3: new device strings: Mfr=1, Product=2, SerialNumber=3
usb 3-3: Product: FT232R USB UART
usb 3-3: Manufacturer: FTDI
usb 3-3: SerialNumber: A7007K93
usb 3-3: configuration #1 chosen from 1 choice
ftdi_sio 3-3:1.0: FTDI USB Serial Device converter detected
drivers/usb/serial/ftdi_sio.c: Detected FT232BM
usb 3-3: FTDI USB Serial Device converter now attached to ttyUSB0
Run Code Online (Sandbox Code Playgroud)

但是我不知道如何读取当前温度。

更新1:实际上,I2C总线最多可以连接127个传感器。但是我不知道如何列出可用传感器的地址。

有人可以给我一些提示吗?提前致谢

kgi*_*kis 5

您的适配器允许您通过虚拟串行端口发送I2C命令。已为您创建了一个串行端口。您需要打开它并向它发送命令。这些命令特定于您所连接的设备。请参阅您提供的链接中的示例以获取想法。

没有数据表,很难为您提供正确的说明。您的设备很可能将使用一个字节地址,读取过程如下:

[I2C_AD1] [Device I2C address + Read bit] [Device Address register] [Number of bytes to read]
0x55 0xXX 0x00 0x01
Run Code Online (Sandbox Code Playgroud)

您需要向串行端口发送4个字节。第一个指令指示USB到I2C转换器发送读取命令。第二个是连接到I2C总线的设备的地址。I2C设备使用7位地址(0-127)。通常这些都是左移一位。因此,您需要扫描以下地址(从0到127迭代,左移一位,将bit0设置为1):

([0x00 - 0x7F] << 1) | 1
Run Code Online (Sandbox Code Playgroud)

由于我们没有数据表,因此我无法告诉任何有关最后两个字节的信息。您可以尝试使用伪值。如果设备连接到扫描的I2C地址,则设备应以NACK答复以尝试读取不存在的寄存器。发送到与实际设备不对应的I2C地址的读取命令应被忽略。