shworker 0 27 мая, 2021 Опубликовано 27 мая, 2021 (изменено) · Жалоба Делаю девайс на основе SOC MediaTek MT7628AN. ОС - OpenWrt И захотелось приделать к нему дисплей. Выбор пал на ILI9341, как имеющий интерфейс SPI и богатую поддержку (как я тогда думал). Повесил его на SPI0, на которой висит флешка (на CS1). В DT описал так: &spi0 { status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&spi_pins>, <&spi_cs1_pins>; m25p80@0 { ...... // тут описание флешки } display@0{ compatible = "ilitek,ili9341"; reg = <1>; spi-max-frequency = <16000000>; dc-gpios = <&gpio1 6 GPIO_ACTIVE_LOW>; reset-gpios = <&gpio1 4 GPIO_ACTIVE_LOW>; buswidth = <8>; rotate = <270>; fps = <25>; bgr; debug = <1>; // status = "okay"; }; }; Драйвер фреймбуфера: fb_ili9341.c Но на экране только то, что на картинке. Видно, что вместо изображения - только малелькая "строчка из пикселей" (справа внизу). Параметром rotate игрался - ничено не дало. Только та самая "строчка из пикселей" перемещается в другой угол экрана. Дополнение: другой дисплей пробовал. Результат тот же. Этот же дисплей пробовал на RaspberryPi - работает ОК. Изменено 27 мая, 2021 пользователем shworker Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tarbal 4 31 мая, 2021 Опубликовано 31 мая, 2021 · Жалоба А какой у вас видео режим? Он соответствует дисплею. Размер дисплея, формат упаковки пикселей, частота смены кадров. fbset -i что показывает? Надеюсь у вас fbset установлена. Или. Найдите такой файл: cat /sys/devices/platform/display-engine/graphics/fb0/modes В нем список определенных в ядре размеров экрана для fb0. Есть ли определение вашего размера в нем? Надо описать нужный вам режим работы дисплея. Разрешение, формат пикселя и т.д. У вас, вижу, только 25 кадров в секунду определено. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
shworker 0 31 мая, 2021 Опубликовано 31 мая, 2021 (изменено) · Жалоба fbset -i не показывает ничего. root@OpenWrt:/# cat /sys/devices/platform/display-engine/graphics/fb0/modes cat: can't open '/sys/devices/platform/display-engine/graphics/fb0/modes': No such file or directory Нашелся вот такой файл: root@OpenWrt:/# cat /sys/class/graphics/fb0/modes U:320x240p-0 Изменено 31 мая, 2021 пользователем shworker Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jury093 2 31 мая, 2021 Опубликовано 31 мая, 2021 · Жалоба 2 часа назад, shworker сказал: fbset -i не показывает ничего. Нашелся вот такой файл: root@OpenWrt:/# cat /sys/class/graphics/fb0/modes U:320x240p-0 странно, что fbset ничего не выводит, должно быть подобно: fbset -i mode "320x240" geometry 320 240 320 240 16 timings 0 0 0 0 0 0 0 rgba 5/11,6/5,5/0,0/0 endmode линк на драйвер покажите и до кучи вывод команды dmesg в файл, куда-нить на pastebin.com и линк сюда Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
shworker 0 31 мая, 2021 Опубликовано 31 мая, 2021 · Жалоба root@OpenWrt:/# uname -a Linux OpenWrt 4.14.63 #0 Thu Aug 16 07:51:15 2018 mips GNU/Linux Драйвер: https://www.dropbox.com/s/gqq9blkkcj7dcp9/fb_ili9341.c?dl=0 Dmesg: https://www.dropbox.com/s/jor3tzrufc2sa14/dmesg.txt?dl=0 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jury093 2 31 мая, 2021 Опубликовано 31 мая, 2021 · Жалоба 16 минут назад, shworker сказал: root@OpenWrt:/# uname -a Linux OpenWrt 4.14.63 #0 Thu Aug 16 07:51:15 2018 mips GNU/Linux Драйвер: https://www.dropbox.com/s/gqq9blkkcj7dcp9/fb_ili9341.c?dl=0 Dmesg: https://www.dropbox.com/s/jor3tzrufc2sa14/dmesg.txt?dl=0 видно, что драйвер загружается [ 0.957001] fb_ili9341 spi0.1: fbtft_request_one_gpio: 'reset-gpios' = GPIO36 [ 0.971206] fb_ili9341 spi0.1: fbtft_request_one_gpio: 'dc-gpios' = GPIO38 [ 1.252525] graphics fb0: fb_ili9341 frame buffer, 320x240, 150 KiB video memory, 16 KiB buffer memory, fps=25, spi0.1 at 16 MHz до контроллера экрана что-то долетает, раз он показывает цветной мусор есть ли в системе устройство /dev/fb0 и если есть, то попробуйте команду dd if=/dev/urandom of=/dev/fb0 bs=1 count=153600 это вывод рандома в память фреймбуфера - экран должен заполниться цветными точками ЗЫ байты в процедуре инита экрана на Малине и тут одинаковые? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
shworker 0 1 июня, 2021 Опубликовано 1 июня, 2021 (изменено) · Жалоба 21 hours ago, Jury093 said: есть ли в системе устройство /dev/fb0 Да. 21 hours ago, Jury093 said: и если есть, то попробуйте команду dd if=/dev/urandom of=/dev/fb0 bs=1 count=153600 Те же яйца, только в профиль. Полоска из пикселей в углу, только содержимое отличается. 21 hours ago, Jury093 said: ЗЫ байты в процедуре инита экрана на Малине и тут одинаковые? Посмотрел в исходниках драйвера у себя и в RaspiOS. Одинаковые. К соалению, мой логический анализатор не хватает более 5MHz. Бюджетный Китай. И еще, если подключаю ЛА на пины дисплея (для этого и припаял вторую гребенку) - сыпяться ошибки файловой системы. Надо как-то буферизовать SPI, но вот как ? Странно, может, конечно, из-за этого и мусор на экране, но почему всегда один и тот же, в одном и том же месте ? Ведь если бы туда залетал random из-за помех на линиях SPI - то и был бы random на экране. Изменено 1 июня, 2021 пользователем shworker Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jury093 2 1 июня, 2021 Опубликовано 1 июня, 2021 · Жалоба 49 минут назад, shworker сказал: Да. Те же яйца, только в профиль. Полоска из пикселей в углу, только содержимое отличается. Посмотрел в исходниках драйвера у себя и в RaspiOS. Одинаковые. К соалению, мой логический анализатор не хватает более 5MHz. Бюджетный Китай. И еще, если подключаю ЛА на пины дисплея (для этого и припаял вторую гребенку) - сыпяться ошибки файловой системы. Надо как-то буферизовать SPI, но вот как ? Странно, может, конечно, из-за этого и мусор на экране, но почему всегда один и тот же, в одном и том же месте ? Ведь если бы туда залетал random из-за помех на линиях SPI - то и был бы random на экране. ну хорошо, по логике вроде все правильно - устройство есть, модуль грузится. видимо проблема где-то в транспорте SPI есть смысл снизить частоту, например в этой строке: spi-max-frequency = <16000000>; сойдет вплоть до 1 МГц, также уже можно будет пробовать анализатор по подключению не понятны пара моментов - длина проводов от платы до экрана (чем короче, тем лучше) и есть ли возможность отсадить экран на отдельный SPI, особенно если на SPI0.0 сидит флешка с рутовой чисто для проверки можно прописать SPI-GPIO и подключить экран на любые подходящие io контакты платы также проверьте в конфиге ядра, что включена поддержка консоли: CONFIG_FRAMEBUFFER_CONSOLE=y CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y в логе должна появиться строка [ 45.945460] Console: switching to colour frame buffer device 40x30 ЗЫ как буфера можно использовать из 74 серии проходные неинвертирующие ЛЭ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 1 июня, 2021 Опубликовано 1 июня, 2021 · Жалоба 5 minutes ago, Jury093 said: есть ли возможность отсадить экран на отдельный SPI, особенно если на SPI0.0 сидит флешка с рутовой На nfs вынести, или вообще в RAM. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jury093 2 1 июня, 2021 Опубликовано 1 июня, 2021 · Жалоба 21 минуту назад, aaarrr сказал: На nfs вынести, или вообще в RAM. здравая идея, согласен. или на любой подходящий накопитель.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tarbal 4 2 июня, 2021 Опубликовано 2 июня, 2021 · Жалоба 17 hours ago, Jury093 said: ну хорошо, по логике вроде все правильно - устройство есть, модуль грузится. видимо проблема где-то в транспорте SPI Есть разные форматы пикселя.https://www.programmersought.com/article/94511583062/ Надо знать какой формат принимает дисплей и дать в точности. Какой colorspace? YUV, RGB? Сколько бит на пиксель? 8, 15, 16, 18, 24 или 32? Надо знать ответы на эти вопросы и в соответствии с ними задать параметры устройства. Заодно посмотреть если драйвер поддерживает этот формат. Проблема точно в этом. On 5/31/2021 at 5:06 AM, shworker said: Нашелся вот такой файл: root@OpenWrt:/# cat /sys/class/graphics/fb0/modes U:320x240p-0 Это как раз он и есть. Я потомиу и сказал поискать, что он будет в другом месте. У вас дисплей 320 на 240 пикселей? Вот по теме:https://www.digi.com/resources/documentation/digidocs/90001945-13/reference/yocto/r_an_adding_custom_display.htm Вот пример формата пикселя. color space RGB 24 бита на пиксель. interface_pix_fmt = "RGB24"; что такое &ldb { status = "okay"; lvds-channel@0 { fsl,data-mapping = "spwg"; fsl,data-width = <18>; display-timings { native-mode = <&timing0>; timing0: hsd101pfw2 { clock-frequency = <45000000>; hactive = <1024>; vactive = <600>; hfront-porch = <0>; hback-porch = <0>; hsync-len = <176>; vback-porch = <0>; vfront-porch = <0>; vsync-len = <25>; }; }; }; }; вы узнаете из этой ссылки:https://www.kernel.org/doc/html/latest/fb/framebuffer.html Там в конце картинка с активным окном на фоне большего окна, где синхроимппульсы front porch back porch показаны. Что будет непонятно спросите. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться