реклама на сайте
подробности

 
 
> AM1707. Linux. Нужен пример модуля, обращающегося к устройству на I2C, Например, читающего байт из Serial EEPROM вроде 24C04
kovigor
сообщение Apr 9 2012, 18:23
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Добрый день !
Изучаю разработку драйверов для Linux. Опробовал и творчески модифицировал модуль, регистрирующий в системе новый обработчик прерывания от GPIO, а также символьный драйвер. Все работает. Особых вопросов, вроде бы, нет. Следующая задача - нужно из моего модуля обратиться к устройству, подключеннjму по I2C, например, прочитать байт из Serial EEPROM. Если кто сможет поделиться примером, буду очень признателен.
Заранее спасибо ...

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

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

но она мне кажется не совсем удачной. Может, есть что-то более подходящее ?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 4)
kurtis
сообщение Apr 10 2012, 08:20
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 466
Регистрация: 21-06-05
Пользователь №: 6 205



http://elinux.org/Interfacing_with_I2C_Devices
в исходных текстах смотрите ./Documentation/i2c/*

По поводу книжки, то лучше читайте оригинал http://lwn.net/Kernel/LDD3/
Go to the top of the page
 
+Quote Post
kovigor
сообщение Apr 10 2012, 12:48
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(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 ...
Go to the top of the page
 
+Quote Post
kovigor
сообщение Apr 13 2012, 17:19
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Прошу прощения, удалил ...
Go to the top of the page
 
+Quote Post
Ya_Mike
сообщение Apr 15 2012, 21:20
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 18-05-10
Из: Ярославль
Пользователь №: 57 355



Цитата(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 подойдёт.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 00:25
Рейтинг@Mail.ru


Страница сгенерированна за 0.01397 секунд с 7
ELECTRONIX ©2004-2016