|
AM1707. Linux. Нужен пример модуля, обращающегося к устройству на I2C, Например, читающего байт из Serial EEPROM вроде 24C04 |
|
|
|
Apr 9 2012, 18:23
|
Гуру
     
Группа: Свой
Сообщений: 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но она мне кажется не совсем удачной. Может, есть что-то более подходящее ?
|
|
|
|
|
 |
Ответов
(1 - 4)
|
Apr 10 2012, 12:48
|
Гуру
     
Группа: Свой
Сообщений: 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 ...
|
|
|
|
|
Apr 15 2012, 21:20
|
Участник

Группа: Участник
Сообщений: 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 подойдёт.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|