Проблема с портированием драйвера Linux I2C - PullRequest
0 голосов
/ 03 декабря 2018

Я портирую драйвер I2C на Linux-4.Это устройство одновременно предоставляет несколько адресов I2C для разных функций.

Например:

address 0xAA is for access of SPI flash. 
address 0xA0 is for access of EEPROM.  
address 0x60 is for normal access (control purpose).  

Возможно ли поддерживать доступ к разным адресам I2C в одном драйвере устройства I2C?

Любая помощь приветствуется, спасибо

Ответы [ 3 ]

0 голосов
/ 06 декабря 2018

Зависит от того, о каком типе драйвера I2C вы говорите: драйвер шины (адаптера) или чипа (клиента)?

i2c-dev.c - это разновидность драйвера шины с символьным интерфейсом устройства, который экспортирует низкоуровневый API-интерфейс ядра I2C в пользовательское пространство.

Для каждого зарегистрированного адаптера I2C ядро ​​добавит i2c-N узел устройства в /dev интерфейсе пользовательского пространства.

Но вы не можете читать / записывать микросхему EEPROM, прикрепленную к /dev/i2c-N, как простой символустройство или файл.Вам нужно написать какую-нибудь служебную программу, касающуюся протокола чипа.

Но в Linux существуют специальные драйверы микросхем EEPROM, такие как eeprom.c или at24.c для регистрации устройств I2C EEPROM с адресами 0x50..0x57 (если яЯ не ошибаюсь) Ядро и создание файлов в /sys пользовательском интерфейсе.

Вы можете получить к ним доступ в виде файла в: /sys/bus/i2c/devices/0-005x/eeprom

0 голосов
/ 10 декабря 2018

Спасибо за Dražen Grašovec и помощь пользователя 2699113.

Я портирую драйвер устройства I2C (чип, клиент) на Linux-4.9.Этот чип принимает разные адреса устройств I2C для разных целей.Моя цель - создать только одно устройство I2C в файле дерева устройств Linux (.dts)

. Я решил проблему с помощью i2c_new_dummy ().

В функции проверки драйвера я создал два i2c_new_dummy () для создания двух дополнительных клиентов i2c.
Один (клиент № 1) предназначен для доступа к адресу I2C 0xAA, другой (клиент № 2) предназначен для I2Cадрес 0xA0.
Таким образом, я могу использовать клиент № 1 для связи с его флэш-памятью SPI и использовать клиент № 2 для доступа к EEPROM.

0 голосов
/ 03 декабря 2018

Я думаю, что это возможно.Используя i2c_transfer (), вы даете конкретный адрес в структуре i2c_msg устройства, с которым хотите установить связь.Таким образом, ваш драйвер сможет взаимодействовать со всеми функциями вашего устройства i2c.

...