Перейти к содержанию
    

Freescale iMX6, Linux Device Tree

Требуется переназначить выводы 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

 

P.S.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

gpio0 = "/soc/aips-bus@02000000/gpio@0209c000";

 

Ктоб знал, что это вообще означает?? Больше на какие-то адреса похоже...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ктоб знал, что это вообще означает?? Больше на какие-то адреса похоже...

Ну ясно что это GPIO контроллер, их там 7.

Но вывод может работать не только в режиме GPIO.

Где же переключать эти роли (мультиплексирование)? Я даже отдаленно не смог понять.

Может это вообще не в Device Tree файлах настраивается, хотя читал что вроде там, да и где еще по логике это может быть?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Где же переключать эти роли (мультиплексирование)? Я даже отдаленно не смог понять.

 

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

Смотрите, в сторону IO_MUX...

Изменено пользователем mantech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ммм да, в 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

не, увы Jury093 не сможет подсказать - сам не знаю, да и не требовались пины в чистом gpio mode

в старых ядрах все было сильно проще - в файле борды прописывались пины в нужном режиме, потом одним чихом настраивались в нужную позу

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

а вам именно gpio mode? и рулить через юзерспейс из софта?

иначе можно слегка упростить задачу:

для вывода использовать класс gpio-led

для ввода класс gpio-button (тут еще бонусом будет антидребезг)

примеры можно посмотреть в соседних dts

 

еще как вариант (не факт что сработает, в разных архитектурах по разному) - посчитать номер gpio. пример расчета есть во второй ссылке. потом примитивное

echo NNN > /sys/class/gpio/export

если пин читается или работает на вывод (после out > direction), то формально можно в dts и не писать и достаточно оформить настройки в загрузочном скрипте

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а вам именно gpio mode? и рулить через юзерспейс из софта?

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

Этот эксперимент очень важен, потому что и без того разобраться крайне затруднительно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Этот эксперимент очень важен, потому что и без того разобраться крайне затруднительно.

если контакты не задействованны в драйверах или системой, то сначала посчитайте номер и попробуйте через echo-export поконтролировать

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

убедились, что физика пинов жива - прикрутите к CSI..

 

для gpio-keys или gpio-leds надо:

прописать секции в dts

разрешить эти драйвера через менюконфиг в ядре

пересобрать ядро

сложить свежесгенеренный dts + ядро + модули и перезагрузить систему (полезно под рукой иметь рабочий бекап бинарников)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Касательно настройки 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 и тп., опять же вся инфа в мануале на чип

И вообще, вся вышенаписанная мудрость находится тут, как использовать - грепается в ядре

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если вам надо просто пины на выход настроить и попробовать, то почему бы не воспользоваться встроенной в ядро функциональностью? Посмотрите в документации ядра подробности:

https://www.kernel.org/doc/Documentation/gpio/sysfs.txt

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Возьмите ядро посвежее?

Как пример.. из 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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...