Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru
Партнеры:
otladka.com.ua - г.Киев

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:1
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:5
Форум » starterkit.ru » Embedded Linux
Влияние SPI на работу GPIO
sasamy
Добавлено 08.11.2017 13:12 Редактировалось 08.11.2017 13:37 Сообщение: 11
sasamy
4.70

Пункты: 76882
Регистрация: 14.08.2009
Проверил на SK-iMX6S-SODIMM - это почти аналог OEM с таким же процессором SOLO. Чуда не произошло, все работает штатно - SPI никак не влияет на GPIO. Кстати, чтобы мой пример работал правильно на SOLO надо исправлять так

#define CONFIG_MX6DL
#undef CONFIG_MX6Q

Проверял светодиодом с резистором 2 кОм - там сразу видно что пин включен как выход и 1, иначе он не горит - внутренней подтяжки у пина светодиоду недостаточно когда пин вход.

Что у вас не так не могу сказать - не экстрасенс :) возможно с питанием что-то.

Попробуйте еще вместо коментариев в DTS удалить ненужные секции - может там что-то некорректно срабатывает.
Спуститься к концу Подняться к началу
Персональная информация
Alexey70
Добавлено 08.11.2017 14:28 Сообщение: 12
Alexey70
0

Пункты: 474
Регистрация: 07.11.2017
Цитата

#define CONFIG_MX6DL
#undef CONFIG_MX6Q


Собрал как указано. Результат не изменился.

Цитата

Что у вас не так не могу сказать - не экстрасенс :) возможно с питанием что-то.

Попробуйте еще вместо коментариев в DTS удалить ненужные секции - может там что-то некорректно срабатывает.


Понимаю, что ситуация нестандартная. У меня она повторяется и на своих платах, там ее и увидели. Там мы используем-buildroot-2014.08. Спасибо за оказанную поддержку, направления поиска вроде бы ясны.
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 08.11.2017 18:12 Сообщение: 13
Jury093
4.5

Пункты: 54233
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
Цитата
Такое ощущение, что в момент перевода состояния выхода с 0 в 1 контроллер ощущает нагрузку, система запоминает это состояние и в дальнейшем его использует.

вы зря приписываете imx свойства ИИ - их там нет..
наиболее вероятная причина - косяки в вашем софте.
чтобы получить внятную помощь требуется выложить максимально короткий исходник для одного пина и кратко описать суть происходящего, а то из ваших пяти опытов не поймешь "кто кому чего должен"
могу предположить, что либо маску не так накладываете, либо выходите криво..
как ранее справедливо написали, работать через mmap очень плохая идея - ядро знать не знает о вашей самодеятельности и имеет полное право рулить регистрами на свое усмотрение
вывод - любым доступным методом - через dts, либо через echo > export объяснить ядру, что пин занят и тогда у вас не будет конфликтов, мистики и барабашек..

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
Alexey70
Добавлено 09.11.2017 07:12 Редактировалось 09.11.2017 07:17 Сообщение: 14
Alexey70
0

Пункты: 474
Регистрация: 07.11.2017
Цитата

как ранее справедливо написали, работать через mmap очень плохая идея - ядро знать не знает о вашей самодеятельности и имеет полное право рулить регистрами на свое усмотрение
вывод - любым доступным методом - через dts, либо через echo > export объяснить ядру, что пин занят и тогда у вас не будет конфликтов, мистики и барабашек..


Полностью с Вами согласен. Пять примеров как раз и должны были показать, что система рулит этими регистрами по-своему. Возможно они лишние здесь, я не хотел никого ими запутать. При использовании sysfs этого не происходит. Для меня непонятен этот эффект,я хочу в этом разобраться, понять что на что влияет, ведь использование mmap, насколько помню, нигде не запрещено. Вся исходная информация, софт и суть происходящего кратко были описаны в первом посте. Обратился сюда в надежде что что-то у кого-то такое уже было. Так как ситуация больше ни у кого не повторялась, то мне и разбираться. У меня к sasamy просьба выложить dts системы на SK-iMX6S-SODIMM из эксперимента, если он остался. Спасибо!
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 09.11.2017 11:47 Редактировалось 09.11.2017 13:00 Сообщение: 15
sasamy
4.70

Пункты: 76882
Регистрация: 14.08.2009
Цитата

У меня к sasamy просьба выложить dts системы на SK-iMX6S-SODIMM из эксперимента, если он остался.


вот он

https://yadi.sk/d/PoJ87FX13MuMCY

Но поймите, если с ваших слов

Цитата

При использовании sysfs этого не происходит.


то ошибка может быть только в вашем коде - никакой разницы нет из пространства ядра или пользователя изменять регистры - регистры те же самые.
Спуститься к концу Подняться к началу
Персональная информация
Alexey70
Добавлено 09.11.2017 12:37 Сообщение: 16
Alexey70
0

