2009-10-13 103 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

相關問題