Как получить данные с устройства i2c через USB в Linux

У меня есть датчик температуры, который подключен с помощью адаптера 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 датчиков. Но я понятия не имею, как перечислить адреса доступных датчиков.

Кто-нибудь может дать мне несколько советов? заранее спасибо

13.10.2009 07:59:13
1 ОТВЕТ
РЕШЕНИЕ

Ваш адаптер позволяет отправлять команды 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, который не соответствует фактическому устройству, следует игнорировать.

5
14.10.2009 09:50:38
Спасибо, это в правильном направлении. Однако я не уверен, какую команду мне следует отправить. Я был только успешно опрошен номер ревизии FireWire. Я все еще не могу сканировать все возможные адреса устройств (максимум 127) и не могу прочитать значение доступных устройств.
stanleyxu2005 13.10.2009 15:03:02
Какой датчик температуры вы используете? Где-нибудь есть таблица данных?
kgiannakakis 13.10.2009 18:58:56
Привет, я все еще ищу таблицу данных датчика температуры. Но я думаю, что даже без каких-либо данных у него должен быть способ сканирования, какие адреса заняты. Является ли это возможным?
stanleyxu2005 14.10.2009 08:49:10