Пункты: 474
Регистрация: 07.11.2017
Спасибо! Это точно тот файл, с которым пробовали? Разве ниже gpio в описании ipu1 выход 5.19 не переопределяется на MX6QDL_PAD_CSI0_MCLK__IPU1_CSI0_HSYNC 0x80000000 ? Понимаю, что в Вашем примере IOMUX затем выставляется правильно и со стороны контроллера все работает, а вот система то этот выход как воспринимает? Или ошибаюсь?
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 09.11.2017 13:10 Сообщение: 17
sasamy
4.70

Пункты: 76882
Регистрация: 14.08.2009
Цитата

Это точно тот файл, с которым пробовали?


точнее не бывает - прямо из собранных исходников ядра

Цитата

Разве ниже gpio в описании ipu1 выход 5.19 не переопределяется на MX6QDL_PAD_CSI0_MCLK__IPU1_CSI0_HSYNC 0x80000000 ?


нет - смотрите внимательно, эти пины никем в DTS не используются, просто описаны в секции pinctrl_ipu1_csi_sodimm. Пины которые переключатся даже если никем не используются описаны в специальной секции hog
Спуститься к концу Подняться к началу
Персональная информация
Alexey70
Добавлено 09.11.2017 13:16 Сообщение: 18
Alexey70
0

Пункты: 474
Регистрация: 07.11.2017
Цитата
[нет - смотрите внимательно, эти пины никем в DTS не используются, просто описаны в секции pinctrl_ipu1_csi_sodimm. Пины которые переключатся даже если никем не используются описаны в специальной секции hog

Действительно, просмотрел, извиняюсь.
Спуститься к концу Подняться к началу
Персональная информация
Alexey70
Добавлено 09.11.2017 20:45 Редактировалось 09.11.2017 20:50 Сообщение: 19
Alexey70
0

Пункты: 474
Регистрация: 07.11.2017
Цитата

Но поймите, если с ваших слов

Цитата

При использовании sysfs этого не происходит.


то ошибка может быть только в вашем коде - никакой разницы нет из пространства ядра или пользователя изменять регистры - регистры те же самые.


Я понимаю, что ошибка где-то у меня, не в контроллере, не в системе. Но если говорить о коде программы, которой выставляются выходы, то я ведь использую для этого в том числе и Вашу программу, которая априори у Вас работает. Да и моей программой состояние регистра меняется, состояние выхода тоже меняется. В том то и проблема, что регистры программой меняются, выход выставляется, но при определенных действиях с системой самой системой они сбрасываются.
В документации на GPIO imx все просто, описаны два пункта по три действия для входов и выходов. Там нет ничего особенного и обе программы и Ваша и моя эти действия выполняют. В вашей программе дополнительно производится конфигурация IOMUX, которая уже и без того выполняется в dts. Чтение этих регистров сразу после загрузки это подтверждает. Думаю, вопрос об ошибке в этом ПО пора бы снять. Если там и есть ошибка, то только в том что что-то еще надо сделать дополнительно, чтобы система поняла, что этот выход используется. Но из userspace этого скорее всего не сделать.

Если говорить о файле dts, то я не могу понять почему в ядре нет информации о том, что эти выводы используются. Тому много подтверждений. Вывод команды cat /sys/kernel/debug/gpio дает информацию о gpio, используемые системой. Там есть пин 5.17 CS ecspi, есть другие пины, но пинов 5.19 и 5.20 нет. Может у меня на данный момент еще недостаточно информации и это ни о чем не говорит... Или вот если я через mmap определяю эти пины как выходы и потом через sysfs определяю один из них, система при этом переопределяет второй как вход(для него сбрасывается бит в регистре GDIR). SPI выход опять же у меня сбрасывает.

Но когда я смотрю на Ваш dts и свой, то разницы не вижу. Тем не менее у Вас все работает.
Вы говорите у меня в коде ошибка. Но весь мой код у Вас перед глазами. Buildroot с сайта starterkit(завтра попробую скачать заново и все с нуля повторить), изменена на свою только плата и dts, dts привел, программу для тестирования использую фактически Вашу(перекомпилировал под свой контроллер).
Ну и про sysfs, система в этом случае точно знает, что для нее конкретно этот пин значит. Скорее всего, потому и влияния нет, имхо. В исходниках на драйвер gpio imx при беглом осмотре используются те же регистры что мы используем, плюс регистры прерываний. Плюс регистрация в системе в драйвере выше.

У меня не настолько богатый опыт конфигурирования dts, видите ли Вы там ошибки? Может есть какие-то средства отладки, контроля dts. Пробовал отобразить dts в sysfs, но полезного для себя там не нашел(может не знаю где смотреть).
Насколько понимаю, в dts этого ядра можно явно сконфигурировать пин как выход и явно задать уровень, этого еще не пробовал.
Спуститься к концу Подняться к началу
Персональная информация
Alexey70
Добавлено 10.11.2017 08:51 Редактировалось 10.11.2017 09:19 Сообщение: 20
Alexey70
0

Пункты: 474
Регистрация: 07.11.2017
Цитата

Может есть какие-то средства отладки, контроля dts.


Как понимаю, информация в pinctrl debugfs полностью отображает назначение и использование пинов в системе. Не знаете, насколько этим данным можно доверять?
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Embedded Linux