2009-10-13 6 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, сдвиг влево на один бит, установите Bit0 к 1):

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

Поскольку мы не имеем таблицу я ничего не могу сказать о двух последних байт. Вы можете попытаться использовать фиктивные значения. Если устройство подключено к отсканированному адресу I2C, он должен ответить NACK на попытку прочитать несуществующий регистр. Команды чтения, отправленные на адрес I2C, который не соответствует фактическому устройству, должны игнорироваться.

+0

Спасибо, это в правильном направлении. Однако я не уверен, какую команду я должен отправить. Я только успешно запросил номер ревизии FireWire. Я все еще не могу сканировать все возможные адреса устройств (максимально 127) и не могу прочитать значение доступных устройств. – stanleyxu2005

+0

Какой температурный датчик вы используете? Есть ли там таблица данных? – kgiannakakis

+0

Привет, я все еще ищу техническое описание датчика температуры. Но я думаю, даже без каких-либо данных, у него все равно есть способ сканирования, какие адреса заняты. Является ли это возможным? – stanleyxu2005