реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Freescale iMX6, Linux Device Tree, настройка pin muxing в DTS/DTB файлах
AVR
сообщение Mar 20 2016, 18:51
Сообщение #1


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Требуется переназначить выводы P4 и P1 процессора i.MX6 Solo в качестве обычных GPIO.
Прилагаю текстовую форму файла imx6dl-wandboard.dtb (по сути dts).

Пока не могу найти логическую связь документации (файл IMX6SDLRM.pdf) и DTB/DTS файла.
Мне вообще не понятно где в этих device tree файлах есть обозначение той или иной роли для вывода например P4? А в документации где эта связь? Там вообще нет P4 и связи с какими адресами регистров.

Прошу помочь тех кому приходилось задавать настройки мультиплексирования выводов для ОС Linux, причем не только для процессоров Freescale iMX 6...

Прикрепленный файл  imx6dl_wandboard.txt ( 55.53 килобайт ) Кол-во скачиваний: 227


P.S.
Модератору: я уверен, это скорее тема для ARM, чем для подфорума по операционным системам - там врядли кто подскажет...


--------------------
Go to the top of the page
 
+Quote Post
mantech
сообщение Mar 20 2016, 19:43
Сообщение #2


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(AVR @ Mar 20 2016, 21:51) *
gpio0 = "/soc/aips-bus@02000000/gpio@0209c000";


Ктоб знал, что это вообще означает?? Больше на какие-то адреса похоже...
Go to the top of the page
 
+Quote Post
AVR
сообщение Mar 20 2016, 19:46
Сообщение #3


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Цитата(mantech @ Mar 20 2016, 22:43) *
Ктоб знал, что это вообще означает?? Больше на какие-то адреса похоже...

Ну ясно что это GPIO контроллер, их там 7.
Но вывод может работать не только в режиме GPIO.
Где же переключать эти роли (мультиплексирование)? Я даже отдаленно не смог понять.
Может это вообще не в Device Tree файлах настраивается, хотя читал что вроде там, да и где еще по логике это может быть?


--------------------
Go to the top of the page
 
+Quote Post
mantech
сообщение Mar 21 2016, 08:30
Сообщение #4


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(AVR @ Mar 20 2016, 22:46) *
Где же переключать эти роли (мультиплексирование)? Я даже отдаленно не смог понять.


Ммм да, в platform sdk все куда понятнее, тут наверно только Jury093 подсказать может...
Смотрите, в сторону IO_MUX...

Сообщение отредактировал mantech - Mar 21 2016, 08:31
Go to the top of the page
 
+Quote Post
Jury093
сообщение Mar 21 2016, 08:59
Сообщение #5


Знающий
****

Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050



Цитата(mantech @ Mar 21 2016, 11:30) *
Ммм да, в platform sdk все куда понятнее, тут наверно только Jury093 подсказать может...
Смотрите, в сторону IO_MUX...

не, увы Jury093 не сможет подсказать - сам не знаю, да и не требовались пины в чистом gpio mode
в старых ядрах все было сильно проще - в файле борды прописывались пины в нужном режиме, потом одним чихом настраивались в нужную позу
как это сделать в dts надо искать в инете, например по строке "imx6 dts gpio input"
https://community.freescale.com/thread/317876
http://www.kosagi.com/w/index.php?title=De...tive_GPIO_guide
Go to the top of the page
 
+Quote Post
AVR
сообщение Mar 21 2016, 19:35
Сообщение #6


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Цитата(Jury093 @ Mar 21 2016, 11:59) *
не, увы Jury093 не сможет подсказать - сам не знаю, да и не требовались пины в чистом gpio mode
в старых ядрах все было сильно проще - в файле борды прописывались пины в нужном режиме, потом одним чихом настраивались в нужную позу

Спасибо за ссылки, раз местные гуру таким не занимались через DTB файлы (а у меня выхода нет - судя по всему во всех современных ядрах будет лишь DTB - что кстати правильно) - то наверное надо попытать счастья на официальных форумах производителя.


--------------------
Go to the top of the page
 
+Quote Post
Jury093
сообщение Mar 21 2016, 20:01
Сообщение #7


Знающий
****

Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050



Цитата(AVR @ Mar 21 2016, 22:35) *
Спасибо за ссылки, раз местные гуру таким не занимались через DTB файлы (а у меня выхода нет - судя по всему во всех современных ядрах будет лишь DTB - что кстати правильно) - то наверное надо попытать счастья на официальных форумах производителя.

а вам именно gpio mode? и рулить через юзерспейс из софта?
иначе можно слегка упростить задачу:
для вывода использовать класс gpio-led
для ввода класс gpio-button (тут еще бонусом будет антидребезг)
примеры можно посмотреть в соседних dts

еще как вариант (не факт что сработает, в разных архитектурах по разному) - посчитать номер gpio. пример расчета есть во второй ссылке. потом примитивное
Код
echo NNN > /sys/class/gpio/export

если пин читается или работает на вывод (после out > direction), то формально можно в dts и не писать и достаточно оформить настройки в загрузочном скрипте
Go to the top of the page
 
+Quote Post
AVR
сообщение Mar 21 2016, 20:08
Сообщение #8


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Цитата(Jury093 @ Mar 21 2016, 23:01) *
а вам именно gpio mode? и рулить через юзерспейс из софта?

Требуется провести эксперимент - поработать с этими двумя выводами в режиме GPIO и убедиться что они рабочие вообще, затем перевести в режим IPU_CSI0 (для захвата видео). На моей плате они вообще по дефолту болтаются, поэтому проще начать с GPIO.
Этот эксперимент очень важен, потому что и без того разобраться крайне затруднительно.


--------------------
Go to the top of the page
 
+Quote Post
Jury093
сообщение Mar 21 2016, 21:23
Сообщение #9


Знающий
****

Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050



Цитата(AVR @ Mar 21 2016, 23:08) *
Требуется провести эксперимент - поработать с этими двумя выводами в режиме GPIO и убедиться что они рабочие вообще, затем перевести в режим IPU_CSI0 (для захвата видео). На моей плате они вообще по дефолту болтаются, поэтому проще начать с GPIO.
Этот эксперимент очень важен, потому что и без того разобраться крайне затруднительно.

если контакты не задействованны в драйверах или системой, то сначала посчитайте номер и попробуйте через echo-export поконтролировать
в случае неудачи проще всего задействовать как gpio-keys или gpio-leds - самый быстрый вариант проверки (там драйвера сами все настроивают, ваша задача - указать контакт)
убедились, что физика пинов жива - прикрутите к CSI..

для gpio-keys или gpio-leds надо:
прописать секции в dts
разрешить эти драйвера через менюконфиг в ядре
пересобрать ядро
сложить свежесгенеренный dts + ядро + модули и перезагрузить систему (полезно под рукой иметь рабочий бекап бинарников)
Go to the top of the page
 
+Quote Post
MacArrow
сообщение Mar 21 2016, 22:08
Сообщение #10





Группа: Участник
Сообщений: 8
Регистрация: 21-05-12
Пользователь №: 71 941



Касательно настройки pinmux, вот в этом файлике, который можно найти и в вашем ядре, объявлены макросы для всех типовых функций пинов.
Формат там простой <mux_reg conf_reg input_reg mux_mode input_val>, то есть это первый источник информации, ищете указанный mux reg в manual, смотрите на значения, понимаете что оно делает. Но на самом деле имя каждого макроса уже содержит всю информацию.
Теперь, как найти нужный пин, так как в вышеуказанном файлике номера пинов не используются, надо найти каноническое имя пина в мануале и по этому имени и требуемой функции выбрать уже нужный макрос.
Например, возьмем MX6SL_PAD_AUD_MCLK__AUDIO_CLK_OUT. Этот макрос переводит пин AUD_MCLK в режим AUDIO_CLK_OUT
Далее, этот макрос используется в описании iomux, например вот в этом файле есть такая секция в iomux:
pinctrl_audmux: audmuxgrp {
100 fsl,pins = <
101 MX6QDL_PAD_CSI0_DAT7__AUD3_RXD 0x130b0
102 MX6QDL_PAD_CSI0_DAT4__AUD3_TXC 0x130b0
103 MX6QDL_PAD_CSI0_DAT5__AUD3_TXD 0x110b0
104 MX6QDL_PAD_CSI0_DAT6__AUD3_TXFS 0x130b0
105 >;
106 };
Очевидно, что оно включает I2S на пинах CSI0_DAT7 и тд. Что же касается цифр после макроса (0x130b0), это режим пина - гистерезис, pullup/pulldown и тп., опять же вся инфа в мануале на чип
И вообще, вся вышенаписанная мудрость находится тут, как использовать - грепается в ядре
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Mar 22 2016, 13:15
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Если вам надо просто пины на выход настроить и попробовать, то почему бы не воспользоваться встроенной в ядро функциональностью? Посмотрите в документации ядра подробности:
https://www.kernel.org/doc/Documentation/gpio/sysfs.txt
Go to the top of the page
 
+Quote Post
Fedor
сообщение Mar 24 2017, 19:45
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 73
Регистрация: 26-10-05
Пользователь №: 10 125



Возьмите ядро посвежее?
Как пример.. из dts/imx6qdl-tx6.dtsi смотрел в 4.8
Код
gpio-keys {
                compatible = "gpio-keys";

                power {
                        label = "Power Button";
                        gpios = <&gpio5 2 GPIO_ACTIVE_HIGH>;
                        linux,code = <KEY_POWER>;
                        wakeup-source;
                };
        };

        leds {
                compatible = "gpio-leds";

                user_led: user {
                        label = "Heartbeat";
                        pinctrl-names = "default";
                        pinctrl-0 = <&pinctrl_user_led>;
                        gpios = <&gpio2 20 GPIO_ACTIVE_HIGH>;
                        linux,default-trigger = "heartbeat";
                };
        };

Далее ищем в файле ссылки GPIO5, GPIO2..
Код
pinctrl_user_led: user-ledgrp {
                fsl,pins = <
                        MX6QDL_PAD_EIM_A18__GPIO2_IO20          0x1b0b1 /* LED */
                >;
        };
...
pinctrl_hog: hoggrp {
                fsl,pins = <
                        MX6QDL_PAD_SD3_DAT2__GPIO7_IO06         0x1b0b1 /* ETN PHY RESET */
                        MX6QDL_PAD_SD3_DAT4__GPIO7_IO01         0x1b0b1 /* ETN PHY INT */
                        MX6QDL_PAD_EIM_A25__GPIO5_IO02          0x1b0b1 /* PWR BTN */
                >;
        };

и далее шерстим ./Documentation/devicetree/bindings
Все логично.
Ссылки compatible автоматом приходят в /sys/class/gpio /sys/class/leds.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 17th August 2025 - 00:51
Рейтинг@Mail.ru


Страница сгенерированна за 0.01472 секунд с 7
ELECTRONIX ©2004-2016