|
ioctl, писать через него I2C данные |
|
|
|
 |
Ответов
|
Feb 16 2016, 04:51
|

Местный
  
Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091

|
Цитата(Метценгерштейн @ Feb 15 2016, 16:15)  как правильно делать отправку данных через ф-ю ioctl на i2c? Documentation/i2c/dev-interface Цитата(Метценгерштейн @ Feb 15 2016, 16:15)  i2c-0 сама шина. И может ли данная ф-я что-то писать в шину, если на шине есть звуковая карта на этом месте? Просто программа, которая запускается и пишет туда через ioctl, возвращает ошибку, т.к. шина занята. Мультимастер? Не имеет значения, какие устройства физически есть на шине. Имеет значение, занята шина какой-то операцией в данный конкретный момент или нет. Шину i2c в любой момент времени может использовать только один мастер. Естественно, что если шина уже занята каким-то мастером, то другой мастер в это время работать с шиной не может. Он должен ждать освобождения шины.
--------------------
Всего наилучшего, Alex Mogilnikov
|
|
|
|
|
Feb 17 2016, 05:44
|

Местный
  
Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091

|
Цитата(des333 @ Feb 16 2016, 12:32)  Имеет значение то, какие драйвера сейчас загружены. Есть ли среди них использующие эту I2C шину. Что-то я не понял Вашу мысль... Если не загружено ни одного драйвера, использующего нашу шину, каким образом пользовательская программа сможет обратиться к устройству на этой шине??? Вот, например, у меня в устройстве в ядре присутствует один из драйверов из drivers/i2c/busses/. Пользовательские программы с его помощью (используя ioctl) обращаются к устройствам на шине. Если на момент обращения шина свободна, выполняется запрошенная операция. Если же на момент обращения шина занята (на шине присутствует другой мастер, который в данный момент выполняет операцию), наше устройство будет ждать освобождения шины, после чего начнет выполнять запрошенную операцию. Если другой мастер в этот момент захочет выполнить новую операцию, он будет ждать, когда завершится наша. Таким образом, несколько мастер-устройств вполне могут совместно использовать одну и ту же шину. И только в случае, если один из мастеров занял шину и не освобождает длительное время (например читает одной операцией большой объем данных или вообще завис), другой мастер получить доступ к шине не сможет. В этом случае ioctl вернет ошибку (timeout). Вот как-то так... Кстати, удерживать шину в занятом состоянии может и slave-устройство... Цитата(Метценгерштейн @ Feb 16 2016, 14:30)  Вопрос в том, что если шина i2cdetect -y 0 UU на ней, то ioctl запись ругается- пишет, но читает опять старые значения Не понял... ioctl при попытке записи возвращает -1? Что при этом в errno?
--------------------
Всего наилучшего, Alex Mogilnikov
|
|
|
|
|
Feb 17 2016, 08:26
|
Знающий
   
Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050

|
Цитата(alx2 @ Feb 17 2016, 08:44)  Что-то я не понял Вашу мысль... Если не загружено ни одного драйвера, использующего нашу шину, каким образом пользовательская программа сможет обратиться к устройству на этой шине??? а в чем проблема? при наличие прав доступа к шине можно из программы обратиться к любому свободному допустимому адресу на шине i2c - ioctl и вперед, делал так неоднократно.. если вы имеете в виду отсутствие драйвера самой шины (выключена поддержка в хостовом проце), то опять же при наличие прав можно на обычных gpio изобразить диаграмму i2c и работать со слейвом в режиме программного i2c.. или задействовать стандартный i2c-gpio в kernel
|
|
|
|
|
Feb 18 2016, 05:40
|

Местный
  
Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091

|
Цитата(Jury093 @ Feb 17 2016, 14:26)  а в чем проблема? при наличие прав доступа к шине можно из программы обратиться к любому свободному допустимому адресу на шине i2c - ioctl и вперед, делал так неоднократно.. А кто (какой код) в ядре будет обрабатывать этот ioctl запрос, если ни одного драйвера i2c не загружено? Цитата(Jury093 @ Feb 17 2016, 14:26)  если вы имеете в виду отсутствие драйвера самой шины (выключена поддержка в хостовом проце), то опять же при наличие прав можно на обычных gpio изобразить диаграмму i2c и работать со слейвом в режиме программного i2c.. или задействовать стандартный i2c-gpio в kernel Да, я говорил о драйвере шины. Метценгерштейн упоминал, что там на шине есть звуковая карта. Я что-то сомневаюсь, что обмен со звуковой картой происходит через программный i2c.  Наверняка там аппаратный контроллер... Метценгерштейн, думаю, пора уточнить, как у Вас подключена шина к контроллеру (есть ли аппаратный i2c), какие драйвера используются, что Вы запрашиваете через ioctl и какую ошибку ioctl возвращает. Без конкретики мы тут можем только гадать, и вряд ли чем-то сможем Вам помочь...
--------------------
Всего наилучшего, Alex Mogilnikov
|
|
|
|
|
Feb 18 2016, 08:44
|
Знающий
   
Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050

|
Цитата(alx2 @ Feb 18 2016, 08:40)  А кто (какой код) в ядре будет обрабатывать этот ioctl запрос, если ни одного драйвера i2c не загружено? драйвера i2c чего? если нет драйвера шины, то запрос вернет ошибку открытия шины если загружен драйвер устройства, то шина будет доступна, но при попытке обращения к занятому адресу вернется код ошибки если драйвера устройства нет, но есть реальный чип, то транзакция по адресу чипа будет успешна если драйвера устройства нет и чипа нет, то вернется код ошибки всё, вроде больше вариантов нет.. Цитата Метценгерштейн, думаю, пора уточнить, как у Вас подключена шина к контроллеру (есть ли аппаратный i2c), какие драйвера используются, что Вы запрашиваете через ioctl и какую ошибку ioctl возвращает. Без конкретики мы тут можем только гадать, и вряд ли чем-то сможем Вам помочь... вот что писал ТС в начальном сообщение: Цитата И может ли данная ф-я что-то писать в шину, если на шине есть звуковая карта на этом месте? Просто программа, которая запускается и пишет туда через ioctl, возвращает ошибку, т.к. шина занята. А если изначально все модули звуковух убрать, то шина i2c свободна и можно через программу по ioctl писать что-то. у ТС не указана архитектура, но обычно во встройке применяют аудиокодеки, а термин "звуковуха" ближе к х86 архитектуре я плотно в х86 не лазил, но обычно звуковые карточки для х86 управляются через интерфейс i2s, который не имеет отношения к i2c и что там у автора происходит и куда и как он обращается, мне даже гадать лень..
|
|
|
|
Сообщений в этой теме
Метценгерштейн ioctl Feb 15 2016, 10:15   Tarbal Цитата(alx2 @ Feb 17 2016, 08:44) Что-то ... Feb 17 2016, 12:58 Метценгерштейн т.е. если загружен драйвер, использующий эту шину,... Feb 16 2016, 06:49 Jury093 Цитата(Метценгерштейн @ Feb 15 2016, 13:1... Feb 16 2016, 08:21 Метценгерштейн да гуглил уже. Даже пример накатал. Вопрос в том, ... Feb 16 2016, 08:30 Jury093 Цитата(Метценгерштейн @ Feb 16 2016, 11:3... Feb 16 2016, 10:29 Tarbal Цитата(Метценгерштейн @ Feb 16 2016, 12:3... Feb 16 2016, 14:49
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|