|
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, 12:58
|
Профессионал
    
Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439

|
Цитата(alx2 @ Feb 17 2016, 08:44)  Что-то я не понял Вашу мысль... Если не загружено ни одного драйвера, использующего нашу шину, каким образом пользовательская программа сможет обратиться к устройству на этой шине???
Вот, например, у меня в устройстве в ядре присутствует один из драйверов из drivers/i2c/busses/. Пользовательские программы с его помощью (используя ioctl) обращаются к устройствам на шине. Если на момент обращения шина свободна, выполняется запрошенная операция. Если же на момент обращения шина занята (на шине присутствует другой мастер, который в данный момент выполняет операцию), наше устройство будет ждать освобождения шины, после чего начнет выполнять запрошенную операцию. Если другой мастер в этот момент захочет выполнить новую операцию, он будет ждать, когда завершится наша. Таким образом, несколько мастер-устройств вполне могут совместно использовать одну и ту же шину. И только в случае, если один из мастеров занял шину и не освобождает длительное время (например читает одной операцией большой объем данных или вообще завис), другой мастер получить доступ к шине не сможет. В этом случае ioctl вернет ошибку (timeout). Вот как-то так... Кстати, удерживать шину в занятом состоянии может и slave-устройство...
Не понял... ioctl при попытке записи возвращает -1? Что при этом в errno? Полагаю, что имелось ввиду, что драйвер, работающий с нашим устройством не должен быть активным (драйвер на той же i2c чине и с тем же адресом), а для ioctl нужен драйвер i2c, который в директории /sys/ видем как i2c-0 для первой шины, i2c-1 для второй.
|
|
|
|
Сообщений в этой теме
Метценгерштейн ioctl Feb 15 2016, 10:15   Jury093 Цитата(alx2 @ Feb 17 2016, 08:44) Что-то ... Feb 17 2016, 08:26    alx2 Цитата(Jury093 @ Feb 17 2016, 14:26) а в ... Feb 18 2016, 05:40     Jury093 Цитата(alx2 @ Feb 18 2016, 08:40) А кто (... Feb 18 2016, 08:44 Метценгерштейн т.е. если загружен драйвер, использующий эту шину,... 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
|
|
|