ЗАО «ЗЭО»
Техническая поддержка пользователей => Тион-Про28, Орион28 => Тема начата: Сергей 16 RUS от 21 Ноября, 2012, 18:58:03
-
Доброго времени суток.
Изучаем Тион-Про28. Пробую работать с GPIO через Ваш драйвер.
Навскидку прибежавшись по портам (DeviceIoControl) от 0 до 128 удалось задействовать только 6 портов и только на Х22.
Остальные порты остаются неизменны. Это недоработка драйвера или же все таки есть какие то ньюансы при работе с данной платой.
-
Порт может быть занят под какую-то другую функцию. Приведите пример порта, который не получается использовать
-
(http://www.tehsmart.ru/2.jpg)
Пожалуйста, черными точками отмечены порты которые отреагировали на запрос, и по какому номеру порта порт откликнулся.
Все остальные молчат.
-
Проверил порты 50 и 52 (вывод 7 и 9) с помощью примера работы с GPIO, который выложен у нас на сайте (http://www.zao-zeo.ru/dokuwiki/doku.php/wince-dev). При установке "Направление->Выход" и "Альт.Функция->GPIO" напряжение на ножке разъема меняется в зависимости от состояния порта.
-
Может кто нибудь кинет где можно почитать инфу по работе с GPIO именно imx28 под Linux, или пример инициализации и обращения к ним???
-
Почитать про работу с GPIO можно в документации Linux - Documentation/gpio.txt.
А также в документе "i.MX28_Linux_BSP_RM.pdf" раздел "3.4 Pin Multiplexing".
-
В общем с GPIO под Linux так и не разобрался. Так и не понял какие библиотеки подключать и какие функции использовать. Всё в общих чертах в доке. Может у кого нить есть простенький пример работы с GPIO на ввод\вывод???
-
Постараюсь добавить информацию по работе с GPIO в близжайшее время.
-
Для работы с GPIO можно использовать следующий способ:
Например, для GPIO4_20:
echo 148 > /sys/class/gpio/export
далее задаем направление порта:
echo out > /sys/class/gpio/gpio148/direction
и устанавливаем выходное значение:
echo 1 > /sys/class/gpio/gpio148/value
Для использования этого способа необходимо обновить образ Linux на последний.
-
Да ))) Теперь есть поддержка работы с GPIO через файлы. Сразу следующий вопрос -> "Как определить номер GPIO для экспорта, зная номер порта и номер пина???".
-
а всё разобрался.
просто от 0 и в банке по 32 пина (0 банк считается)
к примеру
-------------
1 банк
32+номер пина
-------------
4 банк
128 + номер пина
--------------
как у вас в примере 4 банк =128 + 20 пин = 148
-
Да, все верно. Номер банка умножаем на 32 и прибавляем номер пина в банке.
-
Возможно мой вопрос не очень компетентный, только начинаю работать с embedded устройствами. А как переключить режим Pin Multiplexing в Linux? Скажем для Beagleboard платы можно сделать с помощью манипулировавшем файлов в /sys/kernel/debug (http://youtu.be/SaIpz00lE84?t=7m26s), а как это можно сделать в Tion?
-
Можно установить режим работы вывода в GPIO. Это можно сделать разными способами, подробно описано в документации Linux: Documenentation\gpio.txt.
Включить другой режим, не GPIO, простым способом вряд ли получится, т.к. помимо включения альтернативной функции, необходима еще поддержка драйвера той функции, которую включаете.
Я вижу такие варианты:
1. Включить нужную функцию вывода в исходниках ОС и пересобрать образ.
2. Написать драйвер, и в нем установить нужную функцию.
3. Обращаться к регистрам процессора с помощью ioremap.
Возможно есть и другие способы.
-
А как получить доступ к GPIO, допустим на разъеме X19?
В "Назначении контактов" у данных пинов - четвертый банк, т.е. номер gpio должен быть 128 + X.
Но в тестовом примере есть код:
if ((uGPIO>128)||(uGPIO<0)){
MessageBox(L"Неверно указан номер порта",L"Ошибка",MB_OK);
return;
}
Соответственно при попытке доступа будет выкидыться ошибка.
Или такое ограничение только в GPIO_test заложено?
UPD: набросал пробную программу, да, действительно, в драйвер можно передавать значения > 128, вопрос снят.