W tym poście chciałbym opisać sposób uruchomienia wyświetlacza Resistive Touch Display 7'' Parallel w wersji V1.0A.
Opis podłączenia:
Wyświetlacz zostaje podłączony do płytki Aster Carier Board. Do testów wykorzystuje system w wersji 2.8.
Wyjścia złącza wyświetlacza są wyprowadzone na płytce na dwóch złączach:
Jak widać na schemacie podłączone są sygnału od wyświetlacza RGB po 6 linii na każdy kolor, linie reset oraz PWM. Z tego samego złącza do wyprowadzone zostały także linie ustawienia ekranu na wyświetlaczu (Rotate) oraz linie panelu dotykowego. Drugie złącze jest wykorzystywane do pojemnościowych panelów dotykowych, których sterownik wykorzystuje interfejs I2C do komunikacji.
Linie panelu dotykowego (4 piny) są podłączone do układu STMP811. Jest to układ kontrolera panelu dotykowego. Jego podłączenie na płycie Aster wygląda następująco:
W przypadku opisywanego wyświetlacza będzie wykorzystywane tylko jedno złącze 40 pinowe. Drugie złącze byłoby wykorzystywane dla modelu wyświetlacza wyposażonego w pojemnościowy panel dotykowy.
Wyświetlacz posiada rozdzielczość 800x460px. Zgodnie ze schematem linie danych to RGB666 (18 bitów). Panel dotykowy wykorzystuje 4 linie danych
Schemat blokowy wyświetlacza wygląda następująco:
Uruchomienie:
Cały projekt testowałem na wersji BSP 2.8.
Po uruchomieniu projektu należy zatrzymać wykonywanie programu i ustawić odpowiednie zmienne środowiskowe.
- setenv vidargs 'video=mxcfb0:dev=lcd,FusionF07A,if=RGB666 video=mxcfb1:off fbmem=8'
- saveenv
Można je także wprowadzić do pliku uEnv.txt, który jest zlokalizowany w plikach obrazu instalacyjnego.
- //...
- //...
- vidargs=video=mxcfb0:dev=lcd,FusionF07A,if=RGB666 video=mxcfb1:off fbmem=8
Jako parametry wygląda to następująco:
- "video=mxcfb<number>:dev=<Output>,<Mode Specifier>,if=<Output Format>,[bpp=<Framebuffer Depth>]"
Następnie zapisujemy plik uEnv.txt i instalujemy obraz na module Colibri.
Działający wyświetlacz wygląda w następujący sposób:
Do sprawdzenia konfiguracji buforów wyświetlacza możemy wykorzystać narzędzie fbset:
- root@colibri-imx6:~# fbset
- mode "800x480-60"
- # D: 33.260 MHz, H: 31.496 kHz, V: 59.993 Hz
- geometry 800 480 800 480 16
- timings 30066 88 40 33 10 128 2
- rgba 5/11,6/5,5/0,0/0
- endmode
Domyślnie wyświetli nam konfigurację zapisaną w /dev/fb. Przypisana z interfejsu fb0. Pod fb1 znajdziemy inne ustawienia:
- root@colibri-imx6:~# fbset -fb /dev/fb1
- mode "240x320-60"
- # D: 33.260 MHz, H: 31.496 kHz, V: 59.993 Hz
- geometry 240 320 240 960 16
- timings 30066 648 40 33 170 128 2
- rgba 5/11,6/5,5/0,0/0
- endmode
Panel dotykowy:
Rezystancyjny panel dotykowy działa odrazu po podłączeniu, nie ma potrzeby wykonywania dodatkowych operacji. Należy jedynie pamiętać, że działa on przez układ STMP811, z którym były ostatnio problemy z dostępnością. Przez co w wersjach 1.1Z oraz 1.1Y nie zamontowano tego układu. Czyli dotyk nie będzie działał (link).
Po uruchomieniu urządzenia przechodzimy przez standardową procedurę kalibracji wyświetlacza, którą musimy wykonać tylko jeden raz.
Zdarzenie wejściowe sprawdzamy w następujący sposób:
- root@colibri-imx6:~# ls -l /dev/input/event*
- crw-rw---- 1 root input 13, 64 Jun 6 13:50 /dev/input/event0
- crw-rw---- 1 root input 13, 65 Jun 6 13:50 /dev/input/event1
- crw-rw---- 1 root input 13, 66 Jun 6 13:50 /dev/input/event2
- crw-rw---- 1 root input 13, 67 Apr 1 2019 /dev/input/event3
Teraz można zweryfikować na które z nich przychodzą dane od zdarzenia przypisanego do panelu dotykowego:
- root@colibri-imx6:~# evtest /dev/input/event0
- Input driver version is 1.0.1
- Input device ID: bus 0x18 vendor 0x0 product 0x0 version 0x0
- Input device name: "stmpe-ts"
- Supported events:
- Event type 0 (EV_SYN)
- Event type 1 (EV_KEY)
- Event code 330 (BTN_TOUCH)
- Event type 3 (EV_ABS)
- Event code 0 (ABS_X)
- Value 205
- Min 0
- Max 4095
- Event code 1 (ABS_Y)
- Value 294
- Min 0
- Max 4095
- Event code 24 (ABS_PRESSURE)
- Value 0
- Min 0
- Max 255
- Properties:
- Testing ... (interrupt to exit)
- Event: time 1686061249.807269, type 3 (EV_ABS), code 0 (ABS_X), value 273
- Event: time 1686061249.807269, type 3 (EV_ABS), code 1 (ABS_Y), value 1376
- Event: time 1686061249.807269, type 3 (EV_ABS), code 24 (ABS_PRESSURE), value 188
- Event: time 1686061249.807269, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 1
- Event: time 1686061249.807269, -------------- SYN_REPORT ------------
- Event: time 1686061249.832562, type 3 (EV_ABS), code 0 (ABS_X), value 287
- Event: time 1686061249.832562, type 3 (EV_ABS), code 1 (ABS_Y), value 1465
- Event: time 1686061249.832562, type 3 (EV_ABS), code 24 (ABS_PRESSURE), value 146
- Event: time 1686061249.832562, -------------- SYN_REPORT ------------
- Event: time 1686061249.858093, type 3 (EV_ABS), code 0 (ABS_X), value 310
- Event: time 1686061249.858093, type 3 (EV_ABS), code 1 (ABS_Y), value 1473
- Event: time 1686061249.858093, type 3 (EV_ABS), code 24 (ABS_PRESSURE), value 94
- Event: time 1686061249.858093, -------------- SYN_REPORT ------------
- Event: time 1686061249.883203, type 3 (EV_ABS), code 0 (ABS_X), value 306
- Event: time 1686061249.883203, type 3 (EV_ABS), code 1 (ABS_Y), value 1466
- Event: time 1686061249.883203, type 3 (EV_ABS), code 24 (ABS_PRESSURE), value 76
- Event: time 1686061249.883203, -------------- SYN_REPORT ------------
- Event: time 1686061249.907589, type 3 (EV_ABS), code 0 (ABS_X), value 311
- Event: time 1686061249.907589, type 3 (EV_ABS), code 1 (ABS_Y), value 1468
- Event: time 1686061249.907589, type 3 (EV_ABS), code 24 (ABS_PRESSURE), value 127
Ustawienie podświetlenia:
Podświetlenie wyświetlacza można ustawić w następujący sposób:
Sprawdzenie maksymalnej wartości podświetlenia:
- # cat /sys/class/backlight/backlight/max_brightness
- 7
Sprawdzenie aktualnej wartości:
- # cat /sys/class/backlight/backlight/brightness
- 6
Ustawienie innej:
- # echo 7 > /sys/class/backlight/backlight/brightness
- # cat /sys/class/backlight/backlight/brightness
- 7