Официальный форум СВД Встраиваемые Системы
10 Декабря, 2016, 15:41:34 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
 
 
 Сайт СВД ВС  Начало   Помощь Поиск Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Возможность драйвера i2c во встаиваемой системы обслуживать несколько шин  (Прочитано 1034 раз)
Camarada
Пользователь

Сообщений: 22


« : 06 Октября, 2010, 10:11:40 »

Здравствуйте. Задача следующая, есть BSP для платы Xilinx, который переделан под нашу плату.
Есть исходные коды драйвера i2c, поставляемые вместе с BSP. Но, изучая qnx technotes и драйвер, я обнаружил, что драйвер состоит из двух частей, собственно железной и resource manager layer (у меня естественно исходники низкого уровня).
Так вот, для начала, в исходниках железа я исправил возможность инициализации i2c драйвера для разных шин (итого получим 8 процессов для каждой линии i2c), проблема в том, что resource manager layer, реализованный в виде библиотеки, исходников которого у меня нет, всегда привязывает i2c к /dev/i2c0, таким образом, чтобы работать с каждым их интерфейсов мне нужно по очереди запускать/убивать процессы с разными параметрами. Что, очень плохо.
Скажите, возможно есть недокументированная возможность задать resmgr-у путь, за который он отвечает. Либо есть возможность получить его исходники (Моя организация является официальным покупателем QNX у "SWD встраиваемые решения"). (Видно, что библиотека задает /dev/i2c0 не жестко. В бинарнике можно увидеть строковую константу типа "/dev/i2c%d"), таким образом делаем вывод, что теоретически есть поддержка многих интефейсов на уровне имени устройства.

Спасибо за ответы.
Записан
Андрей Докучаев
Сотрудник СВД ВС
Ветеран

Сообщений: 652



WWW
« Ответ #1 : 06 Октября, 2010, 10:43:32 »

У менеджеров ресурсов i2c в 6.4.1 есть стандартные опции. Обратите внимание на опцию --u:

Код:
Generic options:
--b bus_speed       Default bus speed. (Default: 100000)
--m max_msg_len     Minimum length of resmgr receive buffer.
                    (Default: 128 bytes)
--n nparts          Minimum number of iov_t's in resmgr context.
                    (Default: 2)
--u unit            Unit number. Number to append to device name
                    prefix (/dev/i2c). (Default: 0)

Так вот, для начала, в исходниках железа я исправил возможность инициализации i2c драйвера для разных шин (итого получим 8 процессов для каждой линии i2c), проблема в том, что resource manager layer, реализованный в виде библиотеки, исходников которого у меня нет, всегда привязывает i2c к /dev/i2c0, таким образом, чтобы работать с каждым их интерфейсов мне нужно по очереди запускать/убивать процессы с разными параметрами.

Обычно, если имеется несколько TWSI/I2C шин в параметрах менеджера уже присутствует опция для выбора.
« Последнее редактирование: 06 Октября, 2010, 10:48:21 от Андрей Докучаев » Записан

Camarada
Пользователь

Сообщений: 22


« Ответ #2 : 06 Октября, 2010, 11:21:48 »

У менеджеров ресурсов i2c в 6.4.1 есть стандартные опции. Обратите внимание на опцию --u:

Код:
Generic options:
--b bus_speed       Default bus speed. (Default: 100000)
--m max_msg_len     Minimum length of resmgr receive buffer.
                    (Default: 128 bytes)
--n nparts          Minimum number of iov_t's in resmgr context.
                    (Default: 2)
--u unit            Unit number. Number to append to device name
                    prefix (/dev/i2c). (Default: 0)

Обычно, если имеется несколько TWSI/I2C шин в параметрах менеджера уже присутствует опция для выбора.

Спасибо большое, опция --u помогла.
Записан
Владимир Махилёв
Сотрудник СВД ВС
Ветеран

Сообщений: 659



WWW
« Ответ #3 : 06 Октября, 2010, 11:35:48 »

В данном случае выходом будет запуск отдельного менеджера i2c для каждой шины. Как уже сказал Андрей, для смены имени устройства нужно просто задавать параметр --u, а для работы с разными шинами можно использовать другие параметры, обрабатываемые уже прослойкой нижнего уровня, например, базовый адрес, номер прерывания (если есть) и т.п.
Записан

Camarada
Пользователь

Сообщений: 22


« Ответ #4 : 06 Октября, 2010, 14:04:24 »

В данном случае выходом будет запуск отдельного менеджера i2c для каждой шины. Как уже сказал Андрей, для смены имени устройства нужно просто задавать параметр --u, а для работы с разными шинами можно использовать другие параметры, обрабатываемые уже прослойкой нижнего уровня, например, базовый адрес, номер прерывания (если есть) и т.п.


Спасибо и вам. Проблема разрешилась с помощью --u, а в драйвере я добавил возможность инициализации разных шин.
Записан
Александр Варварик
Администратор
Старожил

Сообщений: 1354



WWW
« Ответ #5 : 07 Октября, 2010, 08:59:52 »

(Моя организация является официальным покупателем QNX у "SWD встраиваемые решения")


Camarada, наверное, вы официально покупали QNX у компании "СВД Встраиваемые Системы"  Cool

Главное вам помогли решить проблему.
Записан

Camarada
Пользователь

Сообщений: 22


« Ответ #6 : 07 Октября, 2010, 10:44:24 »

(Моя организация является официальным покупателем QNX у "SWD встраиваемые решения")


Camarada, наверное, вы официально покупали QNX у компании "СВД Встраиваемые Системы"  Cool

Главное вам помогли решить проблему.


Конечно Smiley, пока не запомнил)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP © 2002-2016 СВД Встраиваемые Системы.
При использовании материалов сайта ссылка на forum.kpda.ru обязательна.

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines | © Aiwan. Kolobok smiles | Sitemap
Valid XHTML 1.0! Valid CSS!
Сайт СВД ВС

В последний раз google посещал эту страницу 02 Декабря, 2016, 08:17:03