2009-10-13 109 views
2

我有一个温度传感器,它使用USB-I2C适配器连接(http://www.robot-electronics.co.uk/htm/usb_i2c_tech.htm) 我将此设备连接到我的Linux计算机(suse10)。 我输入的dmesg,看到如何检索数据从i2c设备通过USB在Linux中

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个传感器。但我不知道如何列出可用传感器的地址。

任何人都可以给我一些提示吗?在此先感谢

回答

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,左移一位,置位0到1):

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

因为我们没有一个数据表,我不能告诉任何关于最后两个字节。你可以尝试使用虚拟值。如果设备连接到扫描的I2C地址,它应该回复NACK以尝试读取不存在的寄存器。发送到与实际设备不对应的I2C地址的读命令应该被忽略。

+0

谢谢,这是在正确的方向。但是,我不确定,我应该发送哪个命令。我只成功查询了火线的修订版号。我仍然无法扫描所有可能的设备地址(最大127)并且无法读取可用设备的值。 – stanleyxu2005 2009-10-13 15:03:02

+0

您使用哪种温度传感器?有没有可用的数据表? – kgiannakakis 2009-10-13 18:58:56

+0

嗨,我仍在搜索温度传感器的数据表。但我认为,即使没有任何数据表,它仍然应该有一种扫描方式,哪些地址被占用。可能吗? – stanleyxu2005 2009-10-14 08:49:10

相关问题