artko 6 Posted May 31, 2022 Share Posted May 31, 2022 Стартові вимоги - Маєте дісплейчик з тачскріном від 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/ ) а також на роз’єми MKS TS35 (картинка з https://github.com/willngton/3DPrinterConfig/blob/main/mks_ts35/mks_ts35_guide_archived.md ) У нашого одноплатника є два 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 Підсвічування дісплею Згідно с табличкой з’єднуємо девайси дротами. Можна спаяти, можна ардуінівскими перемичками, за бажанням. Згодом війде десь такий жах: Дуже уважно перевірити підключення живлення — якщо переплутати, є неабиякий шанс випускання магічного диму, після цього — або одноплатник, або дісплейчик піде впевненними кроками до смітника. Не заважить два, три рази пересвідчитися, що підключено як треба. Теперь треба закинути на одноплатник файли с конфігурациєю дісплея. (у вкладенні). Це звичайний текстовичок, який описує що, як, куди підключено. Закидуємо их в /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 Зберігаємо, перезавантажувати поки не потрібно, відкриваємо на редагування файл /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 зберігаємо, тепер можна і перезавантажувати. Якщо все раніше зроблено вірно — профіт, на дісплейчику повинні побігти рядочки завантаження системи та запрошення входу до системи. Останній крок — встановити графічну систему 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 радіємо картинці: Сразу у вас майже 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 працює - на дісплеї картинка така як вище і вона повинна замінитися на калібровочну: Треба потикати олівцем у червоній хрестік, він буде переміщуватись по кутам. Отримаете вивід калібровочної таблиці типу: 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 1 1 Quote Link to post Share on other sites
Sem_pai 0 Posted October 5, 2022 Share Posted October 5, 2022 Привіт! Дуже цікава стаття. Є питання. Чи можна підключити 3,2 дісплей (Ilitek IL9341) таким методом до OrangePi 3 LTS? В останніх версіях Армбіан метод modprobe не працює. Через оверлей в мене не вийшло. Я ще той Лінуксоід. Quote Link to post Share on other sites
artko 6 Posted July 3, 2023 Author Share Posted July 3, 2023 Додаток: dts файл для підтримки цього дісплею на BTT Pi v.1.2. Тестувалося на Armbian 23.08.0-trunk Bookworm with Linux 6.1.30-sun50iw9-btt sun50i-h616-ts35.dts 2 Quote Link to post Share on other sites
artswan 3 Posted October 13, 2023 Share Posted October 13, 2023 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 після 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 є (він всюди +- однаковий, хоч для малинки хоч для інших апельсинів) Quote Link to post Share on other sites
artko 6 Posted October 16, 2023 Author Share Posted October 16, 2023 evtest нічого не показує? судячи з того, що нема девайсу - невірне підключення та/або невірний дтс. ну і в дтс - не бачу, де CS налагоджений. irq то до стілуса, а сам spi потребує 4 піна. на одноплатнику скільки spi виведено? якщо два, може тач на другий перевісити спробувати для початку? Мій дтс на оранжі не факт що заведется, оскількі у рідном дтс від BTT є вмикання підтримки двох spi девайсів на одній шині. Я декомпілював рідний та дивився що там і як. так, SPI 1. СS на PH9 повинен бути, судячи з картинки. PC10 - це gnd? щось незрозуміло. сам пристрій повинен і без IRQ детектитись, раз він єдиний на шині Quote Link to post Share on other sites
artswan 3 Posted October 17, 2023 Share Posted October 17, 2023 Дякую за відповідь! Тобто я маю явно вказати CS, це тоді я додаю щось на кшталт: cs-gpios = <&pio 0 'PH9' 0>; але 'PH9' не можна використовувати там, що там за нотація, як мені зрозуміти правильний номер цього піну? Таким чином підключено до плати, земля і живлення там є й так (через HDMI або USB), я перевіряв мультиметром. Тобто CS на PH9, а IRQ на PC10. Спробував змінити в 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 вмикати? Quote Link to post Share on other sites
artko 6 Posted October 18, 2023 Author Share Posted October 18, 2023 18.10.2023 в 01:15, artswan сказав: Дякую за відповідь! Тобто я маю явно вказати CS, це тоді я додаю щось на кшталт: cs-gpios = <&pio 0 'PH9' 0>; але 'PH9' не можна використовувати там, що там за нотація, як мені зрозуміти правильний номер цього піну? наскількі пам'ятаю, там щось таке номер порту 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 не треба, якщо девайс один. може там вже в дтб є усе потрібне і треба тільки сам тач підключити Quote Link to post Share on other sites
artswan 3 Posted October 18, 2023 Share Posted October 18, 2023 Дякую за допомогу! Він працює! 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 Залишилось нашаманити з калібровкою, бо щось не дуже виходить правильно його зорієнтувати. 2 Quote Link to post Share on other sites
artko 6 Posted October 19, 2023 Author Share Posted October 19, 2023 Калібровку я теж описував, як робити. Там наче нескладно, xcalibrator все сам рахує. Quote Link to post Share on other sites
artswan 3 Posted October 19, 2023 Share Posted October 19, 2023 нажаль не робить, дав мені таке 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" знайти не можу, може така сама як і для монітору? В мене ще й з фізичним підключенням проблеми, підключив старими макетними дротами, але вони глючать, здається Quote Link to post Share on other sites
artko 6 Posted October 19, 2023 Author Share Posted October 19, 2023 (edited) Це не той калібратор що треба. Такий вже не працює, це старий формат. Щось не те робили, повинно дати щось типа такого 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 October 19, 2023 by artko Quote Link to post Share on other sites
artswan 3 Posted October 21, 2023 Share Posted October 21, 2023 дійсно, переплутав з xinput_calibrator який є в стандартних репах, скомпільований xlibinput_calibrator дав правильну матрицю. Все вийшло, дякую! 1 Quote Link to post Share on other sites
IggMkh 1 Posted November 21, 2023 Share Posted November 21, 2023 Причепив цей екран (TS35) до ОранжПі Зеро 3. Армбіан для нього є, але він пустий - голе ядро і жодної періферії крім уарта. А це вже вище моїх здібностей ото все оживляти. Тому дебіан. Драйвери ili9341та ads7628 вже були в системі модулями. Тож все обійшлося малюванням оверлейного файла. Навіть кліппер скрін якось сам без бубна завівся. Але є одне але - екран стартує раз через раз і вже зовсім рідко на частоті вище 1МГц. Хоча подібні мікрухи мають працювати десь на 6 МГц наче. Пишу "подібні" бо там точно не ili9341 бо він 240*320 (саме так - вертикальний) але судячи з того, що воно таки якось працює має дуже подібний протокол. А тому до шановного паньства 2 питання - 1 хтось достеменно знає що ж там стоїть і 2 де взяти на то драйвер. Про "що стоїть" є чутки що то або sitronix,st7796s , або ilitek,ili9486. Але це таки різні чипи. На перший нема ні готового модуля ні дравера, а оверлей з другим працює вже якось зовсім рідко і випадково але таки працює. Можете підкинути ідею де копати, ну або геть зовсім готове рішення в когось є? ЗІ фізичні сигнали дивився - все ОК. ЗЗІ в деякий ДТС файлах на цю тему бачив початкову ініціалізацію типу init = <0x10000b0 0x80 0x10000c0 ....> і коментар що чіпи вирізняються тільки ініціалізацією, а далі працюють однаково. Хтось щось про це знає? Бо в сирці драйвера ili9341я щось не побачив щоб він цей параметр (init) читав. Quote Link to post Share on other sites
artko 6 Posted November 22, 2023 Author Share Posted November 22, 2023 в мене працює якраз в дтс з драйвером sitronix,st7796s по параметрам, 24мгц частота. може дроти зовсім того? чи коротші взяти? параметри ініціализації не міняв, все стандартне завелося. Quote Link to post Share on other sites
IggMkh 1 Posted November 22, 2023 Share Posted November 22, 2023 А де дрйавер взяли? 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 оверлеї - не шукав. Побачив, що не використовується апаратний ресет. Хоч він і вказаний в оверлеї і є обов'язковим параметром, сам сигнал ні разу не ворухнувся. Ну це ще може пояснити зайзджання через раз, але не швидкість інтрефейсу. Оце що ще не робив - не відірвав екран від принтера, щоб подивитись сигнал безпосередньо на платі екрана. дивився тільки на стороні апельсина. Quote Link to post Share on other sites
artko 6 Posted November 22, 2023 Author Share Posted November 22, 2023 (edited) Драйвер вже був у ядрі мого btt pi. (дисплей btt мабуть з таким). Спробував з дисплеем мкс - з першого тесту завівся та працює, більше нічого не робив (дтс вище трохи викладав свій). але в мене армбіан офіцйній Edited November 22, 2023 by artko Quote Link to post Share on other sites
IggMkh 1 Posted November 22, 2023 Share Posted November 22, 2023 Подивився сирці ілітека та ситронікса в частині ініціалізації. По регістрам не розбирав, але є одна примітна риса - в ілітеку всі команди разм чешуть. А в сітроніксу після софтового ресета пауза потім ще якась команда - пауза. Схоже він віддупляється довше. І повільна швідкість СПІ робіть ці потрібні паузи - там післяустановка ЦС на шині довга дуже. Як тільки прискорюєш - все наламується. Ну в мене така теорія. Якось таки треба спромогтися відкомпілювати і собі цей драйвер. Або спробувати кошку потягти з БТТ - бо назва файла "sun50i-h616-ts35.dts" намЄкує, що там сумісний проц - в мене префікс оверлеїв той самий. Quote Link to post Share on other sites
artko 6 Posted November 23, 2023 Author Share Posted November 23, 2023 можна спробувати кернел той взяти, а dtb від свого. Quote Link to post Share on other sites
IggMkh 1 Posted November 28, 2023 Share Posted November 28, 2023 Схоже абсолютно криво працює драйвер. Він метеляє сигналом D/C абсолютно невчасно. В результаті команди сприймаються як данні. Відповідно яка може бути нормальна ініціалізація. Ось мала бути команда 3А з данними 55. Сигнал D\C (нижній) встановився в 0 (ознака команди) під час команди вже після того як весь байт заїхав. А він стробується разом з останнім бітом. І що оце тепер - рихтувати дрова лінуха прийдеться? Quote Link to post Share on other sites
artko 6 Posted November 28, 2023 Author Share Posted November 28, 2023 Тут нічого не підкажу, дрова під лінух не писав. На мк все це просто було. Може якийсь косяк гпіо драйверу, дуже повільно ставить стан піна, а драйвер дисплею не перевіряє статус? не знаю. Quote Link to post Share on other sites
IggMkh 1 Posted November 28, 2023 Share Posted November 28, 2023 Розібрався з цим. Дрова ні до чого. Виявилось що порт "C" чогось повільно переключається в 0. Затримка порядка 10-15 мкс. Тількі піни порта "H" працюють швидко. Пересадив сигнал D/C на пін порта "H" і все запрацювало. Можливо це рулиться через драйв-стрендж, але як це перекрити в оверлеї я не знаю. 1 Quote Link to post Share on other sites
AlJazzz 1 Posted December 21, 2023 Share Posted December 21, 2023 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 1 Quote Link to post Share on other sites
Serhio 0 Posted May 18, 2024 Share Posted May 18, 2024 допоможіть будь ласка зробити драйвери на опі зіро 3, зараз дуже популярна плата, нажаль мої познання у лінуксі не дозволяють зробити їх самостійно =( Quote Link to post Share on other sites
artko 6 Posted May 18, 2024 Author Share Posted May 18, 2024 Загальний метод підключення - однаковий усюди, Вам треба читати мануал на свій одноплатник та адаптувати те що вище. Рецепт "під ключ" вам дати може тільки володар такого одноплатника, який переробить.... Quote Link to post Share on other sites
Serhio 0 Posted May 19, 2024 Share Posted May 19, 2024 22 години тому, artko сказав: Загальний метод підключення - однаковий усюди, Вам треба читати мануал на свій одноплатник та адаптувати те що вище. Рецепт "під ключ" вам дати може тільки володар такого одноплатника, який переробить.... біда в компіляції драйвера, тому до підключення я ще не дійшов Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.