wtorek, 6 czerwca 2023

Colibri iMX6 - Wyświetlacz rezystancyjny Toradex

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. 

  1. setenv vidargs 'video=mxcfb0:dev=lcd,FusionF07A,if=RGB666 video=mxcfb1:off fbmem=8'
  2. saveenv

Można je także wprowadzić do pliku uEnv.txt, który jest zlokalizowany w plikach obrazu instalacyjnego. 

  1. //...
  2. //...
  3. vidargs=video=mxcfb0:dev=lcd,FusionF07A,if=RGB666 video=mxcfb1:off fbmem=8

Jako parametry wygląda to następująco:

  1. "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:

  1. root@colibri-imx6:~# fbset
  2.  
  3. mode "800x480-60"
  4.     # D: 33.260 MHz, H: 31.496 kHz, V: 59.993 Hz
  5.     geometry 800 480 800 480 16
  6.     timings 30066 88 40 33 10 128 2
  7.     rgba 5/11,6/5,5/0,0/0
  8. endmode

Domyślnie wyświetli nam konfigurację zapisaną w /dev/fb. Przypisana z interfejsu fb0. Pod fb1 znajdziemy inne ustawienia:

  1. root@colibri-imx6:~# fbset -fb /dev/fb1
  2.  
  3. mode "240x320-60"
  4.     # D: 33.260 MHz, H: 31.496 kHz, V: 59.993 Hz
  5.     geometry 240 320 240 960 16
  6.     timings 30066 648 40 33 170 128 2
  7.     rgba 5/11,6/5,5/0,0/0
  8. 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:

  1. root@colibri-imx6:~# ls -l /dev/input/event*
  2. crw-rw----    1 root     input      13,  64 Jun  6 13:50 /dev/input/event0
  3. crw-rw----    1 root     input      13,  65 Jun  6 13:50 /dev/input/event1
  4. crw-rw----    1 root     input      13,  66 Jun  6 13:50 /dev/input/event2
  5. 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:

  1. root@colibri-imx6:~# evtest /dev/input/event0
  2. Input driver version is 1.0.1
  3. Input device ID: bus 0x18 vendor 0x0 product 0x0 version 0x0
  4. Input device name: "stmpe-ts"
  5. Supported events:
  6.   Event type 0 (EV_SYN)
  7.   Event type 1 (EV_KEY)
  8.     Event code 330 (BTN_TOUCH)
  9.   Event type 3 (EV_ABS)
  10.     Event code 0 (ABS_X)
  11.       Value    205
  12.       Min        0
  13.       Max     4095
  14.     Event code 1 (ABS_Y)
  15.       Value    294
  16.       Min        0
  17.       Max     4095
  18.     Event code 24 (ABS_PRESSURE)
  19.       Value      0
  20.       Min        0
  21.       Max      255
  22. Properties:
  23. Testing ... (interrupt to exit)
  24. Event: time 1686061249.807269, type 3 (EV_ABS), code 0 (ABS_X), value 273
  25. Event: time 1686061249.807269, type 3 (EV_ABS), code 1 (ABS_Y), value 1376
  26. Event: time 1686061249.807269, type 3 (EV_ABS), code 24 (ABS_PRESSURE), value 188
  27. Event: time 1686061249.807269, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 1
  28. Event: time 1686061249.807269, -------------- SYN_REPORT ------------
  29. Event: time 1686061249.832562, type 3 (EV_ABS), code 0 (ABS_X), value 287
  30. Event: time 1686061249.832562, type 3 (EV_ABS), code 1 (ABS_Y), value 1465
  31. Event: time 1686061249.832562, type 3 (EV_ABS), code 24 (ABS_PRESSURE), value 146
  32. Event: time 1686061249.832562, -------------- SYN_REPORT ------------
  33. Event: time 1686061249.858093, type 3 (EV_ABS), code 0 (ABS_X), value 310
  34. Event: time 1686061249.858093, type 3 (EV_ABS), code 1 (ABS_Y), value 1473
  35. Event: time 1686061249.858093, type 3 (EV_ABS), code 24 (ABS_PRESSURE), value 94
  36. Event: time 1686061249.858093, -------------- SYN_REPORT ------------
  37. Event: time 1686061249.883203, type 3 (EV_ABS), code 0 (ABS_X), value 306
  38. Event: time 1686061249.883203, type 3 (EV_ABS), code 1 (ABS_Y), value 1466
  39. Event: time 1686061249.883203, type 3 (EV_ABS), code 24 (ABS_PRESSURE), value 76
  40. Event: time 1686061249.883203, -------------- SYN_REPORT ------------
  41. Event: time 1686061249.907589, type 3 (EV_ABS), code 0 (ABS_X), value 311
  42. Event: time 1686061249.907589, type 3 (EV_ABS), code 1 (ABS_Y), value 1468
  43. 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:

  1. # cat /sys/class/backlight/backlight/max_brightness
  2. 7

Sprawdzenie aktualnej wartości:

  1. # cat /sys/class/backlight/backlight/brightness
  2. 6

Ustawienie innej:

  1. # echo 7 > /sys/class/backlight/backlight/brightness
  2. # cat /sys/class/backlight/backlight/brightness
  3. 7

Dokumentacja: