Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Freescale iMX6, Linux Device Tree
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
AVR
Требуется переназначить выводы P4 и P1 процессора i.MX6 Solo в качестве обычных GPIO.
Прилагаю текстовую форму файла imx6dl-wandboard.dtb (по сути dts).

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

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

Нажмите для просмотра прикрепленного файла

P.S.
Модератору: я уверен, это скорее тема для ARM, чем для подфорума по операционным системам - там врядли кто подскажет...
mantech
Цитата(AVR @ Mar 20 2016, 21:51) *
gpio0 = "/soc/aips-bus@02000000/gpio@0209c000";


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

Ну ясно что это GPIO контроллер, их там 7.
Но вывод может работать не только в режиме GPIO.
Где же переключать эти роли (мультиплексирование)? Я даже отдаленно не смог понять.
Может это вообще не в Device Tree файлах настраивается, хотя читал что вроде там, да и где еще по логике это может быть?
mantech
Цитата(AVR @ Mar 20 2016, 22:46) *
Где же переключать эти роли (мультиплексирование)? Я даже отдаленно не смог понять.


Ммм да, в platform sdk все куда понятнее, тут наверно только Jury093 подсказать может...
Смотрите, в сторону IO_MUX...
Jury093
Цитата(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
AVR
Цитата(Jury093 @ Mar 21 2016, 11:59) *
не, увы Jury093 не сможет подсказать - сам не знаю, да и не требовались пины в чистом gpio mode
в старых ядрах все было сильно проще - в файле борды прописывались пины в нужном режиме, потом одним чихом настраивались в нужную позу

Спасибо за ссылки, раз местные гуру таким не занимались через DTB файлы (а у меня выхода нет - судя по всему во всех современных ядрах будет лишь DTB - что кстати правильно) - то наверное надо попытать счастья на официальных форумах производителя.
Jury093
Цитата(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 и не писать и достаточно оформить настройки в загрузочном скрипте
AVR
Цитата(Jury093 @ Mar 21 2016, 23:01) *
а вам именно gpio mode? и рулить через юзерспейс из софта?

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

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

для gpio-keys или gpio-leds надо:
прописать секции в dts
разрешить эти драйвера через менюконфиг в ядре
пересобрать ядро
сложить свежесгенеренный dts + ядро + модули и перезагрузить систему (полезно под рукой иметь рабочий бекап бинарников)
MacArrow
Касательно настройки 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 и тп., опять же вся инфа в мануале на чип
И вообще, вся вышенаписанная мудрость находится тут, как использовать - грепается в ядре
Tarbal
Если вам надо просто пины на выход настроить и попробовать, то почему бы не воспользоваться встроенной в ядро функциональностью? Посмотрите в документации ядра подробности:
https://www.kernel.org/doc/Documentation/gpio/sysfs.txt
Fedor
Возьмите ядро посвежее?
Как пример.. из 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.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.