Jump to content

OrangePi One/Lite підключення дісплею MKS TS35


Recommended Posts

Стартові вимоги 🙂
- Маєте дісплейчик з тачскріном від MKS TS35 (наприклад Robin Nano V3 працює з таким)

- Є одноплатний компьютер Orange Pi One/Lite (підозрюю, Orange Pi Zero також підійде)

- Дуже кортить мати локальне керування вашим 3д принтером, яке відпало після встановлення прошивки Klipper на той самий принтер.
Саме найперше, що треба зробити — встановити останній armbian під свою плату. Припустимо, це Orange Pi One. Завантажили образ (я використовую Armbian 22.05 Bullseye/cli , без всіляких домішок — напхати усякого хламу встигнемо ще. Записати можно balena etcher

Завантажились перший раз, побачили страшну чорну консольку, змінили пароль рута (за замовченням root / 1234 ) Так. хм. Виключаємо, та ліземо за дротами. Без купки дротів дісплейчик чогось працювати не хоче.
Дивимось на картинку с призначенням гребінки i/o Orange Pi One, Lite, PC, PC2, PC Plus, Plus, Plus 2, Plus 2E, Prime

(картинка з https://pcminipro.ru/orangepi/raspinovka-razemov-gpio-orange-pi/ )

orange-header.thumb.png.34e676f566e28427c30946383aab37c0.png

 

 

 

а також на роз’єми MKS TS35
(картинка з https://github.com/willngton/3DPrinterConfig/blob/main/mks_ts35/mks_ts35_guide_archived.md )

ts35.thumb.png.9dfde04341791c3029ea76cdb47c8280.png

У нашого одноплатника є два SPI, мені подобається більше SPI0, на нього буду чіпляти(для SPI1 метода така ж сама, різниця тільки у налаштуваннях). Сам MKS TS35 зроблений фактично з двух різних залізяк — контролер дисплею (Ilitek IL9341) та контролер тачскріну (ADS7846). Обидва для керування використовують SPI шину, керуючий компьютер смикає їх по черзі за необхідності.

 

Зробимо табличку, куди треба втикнути:

Пин на одноплатнику

Пин на TS35

Функція

PC0 (SPI0-MOSI)

MOSI

Передача даних

PC1 (SPI0-MISO)

MISO

Приймання даних

PC2 (SPI0-SCK)

SCK

Тактовий сигнал

PC3 (SPI0-CS)

LCD_CS

Робота с дісплеем

PA0

LCD_RS

Дісплей: Дані/Команда

PA1

TOUCH_CS

Робота з тачскріном

PA3

LCD_RST

Дісплей: скидання

PA6

TOUCH_INT

Тачскрін: Подія натискання

+5V

BOARD_5V

Живлення

Ground

GND

Загальний

+3.3V

LCD_BLK

Підсвічування дісплею

 

Згідно с табличкой з’єднуємо девайси дротами. Можна спаяти, можна ардуінівскими перемичками, за бажанням.

Згодом війде десь такий жах:

wires.thumb.png.503f203b239cb5f8ee9810faab68acd7.png

Дуже уважно перевірити підключення живлення — якщо переплутати, є неабиякий шанс випускання магічного диму, після цього — або одноплатник, або дісплейчик піде впевненними кроками до смітника. Не заважить два, три рази пересвідчитися, що підключено як треба.

Теперь треба закинути на одноплатник файли с конфігурациєю дісплея. (у вкладенні). Це звичайний текстовичок, який описує що, як, куди підключено.

Закидуємо их в /boot/overlay-user будь-яким зручнім методом (наприклад, far manager або WinSCP. Це программи для ОС Windows, лінуксоїди i так знають, як це зробити 🙂

Далі треба сходити в консольку, та виконати декілька команд. (або взяти зразу відкомпільовані файліки)

 

cd /boot/overlay_user
dtc -O dtb sun8i-h3-ads7628.dts -o sun8i-h3-ads7628.dtbo
dtc -O dtb sun8i-h3-ili9341.dts -o sun8i-h3-ili9341.dtbo
dtc -O dtb sun8i-h3-csPA01.dts -o sun8i-h3-csPA01.dtbo


Це компілятор текстового файла dts с описом конфігурации в бінарний вид, який більше підходить для завантаження ядром. Якщо все добре, отримаете три файли *.dtbo, які слід закинути в /boot/dtb/overlay
Теперь виконуемо штатний конфігуратор от армбиана

armbian-config

 

Завантажится программулька, System → Hardware дасть список оверлеев, доступних для системи. Там треба відмітити ads7628, ili9341, csPA01, spi-spidev, spi-add-cs1

overlay.thumb.png.4b75a967552b90bd24940f3c56e462dd.png

 

Зберігаємо, перезавантажувати поки не потрібно, відкриваємо на редагування файл /boot/armbianEnv.txt
там серед усього побачите рядочок с назвами того, що нещодавно вмикали:

overlays=spi-add-cs1 spi-spidev csPA01 ili9341 ads7846

якщо оверлеї вмикаются не в тому порядку, треба відредагувати. (Робочий варіант вище, в експеріментах тач в мене не працював, доки не поправив порядок)

після неї додаємо три нових:

param_spidev_spi_bus=1
param_spidev_spi_cs=1
param_spidev_max_freq=48000000

 

зберігаємо, тепер можна і перезавантажувати. Якщо все раніше зроблено вірно — профіт, на дісплейчику повинні побігти рядочки завантаження системи та запрошення входу до системи.

console.thumb.png.cc4a5c1b2719fd0032e1a4fd87d506d0.png

 

Останній крок — встановити графічну систему xorg

apt install xorg xfce4 xserver-xorg-video-fbdev

(останній пакет потрібен саме для alwinner систем)


за шляхом /etc/X11/xorg.conf/d кладемо файлік 98-fbdev.conf з таким змістом:

Section "Device"
Identifier "myfb"
Driver "fbdev"
Option "fbdev" "/dev/fb0"
EndSection

 

та запускаемо x-сервер

startx

 

радіємо картинці:

test.thumb.png.6f92aa1966a0e23cb0a6944fc7bf6f23.png

 

Сразу у вас майже 100 відсотків тач буде працювати не там, де треба. Калібруємо!

cd /opt
git clone https://github.com/kreijack/xlibinput_calibrator.git
apt install libxi-dev libx11-dev libxrandr-dev
cd /opt/xlibinput_calibrator/
make
cd src
DISPLAY=:0 ./xlibinput_calibrator –output-file-x11-config=test


останню команду слід вводити в окремій консольці, коли x-server працює - на дісплеї картинка така як вище і вона повинна замінитися на калібровочну:
calibrator.thumb.png.a357b1e86f6821b7e2fe02cc3540fc0c.png

 

Треба потикати олівцем у червоній хрестік, він буде переміщуватись по кутам. Отримаете вивід калібровочної таблиці типу:
Section "InputClass"

Identifier "calibration"

MatchProduct "ADS7846 Touchscreen"

Option "CalibrationMatrix" "-0.859279 0.004338 0.914957 -0.017730 0.897817 0.063206 0.000000 0.000000 1.000000 "

EndSection

це треба закинути в файлік
99-calibration.conf за шляхом /etc/X11/xorg-conf.d та перезавантажити x-сервер.

 

Усе, теперь можна потестити графичну оболонку 🙂

sun8i-h3-ads7846.dtbo sun8i-h3-ads7846.dts sun8i-h3-csPA01.dtbo sun8i-h3-csPA01.dts sun8i-h3-ili9341.dtbo sun8i-h3-ili9341.dts

  • Like 1
  • Thanks 1
Link to post
Share on other sites
  • 4 months later...

Привіт! Дуже цікава стаття. Є питання. Чи можна підключити 3,2 дісплей (Ilitek IL9341) таким методом до OrangePi 3 LTS? В останніх версіях Армбіан метод modprobe не працює. Через оверлей в мене не вийшло. Я ще той Лінуксоід.

Link to post
Share on other sites
  • 8 months later...

  Додаток: dts файл для підтримки цього дісплею на BTT Pi v.1.2. Тестувалося на Armbian 23.08.0-trunk Bookworm with Linux 6.1.30-sun50iw9-btt

sun50i-h616-ts35.dts

  • Like 2
Link to post
Share on other sites
  • 3 months later...
03.07.2023 в 16:41, artko сказав:

  Додаток: dts файл для підтримки цього дісплею на BTT Pi v.1.2. Тестувалося на Armbian 23.08.0-trunk Bookworm with Linux 6.1.30-sun50iw9-btt

sun50i-h616-ts35.dts 1 \u041a\u0411 · 1 завантаження

Доброго! А ти не міг би допомогти завести тач на XP2046 на orangepi zero 2? Там теж H616. Армбіан на ньому не заводиться, тобто не заводиться мережа і HDMI тому я на оф прошивці. Я маю досвід програмування і лінукс і возні з ардуіно але з dts ніколи не стикався раніше. Не розумію який саме "naming convention" використовується в interrupts, це що, те що в в GPIO в виводі gpio? Також не розумію, що в більшості dts в інеті піни помічені на скріні однакові, в тебе різні, чи ти просто комент не змінив? А ще, чому в interrupts 3 значення, що є перша цифра? друга пін, третя режим, а перша? Тут про дві йдеться тільки https://www.kernel.org/doc/Documentation/devicetree/bindings/interrupt-controller/interrupts.txt. Якщо можеш ткнути в RTFM, то прошу) не відмовлюсь  . А ще "reg" незрозуміло.
Тач підключено до spi1 до відповідних пінів, IRQ до PC10. В системі є "/dev/spidev1.1" ехо-тест на SPI працює. Екран MPI3508. Ядро 5.16.17-sun50iw9

зображення.png

зображення.png

зображення.png

 

після modprobe ads7846 отаке в dmesg, нічого не працює

[  443.947291] SPI driver ads7846 has no spi_device_id for ti,tsc2046
[  443.947313] SPI driver ads7846 has no spi_device_id for ti,ads7843
[  443.947317] SPI driver ads7846 has no spi_device_id for ti,ads7845
[  443.947320] SPI driver ads7846 has no spi_device_id for ti,ads7873

це dts
 

orangepi@orangepizero2:~$ cat spi-ads7846.dts
/dts-v1/;
/plugin/;

/ {
        compatible = "allwinner,sun50i-h616";

        fragment@0 {
                target = <&pio>;
                __overlay__ {
                        ads7846_pins: ads7846_pins {
                                pins= "PC10";
                                function = "irq";
                };
                };
        };

        fragment@1 {
                target = <&spi1>;
                #target-path="/dev/spidev1.1";
                __overlay__ {
                        #address-cells = <1>;
                        #size-cells = <0>;
                        status = "okay";
                        ads7846@0 {
                                compatible = "ti,ads7846","ti,ads7843","ti,ads7845","ti,ads7873","ti,tsc2046";
                                reg = <0x01>; /* Chip Select 0 */
                                status = "okay";
                                pinctrl-names = "default";
                                pinctrl-0 = <&ads7846_pins>;
                                spi-max-frequency = <1000000>;
                                interrupt-parent = <&pio>;
                                interrupts = <0 47 2>; /* PC10 IRQ_TYPE_EDGE_FALLING */
                                pendown-gpio = <&pio 0 47 0>; /* PC10 */
                                debug = <1>;
                                /* driver defaults, optional */
                                ti,x-min = /bits/ 16 <0>;
                                ti,y-min = /bits/ 16 <0>;
                                ti,x-max = /bits/ 16 <0x0FFF>;
                                ti,y-max = /bits/ 16 <0x0FFF>;
                                ti,pressure-min = /bits/ 16 <0>;
                                ti,pressure-max = /bits/ 16 <0xFFFF>;
                                ti,x-plate-ohms = /bits/ 16 <400>;
                        };
                };
        };
};

 

твій dts втупу ще не пробував, конфіг Xorg є (він всюди +- однаковий, хоч для малинки хоч для інших апельсинів)

Link to post
Share on other sites

evtest нічого не показує? судячи з того, що нема девайсу - невірне підключення та/або невірний дтс.  ну і в дтс - не бачу, де CS налагоджений. irq то до стілуса, а сам spi потребує 4 піна. на одноплатнику скільки spi виведено? якщо два, може тач на другий перевісити спробувати для початку?
Мій дтс на оранжі не факт що заведется, оскількі у рідном дтс від BTT є вмикання підтримки двох spi девайсів на одній шині. Я декомпілював рідний та дивився що там і як.

 

 

так, SPI 1. СS на PH9 повинен бути, судячи з картинки. PC10 - це gnd? щось незрозуміло. сам пристрій повинен і без IRQ детектитись, раз він єдиний на шині

 

Link to post
Share on other sites

Дякую за відповідь!

Тобто я маю явно вказати CS, це тоді я додаю щось на кшталт:

cs-gpios = <&pio 0 'PH9' 0>;

але 'PH9' не можна використовувати там, що там за нотація, як мені зрозуміти правильний номер цього піну?

1357426899_.thumb.png.9822b0f1fc811b3cde27ea82ac082639.png

 

Таким чином підключено до плати, земля і живлення там є й так (через HDMI або  USB), я перевіряв мультиметром. Тобто CS на PH9, а IRQ на PC10.

Untitled.png

 

Спробував змінити в dts піни
 

cs-gpios = <&pio 0 233 0>;
interrupts = <0 74 2>; /* PC10 IRQ_TYPE_EDGE_FALLING */
pendown-gpio = <&pio 0 74 0>; /* PC10 */

Не працює

orangepi@orangepizero2:~$ dmesg |grep ads
[    6.438174] SPI driver ads7846 has no spi_device_id for ti,tsc2046
[    6.438197] SPI driver ads7846 has no spi_device_id for ti,ads7843
[    6.438200] SPI driver ads7846 has no spi_device_id for ti,ads7845
[    6.438204] SPI driver ads7846 has no spi_device_id for ti,ads7873
[    6.438362] ads7846: probe of spi1.1 failed with error -22

Там мають бути номери пінів з виводу gpio readall, так?

 

З тим же результатом працюють номери з колонки wPi

 

 

Це якщо я вмикаю spi-spidev overlay до мого (він сам по собі працює нормально на /dev/spi1.1 я перевіряв)

orangepi@orangepizero2:~$ dmesg | grep spi
[    1.260828] sun6i-spi 5011000.spi: chipselect 1 already in use
[    1.260851] spi_master spi0: spi_device register error /soc/spi@5011000/spidev@1
[    1.260871] spi_master spi0: Failed to create SPI device for /soc/spi@5011000/spidev@1
[    6.459201] SPI driver ads7846 has no spi_device_id for ti,tsc2046
[    6.459225] SPI driver ads7846 has no spi_device_id for ti,ads7843
[    6.459229] SPI driver ads7846 has no spi_device_id for ti,ads7845
[    6.459233] SPI driver ads7846 has no spi_device_id for ti,ads7873
[    6.459574] sun50i-h616-pinctrl 300b000.pinctrl: pin PC10 already requested by spi0.1; cannot claim for 300b000.pinctrl:74
[    6.459607] ads7846 spi0.1: failed to request/setup pendown GPIO74: -22
[    6.459615] ads7846: probe of spi0.1 failed with error -22

А це якщо я його вмикаю

orangepi@orangepizero2:~$ dmesg | grep spi
[    1.260932] sun6i-spi 5011000.spi: chipselect 1 already in use
[    1.260956] spi_master spi1: spi_device register error /soc/spi@5011000/spidev@0
[    1.260976] spi_master spi1: Failed to create SPI device for /soc/spi@5011000/spidev@0
[    6.374273] SPI driver ads7846 has no spi_device_id for ti,tsc2046
[    6.374296] SPI driver ads7846 has no spi_device_id for ti,ads7843
[    6.374300] SPI driver ads7846 has no spi_device_id for ti,ads7845
[    6.374303] SPI driver ads7846 has no spi_device_id for ti,ads7873
[    6.374669] sun50i-h616-pinctrl 300b000.pinctrl: pin PC10 already requested by spi1.1; cannot claim for 300b000.pinctrl:74
[    6.374709] ads7846 spi1.1: failed to request/setup pendown GPIO74: -22
[    6.374717] ads7846: probe of spi1.1 failed with error -22

не можу зрозуміти, який пін куди вписувати в dts, де там номер SPI задається, де пін CS? Чи треба оверлей SPI вмикати?

Link to post
Share on other sites
18.10.2023 в 01:15, artswan сказав:

Дякую за відповідь!

Тобто я маю явно вказати CS, це тоді я додаю щось на кшталт:



cs-gpios = <&pio 0 'PH9' 0>;

але 'PH9' не можна використовувати там, що там за нотація, як мені зрозуміти правильний номер цього піну?

1357426899_.thumb.png.9822b0f1fc811b3cde27ea82ac082639.png

наскількі пам'ятаю, там щось таке
номер порту A = 0, B = 1, C=2,D,E,F,G,H=7
номер піну = 9
режим (треба в мануал, не пам'ятаю)
тобто cs_gpios = <&pio 7 9 0>;

 

 

18.10.2023 в 02:17, artswan сказав:

 

Це якщо я вмикаю spi-spidev overlay до мого (він сам по собі працює нормально на /dev/spi1.1 я перевіряв)



orangepi@orangepizero2:~$ dmesg | grep spi
[    1.260828] sun6i-spi 5011000.spi: chipselect 1 already in use
[    1.260851] spi_master spi0: spi_device register error /soc/spi@5011000/spidev@1
[    1.260871] spi_master spi0: Failed to create SPI device for /soc/spi@5011000/spidev@1
[    6.459201] SPI driver ads7846 has no spi_device_id for ti,tsc2046
[    6.459225] SPI driver ads7846 has no spi_device_id for ti,ads7843
[    6.459229] SPI driver ads7846 has no spi_device_id for ti,ads7845
[    6.459233] SPI driver ads7846 has no spi_device_id for ti,ads7873
[    6.459574] sun50i-h616-pinctrl 300b000.pinctrl: pin PC10 already requested by spi0.1; cannot claim for 300b000.pinctrl:74
[    6.459607] ads7846 spi0.1: failed to request/setup pendown GPIO74: -22
[    6.459615] ads7846: probe of spi0.1 failed with error -22

А це якщо я його вмикаю



orangepi@orangepizero2:~$ dmesg | grep spi
[    1.260932] sun6i-spi 5011000.spi: chipselect 1 already in use
[    1.260956] spi_master spi1: spi_device register error /soc/spi@5011000/spidev@0
[    1.260976] spi_master spi1: Failed to create SPI device for /soc/spi@5011000/spidev@0
[    6.374273] SPI driver ads7846 has no spi_device_id for ti,tsc2046
[    6.374296] SPI driver ads7846 has no spi_device_id for ti,ads7843
[    6.374300] SPI driver ads7846 has no spi_device_id for ti,ads7845
[    6.374303] SPI driver ads7846 has no spi_device_id for ti,ads7873
[    6.374669] sun50i-h616-pinctrl 300b000.pinctrl: pin PC10 already requested by spi1.1; cannot claim for 300b000.pinctrl:74
[    6.374709] ads7846 spi1.1: failed to request/setup pendown GPIO74: -22
[    6.374717] ads7846: probe of spi1.1 failed with error -22

не можу зрозуміти, який пін куди вписувати в dts, де там номер SPI задається, де пін CS? Чи треба оверлей SPI вмикати?

не нормально. оце "300b000.pinctrl: pin PC10 already requested by spi0.1; cannot claim for 300b000.pinctrl:74" свідчить, що spi не вмикнувся. конфлікт по пінам, дтс замовляє піні, вже налаштовані для іншого. 
треба взяти дтб плати, з яким вона працює зараз, декомпілювати і подивитись.

оверлей спі треба вмикати якщо в дтб його нема. по іншому працювати не буде. розділяти на spi1.0, spi1.1 не треба, якщо девайс один. може там вже в дтб є усе потрібне і треба тільки сам тач  підключити

Link to post
Share on other sites

Дякую за допомогу! Він працює!

orangepiEnv.txt

overlays=spi-spidev ads7846 # spi-spidev має бути
#param_spidev_spi_bus=1 цих параметрів не треба! spi1.1 займе ads7846
#param_spidev_spi_cs=1

dts
 

/dts-v1/;
/plugin/;

/ {
    compatible = "allwinner,sun50i-h616";

        fragment@0 {
                target = <&spi1>;
                __overlay__ {
                        status = "okay";
                        #address-cells = <1>;
                        #size-cells = <0>;

                        ads7846: ads7846@0 {
                                compatible = "ti,ads7846";
                                /* CS1 */
                                reg = <1>; 
                                status = "okay";
                                spi-max-frequency = <1600000>;
                                interrupt-parent = <&pio>;
                                interrupts = <2 10 2>; /* PC10 IRQ_TYPE_EDGE_FALLING */
                                pendown-gpio = <&pio 2 10 0>; /* PC10 */
                                debug = <1>;

                                /* driver defaults, optional */
                                ti,x-min = /bits/ 16 <0>;
                                ti,y-min = /bits/ 16 <0>;
                                ti,x-max = /bits/ 16 <0x0FFF>;
                                ti,y-max = /bits/ 16 <0x0FFF>;
                                ti,pressure-min = /bits/ 16 <0>;
                                ti,pressure-max = /bits/ 16 <0xFFFF>;
                                ti,x-plate-ohms = /bits/ 16 <400>;
                };

                };
        };


};

Тепер маю

orangepi@orangepizero2:~$ dmesg | grep -i spi
[    6.415879] SPI driver ads7846 has no spi_device_id for ti,tsc2046
[    6.415912] SPI driver ads7846 has no spi_device_id for ti,ads7843
[    6.415915] SPI driver ads7846 has no spi_device_id for ti,ads7845
[    6.415920] SPI driver ads7846 has no spi_device_id for ti,ads7873
[    6.416276] ads7846 spi1.1: supply vcc not found, using dummy regulator
[    6.428983] ads7846 spi1.1: touchscreen, irq 94
[    6.429832] input: ADS7846 Touchscreen as /devices/platform/soc/5011000.spi/spi_master/spi1/spi1.1/input/input0

Залишилось нашаманити з калібровкою, бо щось не дуже виходить правильно його зорієнтувати.

  • Like 2
Link to post
Share on other sites

Калібровку я теж описував, як робити. Там наче нескладно, xcalibrator все сам рахує.

Link to post
Share on other sites

нажаль не робить, дав мені таке
 

Section "InputClass"
        Identifier      "calibration"
        MatchProduct    "ADS7846 Touchscreen"
        Option  "MaxX"  "49458"
        Option  "MinX"  "47547"
        Option  "MinY"  "22118"
        Option  "MaxY"  "22482"
        Option  "SwapXY"        "1" # unless it was already set to 1
        Option  "InvertX"       "0"  # unless it was already set
        Option  "InvertY"       "0"  # unless it was already set
EndSection

але мені треба інвертувати Y, а та опція, здається, не працює.
xinput set-prop "ADS7846 Touchscreen" 'Coordinate Transformation Matrix' теж не працює як треба, (екранчік, якщо що в мене повернутий Option "Rotate" "left" в xorg для монітору)

 

в інеті кажуть так треба зробити
 

orangepi@orangepizero2:~$ libinput  list-devices
Device:           ADS7846 Touchscreen
Kernel:           /dev/input/event0
Group:            1
Seat:             seat0, default
Capabilities:     touch 
Tap-to-click:     n/a
Tap-and-drag:     n/a
Tap drag lock:    n/a
Left-handed:      n/a
Nat.scrolling:    n/a
Middle emulation: n/a
Calibration:      identity matrix
Scroll methods:   none
Click methods:    none
Disable-w-typing: n/a
Accel profiles:   n/a
Rotation:         n/a

Але яка нотація для "Rotation" знайти не можу, може така сама як і для монітору? В мене ще й з фізичним підключенням проблеми, підключив старими макетними дротами, але вони глючать, здається

Link to post
Share on other sites

Це не той калібратор що треба.  Такий вже не працює, це старий формат. Щось не те робили, повинно дати щось типа такого

Section "InputClass"
       Identifier      "calibration"
       MatchProduct    "ADS7846 Touchscreen"
       Option          "CalibrationMatrix"     "0.008728 -1.127840 1.061774 1.036161 -0.117363 0.094143 0.000000 0.000000 1.000000 "
EndSection

 

 

ніяких Rotation вже нема, всі потрібні перетворення за допомогою CalibrationMatrix

Edited by artko
Link to post
Share on other sites

дійсно, переплутав з xinput_calibrator який є в стандартних репах, скомпільований xlibinput_calibrator дав правильну матрицю. Все вийшло, дякую!

  • Like 1
Link to post
Share on other sites
  • 5 weeks later...

Причепив цей екран (TS35) до ОранжПі Зеро 3. Армбіан для нього є, але він пустий - голе ядро і жодної періферії крім уарта. А це вже вище моїх здібностей ото все оживляти. Тому дебіан.

Драйвери ili9341та ads7628 вже були в системі модулями. Тож все обійшлося малюванням оверлейного файла. Навіть кліппер скрін якось сам без бубна завівся.

Але є одне але - екран стартує раз через раз і вже зовсім рідко на частоті вище 1МГц. Хоча подібні мікрухи мають працювати десь на 6 МГц наче. Пишу "подібні" бо там точно не ili9341 бо він 240*320 (саме так - вертикальний) але судячи з того, що воно таки якось працює має дуже подібний протокол. А тому до шановного паньства 2 питання - 1 хтось достеменно знає що ж там стоїть і 2 де взяти на то драйвер.

Про "що стоїть" є чутки що то або sitronix,st7796s , або ilitek,ili9486. Але це таки різні чипи. На перший нема ні готового модуля ні дравера, а оверлей з другим працює вже якось зовсім рідко і випадково але таки працює.

Можете підкинути ідею де копати, ну або геть зовсім готове рішення в когось є?

ЗІ фізичні сигнали дивився - все ОК.

ЗЗІ в деякий ДТС файлах на цю тему бачив початкову ініціалізацію типу init = <0x10000b0 0x80 0x10000c0 ....> і коментар що чіпи вирізняються тільки ініціалізацією, а далі працюють однаково. Хтось щось про це знає? Бо в сирці драйвера ili9341я щось не побачив щоб він цей параметр (init) читав.

Link to post
Share on other sites

в мене працює якраз в дтс з драйвером sitronix,st7796s по параметрам, 24мгц частота. може дроти зовсім того? чи коротші взяти?

параметри ініціализації не міняв, все стандартне завелося.

Link to post
Share on other sites

А де дрйавер взяли? 

   

 Sergey1560 /fb_st7796s

 

Оцей?

 

Мені його щось відкомпілювати не виходить. Причому справа не в тексті а в тулчейні. Я взагалі не певен чим і під що я компілюю ((( Ну і з лінуксом зіштовхнувся як став кліпер прикручувать - тобто 2 тижні тому. Хоча програмізмом страждаю помалу непрофесіонально.

Дроти рідні від екрана. Підключення на апельсину через плату-перехідник - тобто ще 1-2 см дротики між двома роз'ємами. (з паяльником і осцилоскопом я як раз профі) Я з СПІ працював багато (СПІ НОР пам'ять) і на довших і гірших дротах 20-30МГц не було проблемою.

 

Нарвався на плату МКС ПІ - рокчіп проц і той самий (майже) ТС35 екран. Розкрутив їх ДТО - в них там драйвер  ili9341 використовують.


        spi_for_lcd@0 {
            compatible = "ilitek,ili9341";
            pinctrl-names = "default";
            pinctrl-0 = <0x32>;
            reg = <0x00>;
            spi-max-frequency = <0x16e3600>;
            bgr;
            fps = <0x14>;
            rotate = <0x5a>;
            buswidth = <0x08>;
            dc-gpios = <0x31 0x06 0x00>;
            reset-gpios = <0x31 0x04 0x01>;
            led-gpios = <0x31 0x05 0x00>;
            status = "okay";
        };

Тобто вони вважають його сумісним. І самі дрова не модулем, а прямо в ядро вставлено зразу.

Поганяв на апельсині самотест СПІ - все ОК але частота вище 6МГц не ставиться - мабуть обмеження в ДТС плати чи в SPIdev оверлеї - не шукав.

Побачив, що не використовується апаратний ресет. Хоч він і вказаний в оверлеї і є обов'язковим параметром, сам сигнал ні разу не ворухнувся. Ну це ще може пояснити зайзджання через раз, але не швидкість інтрефейсу.

Оце що ще не робив - не відірвав екран від принтера, щоб подивитись сигнал безпосередньо на платі екрана. дивився тільки на стороні апельсина.

Link to post
Share on other sites

Драйвер вже був у ядрі мого btt pi. (дисплей btt мабуть з таким). Спробував з дисплеем мкс - з першого тесту завівся та працює, більше нічого не робив (дтс вище трохи викладав свій). але в мене армбіан офіцйній

Edited by artko
Link to post
Share on other sites

Подивився сирці ілітека та ситронікса  в частині ініціалізації. По регістрам не розбирав, але є одна примітна риса - в ілітеку всі команди разм чешуть. А в сітроніксу після софтового ресета пауза потім ще якась команда - пауза. Схоже він віддупляється довше. І повільна швідкість СПІ робіть ці потрібні паузи - там післяустановка ЦС на шині довга дуже. Як тільки прискорюєш - все наламується. Ну в мене така теорія. Якось таки треба спромогтися відкомпілювати і собі цей драйвер. Або спробувати кошку потягти з БТТ - бо назва файла "sun50i-h616-ts35.dts" намЄкує, що там сумісний проц - в мене префікс оверлеїв той самий.

Link to post
Share on other sites

Схоже абсолютно криво працює драйвер. Він метеляє сигналом D/C абсолютно невчасно. В результаті команди сприймаються як данні. Відповідно яка може бути нормальна ініціалізація. Ось мала бути команда 3А з данними 55. Сигнал D\C (нижній) встановився в 0 (ознака команди) під час команди вже після того як весь байт заїхав. А він стробується разом з останнім бітом. І що оце тепер - рихтувати дрова лінуха прийдеться?

1971039076_.thumb.png.63403cbb3b6b4b54048f75280707eca1.png

Link to post
Share on other sites

Тут нічого не підкажу,  дрова під лінух не писав. На мк все це просто було. Може якийсь косяк гпіо драйверу, дуже повільно ставить стан піна, а драйвер дисплею не перевіряє статус? не знаю.

Link to post
Share on other sites

Розібрався з цим. Дрова ні до чого. Виявилось що порт "C" чогось повільно переключається в 0. Затримка порядка 10-15 мкс. Тількі піни порта "H" працюють швидко. Пересадив сигнал D/C на пін порта "H"  і все запрацювало. Можливо це рулиться через драйв-стрендж, але як це перекрити в оверлеї я не знаю.

  • Like 1
Link to post
Share on other sites
  • 4 weeks later...
22.11.2023 в 20:06, IggMkh сказав:

А де дрйавер взяли? 

   

 Sergey1560 /fb_st7796s

Цей драйвер є в образі для Orange PI 3 LTS. У додатку файли з ядра 6.1.63.

 

Але можна підключити екран і через драйвер ili9341.

Ось приклад для Flyingbear Ghost 6 (у нього вертикальний екран) та Orange PI 3 LTS

 

    fragment@0 {
	target-path = "/soc/spi@5011000";
	__overlay__ {
	    num-cs = <2>;
	    
		/* PH3 PL8 */
		cs-gpios = <&pio 7 3 0>,
			<&r_pio 0 8 0>;
	    status = "okay";
	    #address-cells = <1>;
	    #size-cells = <0>;

	    ili9341: ili9341@0{
		compatible = "ilitek,ili9341";
		reg = <1>;
		spi-max-frequency = <0x16e3600>;
		fps = <0x14>;
		buswidth = <0x08>;
		reset-gpios = <&pio 3 16 1>;  /* PD16 */
		dc-gpios = <&pio 3 15 0>;     /* PD15 */
		rotate = <0xb4>;
		debug = <1>;
		height = <480>;
		width = <320>;
	    };
	};
    };

 

fb_st7796s.c fbtft.h

  • Like 1
Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...