Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: AM1707. Linux. Нужен пример модуля, обращающегося к устройству на I2C
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > Linux
kovigor
Добрый день !
Изучаю разработку драйверов для Linux. Опробовал и творчески модифицировал модуль, регистрирующий в системе новый обработчик прерывания от GPIO, а также символьный драйвер. Все работает. Особых вопросов, вроде бы, нет. Следующая задача - нужно из моего модуля обратиться к устройству, подключеннjму по I2C, например, прочитать байт из Serial EEPROM. Если кто сможет поделиться примером, буду очень признателен.
Заранее спасибо ...

P.S. Еще вопрос - что посоветуете почитать про разработку драйверов для Linux ? Сейчас штудирую вот эту книжку:

http://dmilvdv.narod.ru/Translate/LDD3/ldd3_content_dyn.html

но она мне кажется не совсем удачной. Может, есть что-то более подходящее ?
kurtis
http://elinux.org/Interfacing_with_I2C_Devices
в исходных текстах смотрите ./Documentation/i2c/*

По поводу книжки, то лучше читайте оригинал http://lwn.net/Kernel/LDD3/
kovigor
Цитата(kurtis @ Apr 10 2012, 11:20) *
http://elinux.org/Interfacing_with_I2C_Devices
в исходных текстах смотрите ./Documentation/i2c/*

По поводу книжки, то лучше читайте оригинал http://lwn.net/Kernel/LDD3/



Спасибо, смотрю ..

Дополнение от 10.04.2012.
Попробовал прочитать байт из Serial EEPROM, запаянной на плате (ее адрес: 0x50). Вот этот вызов завершается с ошибкой:
(ioctl(file, I2C_SLAVE, addr).
И при этом осциллограф показывает полное отсутствие на шине всякой активности. Если взять любой другой адрес, например, 0x10, то при выполнении указанного выше "ioctl(file, I2C_SLAVE, addr)" этот адрес действительно наблюдается на шине, но на обращение по нему, конечно же, никто не отвечает. Такое впечатление, что ядро блокирует доступ по адресу 0x50. Завтра в отладочных целях попробую припаять на плату еще одну ИС памяти, но уже с другим адресом, и обратиться к ней ...

Дополнение от 11.04.2012.
Подпаял на плату еще одну ИС Serial EEPROM, о которой Linux не знал (ее адрес: 0x51), и попробовал прочитать из нее байты. На этот раз все отлично читается. Теперь нужно выяснить, как обратиться к штатной ИС, запаянной на плате, если это вообще возможно. Кстати, на плате есть и другие ИС, например, кодек TLV320 c интерфейсом I2C. К ней Linux тоже не дает обратиться, картина в точности соответствует наблюдаемой для Serial EEPROM ...
kovigor
Прошу прощения, удалил ...
Ya_Mike
Цитата(kovigor @ Apr 10 2012, 16:48) *
Дополнение от 10.04.2012.
Попробовал прочитать байт из Serial EEPROM, запаянной на плате (ее адрес: 0x50). Вот этот вызов завершается с ошибкой:
(ioctl(file, I2C_SLAVE, addr).
И при этом осциллограф показывает полное отсутствие на шине всякой активности. Если взять любой другой адрес, например, 0x10, то при выполнении указанного выше "ioctl(file, I2C_SLAVE, addr)" этот адрес действительно наблюдается на шине, но на обращение по нему, конечно же, никто не отвечает. Такое впечатление, что ядро блокирует доступ по адресу 0x50. Завтра в отладочных целях попробую припаять на плату еще одну ИС памяти, но уже с другим адресом, и обратиться к ней ...

Дополнение от 11.04.2012.
Подпаял на плату еще одну ИС Serial EEPROM, о которой Linux не знал (ее адрес: 0x51), и попробовал прочитать из нее байты. На этот раз все отлично читается. Теперь нужно выяснить, как обратиться к штатной ИС, запаянной на плате, если это вообще возможно. Кстати, на плате есть и другие ИС, например, кодек TLV320 c интерфейсом I2C. К ней Linux тоже не дает обратиться, картина в точности соответствует наблюдаемой для Serial EEPROM ...


Попробуйте i2ctools - очень полезный инструментарий при отладке и работе с i2c, да и в качестве примера юзер-спейсного кода для работы с i2c подойдёт.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.