ЗАО «ЗЭО»
Техническая поддержка пользователей => ОС Linux, U-Boot => Тема начата: KDM от 12 Марта, 2013, 18:31:02
-
Для поддержки дисплея MTF-TW70SP941 с разрешением 800x480 в одновременной работой VGA добавил в файл linux-2.6.22.19/arch/arm/mach-pxa/tion270.c следующий код:
static struct pxafb_mode_info display_mode_vga_800x480=
{
.pixclock = 34331,
.xres = 800,
.yres = 480,
.bpp = 18,
.nonstd = 24,
.hsync_len = 40,
.left_margin = 80,
.right_margin = 10,
.vsync_len = 2,
.upper_margin = 40,
.lower_margin = 0,
};
...
else if (NULL != strstr(pos, "vga-800x480"))
{
tion270_pxafb_info.modes = &display_mode_vga_800x480;
pxa_gpio_set_value(GPIO_VGA_POWER_ENA, 1);
use_vga_power_ena = 1;
tion270_pxafb_info.lccr3 |= LCCR3_PixRsEdg;
}
На загрузку указал video=pxafb:tag=vga-800x480:bpp=16.
Вроде бы работает, но немного коряво. Особенно заметно по краям (границы цветов, края шрифтов и т.д.). Как на обычном дисплее (пиксели неправильного цвета), так и на vga (помаргивание пикселей). Есть такое впечатление что не совсем верно выбраны какие-то параметры.
С параметрами (.xres = 800, .yres = 480, .bpp = 18, .nonstd = 24, ) все вроде бы понятно.
С параметры ( .hsync_len = 40, .left_margin = 80, .right_margin = 10, .vsync_len = 2, .upper_margin = 40, .lower_margin = 0,) уже сложнее. Дисплей LCD 7" на них не реагирует. Так что подбирал так, чтобы VGA мог с помощью автоподстройки захватить всю область экрана.
Параметр (.pixclock = 34331), рассчитывал по формуле из http://arm.mini-box.com/index.php?title=Linux_LCD_timing_handling_and_interfacing , с учетом #define KHZ2PICOS(a) (1000000000UL/(a))
.
Похоже на то, что где-то что-то неправильно. Но вот где и что непонятно. Поясните, пожалуйста, каким образом вы брали конфигурации pxafb_mode_info для используемых Вами штатных дисплеев.
-
> Особенно заметно по краям (границы цветов, края шрифтов и т.д.)
Попробуйте поменять полярность pixclock.
-
Спасибо за наводку.
Изменил tion270_pxafb_info.lccr3 |= LCCR3_PixFlEdg;
Монитор MTF-TW70SP941 работает без искажений (сейчас буду еще проверять как он засыпает при простое - раньше "выцветал" бурыми и белыми пятнами). С VGA ситуация улучшилась примерно на 60%.
-
Да, проблема с засыпанием дисплея осталась.
При простое сначала экран начинает неравномерно заполняться белым цветом (до полной белой картинки на дисплее). Затем белый цвет исчезает (опять же неравномерно по области экрана), в бурых оттенках проявляется картинка и затем сводится к черному экрану. Весь процесс занимает секунд 10.
Таким образом, сейчас еще остались 2 недочета:
- помаргивание пикселей на экране VGA (тоже на границах, LCCR3_PixFlEdg ситуацию улучшило, но не до конца);
- некорректное засыпание MTF-TW70SP941.
Если сталкивались с такими проблемами или знаете, куда копать, подскажите, пожалуйста.
-
>- некорректное засыпание MTF-TW70SP941.
> раньше "выцветал" бурыми и белыми пятнами
Эти картинки у каждого дисплея по-разному, если нет сигнала.
Надо отключать подсветку и (если требуется для экономии энергии) всё питание дисплея, при включении нужна задержка после подачи питания дисплея до включения подсветки. С подсветкой всё должно быть "нормально", если для неё используется сигнал PWM0 (сейчас 50% ШИМ при работе и 0% при отключении дисплея). Для управления питанием дисплея в Тион-Про270 rev.2 будем использовать GPIO44 (ранее не выведанное на Тион-Про270 rev.1).
> - помаргивание пикселей на экране VGA;
Одновременно (на одних и тех же настройках контроллера) и дисплей, и экран VGA нормально могут и не работать. Если проблема мигающих пикселей на VGA решается инвертированием pixclock, то на адаптер к дисплею можно поставить быстродействующий инвертор на pixclock. Или одновременная работа дисплея и экрана VGA не требуется?
-
>> Эти картинки у каждого дисплея по-разному, если нет сигнала.
>> Надо отключать подсветку и (если требуется для экономии энергии) всё питание дисплея,
>> при включении нужна задержка после подачи питания дисплея до включения подсветки.
>> С подсветкой всё должно быть "нормально", если для неё используется сигнал PWM0
PWM0 не используется, но на Тион270 есть BL_ON (GPIO_81).
Сейчас вход дисплея "управление подсветкой" соединен с +3.3В. То есть подсветка включена всегда. Причина некорректного засыпания кроется в этом? Если да, то можно
а) либо просто отключить засыпание (перемычка J37 на Сириус270 переставить в положение 2-3 [правильно понимаю?]);
б) либо завести сигнал BL_ON с разъема Сириус270 J42 [этого достаточно ?].
В целом, прибор пока что относится к разряду "стационарных", поэтому потребление питания не так критично (вполне устроит вариант "а"). А возможность отключения подсветки желательно предусмотреть на будущее (если вариант "б" работает - проверить и пока что забыть, если нет - то...).
>> Или одновременная работа дисплея и экрана VGA не требуется?
Сейчас VGA-800x480 нужен для отладки (гораздо удобнее работать с большим дисплеем). Но я уже предчувствую, что на какую-нибудь выставку попросят сделать конфиг для одновременной работы и VGA, и 7".
Для работы 7" конфиг сделан - конечный вариант для прибора.
Для работы VGA конфиг сделан на 80% - работает, видно, но глаза режет. А глаза портить неохота. Очень. Да и некрасиво. Если удастся настроить его малой кровью - здорово.
Рабочий конфиг для VGA И 7" сделан на те же 80%. Но пока что это скорее "приятное дополнение".
>> Одновременно (на одних и тех же настройках контроллера) и дисплей, и экран VGA нормально могут и не работать.
Угу, особенно с учетом того что строго говоря, дисплей VGA 1920x1080. А MTF-TW70SP941 800x480.
Если настроить это очень сложно, что эту задачу можно закрыть.
>> Если проблема мигающих пикселей на VGA решается инвертированием pixclock
Это помогло для дисплея MTF-TW70SP941 и полностью устранило там "битые" пиксели. На VGA лишь подправило картину ( исчезли тени, но помаргивание осталось).
-
> Причина некорректного засыпания
При отсутствии данных дисплей вправе показывать что хочет, а не только чёрный экран.
> а) либо просто отключить засыпание (перемычка J37 на Сириус270 переставить в положение 2-3 [правильно понимаю?]);
Эта перемычка дисплею не поможет. Если вы хотите отключить "засыпание" дисплея, то см.
www.zao-zeo.ru/dokuwiki/doku.php/linux#дисплей
Эту команду можно разместить в /etc/init.d
В http://zao-zeo.ru/media/files/linux/buildroot-2009.08.git скрипт есть в local/stuff/S60disable-console-sleep
> б) либо завести сигнал BL_ON с разъема Сириус270 J42 [этого достаточно ?]
Да, с указанным вами ранее кодом в arch/arm/mach-pxa/tion270.c
use_vga_power_ena = 1;
pxa_gpio_set_value(GPIO_VGA_POWER_ENA, 1);
> дисплей VGA 1920x1080. А MTF-TW70SP941 800x480
Если дисплей VGA будет показывать 800x480 и с таймингами для MTF-TW70SP941. PXA270 может максимум 1024x1024.
-
>> Эту команду можно разместить в /etc/init.d
>> скрипт есть в local/stuff/S60disable-console-sleep
Время специально не засекал, но спустя минут 10 дисплеи все равно заснули.
Update: засек = 15 минут после запуска программы (запускалась из отладочного терминала).
При случае попробую потестировать и реакцию на BL_ON . Исходя из предыдущего сообщения,
use_vga_power_ena = 1;
pxa_gpio_set_value(GPIO_VGA_POWER_ENA, 1);
при этом обязательно?
Кстати говоря, http://www.zao-zeo.ru/forum/index.php?topic=634.msg3330#msg3330
>> >> Но постоянно выдает tslib: Unknown event type 0
>> Это ничего.
Проблема так и не решилась? Тестировал и на 5.7", 7", да и на 8" помнится наблюдалось. Чем неприятно: если взять ts_test и в режиме Draw попробовать нарисовать линию, то ничего путного из этого не выйдет: курсор при tslib: Unknown event type 0 постоянно улетает на границы экрана (причем все время в разных направлениях: 0' , 90' , 180' , 270').
-
> Время специально не засекал, но спустя минут 10 дисплеи все равно заснули.
> Update: засек = 15 минут после запуска программы (запускалась из
> отладочного терминала).
Может быть у вас графическая программа не на tty0, попробуйте tty (для всех)
(что-то происходит с консолью на ttyS0) или tty1.
> При случае попробую потестировать и реакцию на BL_ON . Исходя из
> предыдущего сообщения, use_vga_power_ena = 1;
> pxa_gpio_set_value(GPIO_VGA_POWER_ENA, 1);
> при этом обязательно?
Да.
> Проблема так и не решилась? Тестировал и на 5.7", 7", да и на 8" помнится
> наблюдалось. Чем неприятно: если взять ts_test и в режиме Draw попробовать
> нарисовать линию, то ничего путного из этого не выйдет: курсор при tslib:
> Unknown event type 0 постоянно улетает на границы экрана (причем все время
> в разных направлениях: 0' , 90' , 180' , 270').
Вы калибровку делаете?
Должна быть решена в http://zao-zeo.ru/media/files/linux/buildroot-2009.08.git
(с event type 0 не связано, проблема была в
package/tslib/tslib-1.0-absbit.patch)
-
>> Должна быть решена в (с event type 0 не связано, проблема была в package/tslib/tslib-1.0-absbit.patch)
Спасибо, в новой версии проблема отсутствует.
>> Может быть у вас графическая программа не на tty0, попробуйте tty (для всех)
>> (что-то происходит с консолью на ttyS0) или tty1.
Боюсь моего уровня знаний недостаточно чтобы ответить на этот вопрос.
Детальная информация:
- программа запускалась из отладочного терминала ( console=ttyS0,115200 ), была завершена, спустя 15 минут дисплей заснул.
- содержимое inittab:
# Set up a couple of getty's #Закомментирован оригинал, отменен логин на основной консоли
#tty1::respawn:/sbin/getty 38400 tty1
#tty2::respawn:/sbin/getty 38400 tty2
tty1::respawn:/sbin/getty -n -l/bin/sh -L tty1 38400 vt100 # GENERIC_SERIAL
tty2::respawn:/sbin/getty -n -l/bin/sh -L tty2 38400 vt100 # GENERIC_SERIAL
# Put a getty on the serial port
ttyS0::respawn:/sbin/getty -L ttyS0 115200 vt100 # GENERIC_SERIAL
-
- программа запускалась из отладочного терминала ( console=ttyS0,115200 ), была завершена, спустя 15 минут дисплей заснул.
- содержимое inittab:
tty1::respawn:/sbin/getty -n -l/bin/sh -L tty1 38400 vt100 # GENERIC_SERIAL
tty2::respawn:/sbin/getty -n -l/bin/sh -L tty2 38400 vt100 # GENERIC_SERIAL
Сделайте
echo -en "\033[9;0]" > /dev/tty1
echo -en "\033[9;0]" > /dev/tty2
В S60disable-console-sleep делается только для tty0
Я вчера проверил (без графической программы, может быть Qt что-то само делает с tty), засыпание экрана отключается (консоль с пингвином отображалась более часа).
-
Добавил в S60disable-console-sleep
echo -en "\033[9;0]" > /dev/tty1
echo -en "\033[9;0]" > /dev/tty2
Перезагрузился.
Не засыпает уже 28 минут во время работы программы. Не засыпает уже 20 минут после завершения программы.
-
> Не засыпает уже 28 минут во время работы
Теперь надо думать про скринсейвер.
-
>> Теперь надо думать про скринсейвер.
Если бы он существовал, пришлось бы думать как его убрать :)