如何通过linux中的usb从i2c设备检索数据

时间:2009-10-13 07:59:14

标签: 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

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

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

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

1 个答案:

答案 0 :(得分:4)

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

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

[I2C_AD1] [Device I2C address + Read bit] [Device Address register] [Number of bytes to read]
0x55 0xXX 0x00 0x01

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

([0x00 - 0x7F] << 1) | 1

由于我们没有数据表,因此我无法说出最后两个字节。您可以尝试使用虚拟值。如果设备连接到扫描的I2C地址,它应该用NACK回复以尝试读取不存在的寄存器。应忽略发送到与实际设备不对应的I2C地址的读命令。