Установка Klipper на H96 Max Rockchip RK3318

Всем привет! Сегодня у нас немного техническая статья, посвященная установке прошивки Клиппер на ТВ-бокс H96 Max с процессором Rockchip RK3318.

Информация для тех, кто забрёл случайно: Клиппер, это одна из открытых прошивок для управления 3D-принтерами, реализующая архитектуру «клиент-сервер», в которой клиентская (ведомая) часть устанавливается на плату управления принтером, а серверная (ведущая) на какой-нибудь хост с Линуксом.

Обычно таким хостом выступает одноплатный компьютер, например что-нибудь из семейства Raspberry Pi, Orange Pi и д.р. Проблема в том, что одноплатники эти нифига не дешевеют со временем, что вынуждает искать альтернативы.
Одной из таких альтернатив является использования перепрошитого ТВ-бокса. Что мы сейчас и продемонстрируем.

Открываем алиэкспресс и ищем «h96 max rk3318», выбираем понравившийся вариант, заказываем.
Например, вот этот - https://aliexpress.ru/item/4001309064162.html или этот https://aliexpress.ru/item/33017414051.html
На момент написания статьи там просят ~2300 за версию с 2 Гб оперативной памяти и 16 Гб eMMC. Для Клиппера этого более чем достаточно.

Мне же ждать было несколько лениво, так что я пошел другим путём – купил б\у-шку на авито. В объявлении не было указано сколько там памяти, так что брал вслепую.



Внезапно, полный комплект. Хотя на фото была только приставка.



И что совсем неожиданно – версия 4\32.

Готовим флэшку.

1) Скачиваем Rufus с https://rufus.ie
2) Скачиваем multitool.img.xz и Armbian_23.08.0-trunk_Rk3318-box_bookworm_edge_6.3.13_minimal.img.xz с https://users.armbian.com/jock/rk3318/

Пишем multitool образ на microSD



Теперь у вас должно появится два раздела – BOOTSTRAP и MULTITOOL.



Если появился только первый, то второму нужно назначить букву диска:



Заходим в меню управления разделами, ПКМ на MULTITOOL, «Изменить букву диска или путь к диску», добавляем букву. Сохраняем, закрываем меню.

Теперь копируем образ системы Armbian_23.08.0-trunk_Rk3318-box_bookworm_edge_6.3.13_minimal.img.xz в G:\images\

Извлекаем флэшку, вставляем в выключенную приставку, подаём питание. Если всё сделано правильно, приставка автоматически загрузится с microSD и покажет текст лицензии GNU GPL.

Отключать один из своих мониторов было влом, так что первичную настройку я проводил подключив приставку к телевизору. Пусть хоть разок поработает по своему прямому назначению =)



Выходим из лицензии и попадаем в меню Мультитула.

Если вам вдруг нужен образ установленного на приставке андроида, то его можно сохранить через опцию «Backup flash». Мне он точно не понадобится, так что сразу выбираю «Burn image to flash».



Куда? На eMMC



Что? Приготовленным нами Armbian



Ждём минуту-другую …



Готово



С мультитулом закончили - выключаем систему, вынимаем карточку.



Передёргиваем питание приставки (никаких органов управления на ней нет) и попадаём в опросник первого запуска.

Сперва нас попросят придумать пароль учетной записи root (суперпользователя).



Затем создать учетную запись обычного пользователя. Под ней и будет, в дальнейшем, работать Клиппер.



Теперь предлагает присоединиться к WiFi. Ну давай попробуем …



Выбираем сеть, вводим пароль, иии-и-и-и … фиг там.





Ну, не очень-то и хотелось. Потом посмотрим, чего ему надо.

Дальше по опроснику локаль и часовой пояс.



Локаль ставлю en_US.UTF-8 как наиболее беспроблемную, часовой пояс свой (+4).
На время не смотрите, дадим сеть – сам подтянет нормальное.

И, собственно, всё.



Втыкаю сетевой шнурок, набираю ip a и иду к компу, чтобы подключиться по SSH и продолжить настройку.

Ну привет armbian, давно не виделись.



Прежде чем переходить к установке Клиппера, обновляю систему и ставлю некоторые привычные для себя пакеты:

Код

apt-get update
apt-get upgrade

apt-get install vim htop mc net-tools armbian-config git


Всю эту историю с перешивкой ТВ-боксов я не сам, понятное дело, придумал, так что еще раз перечитываю источники и нахожу решение проблемы с WiFi:

Чищу файлик с настройками драйвера беспроводной сетевой карточки …

Код

echo "" > /usr/lib/firmware/brcm/brcmfmac4334-sdio.rockchip,rk3318-box.txt


… и записываю в него новое, правильное содержимое из https://pastebin.com/raw/00gLSkKS

На всякий случай сохраню нужный текст прямо в статье, а то мало ли что.

rk3318-box.txt

# original nvram found in Android sources for HS2734C SP
#
#

manfid=0x2d0
prodid=0x05c1
vendid=0x14e4
devid=0x4380
boardtype=0x05de
boardrev=0x1200
boardnum=22
macaddr=00:90:4c:c5:12:38
sromrev=3# brcm4334 nvram for AP6334/HK6334/SP6334
boardflags=0x10081a01
xtalfreq=37400
nocrc=1
ag0=252
aa2g=1
ccode=ALL
regrev=1
pa0itssit=0x20

#PA parameters for 2.4GHz_QM_4p2_120517
pa0b0=0x2AFD
pa0b1=0xFB41
pa0b2=0x6C
tssifloor2g=12
extpagain2g=2
extpagain5g=2
cckPwrOffset=12

# rssi params for 2.4GHz
rssismf2g=0x2
rssismc2g=0xC
rssisav2g=0x1

# rssi params for 5GHz
rssismf5g=0x8
rssismc5g=0x8
rssisav5g=0x1

#PA parameters for lower band_QM_4p2_120214
pa1lob0=0x1672
pa1lob1=0xFD53
pa1lob2=0xFF69
tssifloor5gl=18
#PA parameters for midband
pa1b0=0x1712
pa1b1=0xFD5D
pa1b2=0xFF82
tssifloor5gm=18
#PA parameters for high band
pa1hib0=0x1696
pa1hib1=0xFD64
pa1hib2=0xFF7A
tssifloor5gh=18

PwrOffset40mhz5g=-10
rxpo5g=0

maxp2ga0=78
ofdm2gpo=0x44444444
mcs2gpo0=0xaaaa
mcs2gpo1=0xaaaa
cckdigfilttype=24
ofdmdigfilttype2g=9
ofdmdigfilttype5g=3
ofdm40digfilttype=8

maxp5gla0=64
ofdm5glpo=0x33333333
mcs5glpo0=0x5555
mcs5glpo1=0x5555
mcs5glpo2=0x7777
mcs5glpo3=0x7777

maxp5ga0=66
ofdm5gpo=0x33333333
mcs5gpo0=0x5555
mcs5gpo1=0x5555
mcs5gpo2=0x7777
mcs5gpo3=0x7777

maxp5gha0=65
ofdm5ghpo=0x33333333
mcs5ghpo0=0x5555
mcs5ghpo1=0x5555
mcs5ghpo2=0x7777
mcs5ghpo3=0x7777

#il0macaddr=00:90:4c:c5:12:38
wl0id=0x431b
pagc2g=0x10

#For HS2734C Module
swctrlmap_2g=0x0c0c0c0c,0x12120202,0x02020202,0x11202,0x1ff
swctrlmap_5g=0x40404040,0xa0a0a0a0,0x80808080,0x11202,0x2f8

elna_off_gain_idx_2g=30

triso2g=6
triso5g=3

muxenab=0x10
#sd_gpout=0
#sd_oobonly=1

dacrate2xen=1
txalpfbyp=1

# In RC58.29, adding to keep the txALPF powered up , even when the txALPF is bypassed.
txalpfpu=1

# 11b ACR Performance
aci_detect_en_2g=1
dacpu.fab.4=1

gain_settle_dly_2g=4
gain_settle_dly_5g=4

#For TSMC rx sensitivity in low rate
noise_cal_po_2g=-1

#For UMC rx sensitivity in low rate
noise_cal_po_2g.fab.4=6
noise_cal_po_40_2g=-1
noise_cal_high_gain_2g=73
noise_cal_nf_substract_val_2g=346
noise_cal_po_5g=-1
noise_cal_po_40_5g=-1
noise_cal_high_gain_5g=73

# Adding in RC58.29
noise_cal_nf_substract_val_5g=346

iqlocalidx5g=55

# In RC58.35/38. Added on For LOFT
dlocalidx5g=75

# In RC58.33, change EPA_or_PAD_lpbck5g=1 to lpbckmode5g=1
#EPA_or_PAD_lpbck5g=1
lpbckmode5g=1
txiqlopapu5g=0
iqcalidx5g=50
txiqlopapu2g=0

#In RC58.35, Change Value to 5
dlorange_lowlimit=5
loflag=1

# In RC58.29, for RSSI return with pkteng_stats
#rssicorrnorm=3
#rssicorratten=3
#rssicorrnorm5g=5,3,3
#rssicorratten5g=5,3,3

#for BT-coexistence
btc_params80=0
btc_params6=10
btc_params95=53


За одно переключаю светодиоды индикации в привычный режим отображения активности системы:

Код

echo activity > /sys/devices/platform/gpio-leds/leds/working/trigger


И перезагружаю приставку.

Теперь можно запустить armbian-config и снова попробовать подключиться к WiFi – сработало.



Смотрим ip a – ага, точно сработало.



Вот теперь можно приступать к установке Клиппера.

Как и всегда, рекомендую делать это через замечательный интерфейс KIAUH https://github.com/dw-0/kiauh

Написано про это много, проблем там не возникает, так что в рамках этой статьи касаться этого момента не буду. Кто уже делал – сам знает, кто не делал – читайте Klipper Wiki https://klipper.wiki/

В общем, поставили Клиппер.



Как вы видите, в списке установленных компонентов присутствует KlipperScreen.
Нужен принтеру дисплей или не нужен – вопрос дискуссионный, мне просто нравится его наличие.

Так что достаю из запасов семидюймовый тачевый мониторчик (точно такой же, как у меня на дельте стоит) и цепляю его к приставке.



Эммм…. Что-то не то. Может у штатного питальника приставки мощности не хватает?
Цепляю дополнительный БП во второй порт экрана.



О, есть картинка.

Ну и чтобы совсем быть уверенным – на скорую руку зашиваю BTT SKR 2 и подключаю её по USB.



Всё ОК, есть контакт.

Но въедливые читатели скажут: «Да ну этот USB… по UART подключай!»

Можно и по UART, на плате он действительно имеется.

Аккуратно выщёлкиваю дно корпуса пластиковой карточкой и осматриваю плату.



Общий вид спереди и сзади:



Вот эти три контакта вблизи линейного стабилизатора и есть UART.



Распиновка подсмотрена в источниках, но тут как в притче – «На Аллаха надейся, а верблюда привязывай». Так что беру тестер и прохожусь по контактам в режиме прозвонки.



Центральный звонится с корпусом USB-порта. Земля, однако.

Зачищаю МГТФ 0.12 кв мм и паяюсь к контактам.



Центральный, что ожидаемо, греется неохотно – под ним большой земляной полигон, так что его припаиваю в форсажном режиме паяльника.

Теперь нужно включить плату и выключить сервис, которые пишет в UART дебаг логи, иначе мы не сможем использовать его для связи с платой принтера.

Снова подключаемся по SSH и вводим

Код

systemctl stop serial-getty@ttyS2.service
systemctl mask serial-getty@ttyS2.service


Теперь можно скомпилить и зашить новую прошивку в плату управления принтером и проверять работу.

С этим никаких проблем не возникло.

Возникло там, где не ждали – тачевый экран перестал включаться. В смысле совсем.
Методом многократного перетыкания и подбора проводов удалось его пару раз зажечь, но картинки не было. Ну ёпрст…

Время было уже позднее, так что я просто снова подключил приставку к телевизору и полюбовался на три здоровенные кнопки KlipperScreen’а на стене.



Короче, связь работает и по UART.



Наступил следующий день.

Подключаю «тяжелую артиллерию» и звоню другу:

- Спасай выручай, экранчик помирает. Линейники напругу выдают, винда HID определяет, а толку нету
- Ну приезжай, посмотрим


Зацепили экран к питанию и стали тыкать в него всякими диагностическими инструментами – пальцами, да тепловизорами с осциллографами.



В конце концов на микроскопе был обнаружен непропай на ногах контроллера дисплея.



Помазали ему ноги флюсом, погрели «лампой» и усадили на место.

Экран завёлся.



И чтобы вы думали, хэппи энд? А вот хрен.

Для пропайки контроллера экранный модуль нужно было отделить от платы, за которую он держался двумя полосками какой-то самоклеющейся вспененной фигни.
В общем, в процессе удаления остатков этой фигни в экранный модуль затекло немного ФлюксОфф-а, а у него в составе хлористый метилен… Так что в экране теперь пятно, т.к. ДХМ слегка оплавил светорассеиватель торцевой подсветки.
Ну и шут с ним, с пятном. На тёмном интерфейсе КлипперСкрина и не видно почти (это я так себя успокаиваю, ага).

Хуже другое – этот экран не очень стабильно запускается от ТВ-бокса. Методом научного тыка было обнаружено, что, если в приставку вставить телевизор, дать запуститься КлипперСкрину, а потом подключить к экранчику – всё хорошо.



А вот если экран будет подключен сразу – тишина. Показывает «нет сигнала» и потухает.

При этом с Orange Pi 3 LTS он прекрасно работает, а приставка нормально выдаёт картинку на телевизор или мониторы.

Складывается ощущение, что проблема где-то около драйвера видео или автоопределения доступных режимов изображения.

На попытки исправления этой проблемы я угрохал целый день и не пришел ни к чему.
Были испробованы сотни вариаций всевозможных настроек параметров загрузки, конфигов Xorg’а и жесткого задания режимов изображения. Ничего. Ну не хочет он с этой приставкой работать в положенном ему разрешении 1024х600 и всё тут.

Стабильно работает только в каких-нибудь стандартных, вроде 800х600 или 1024х768.
Делается это так:

В /boot/armbianEnv.txt добавляем

Код
extraargs=drm_kms_helper.edid_firmware=HDMI-A-1:edid/800x600.bin video=HDMI-A-1:800x600-24@60


Создаём /usr/share/X11/xorg.conf.d/90-monitor.conf и вносим в него

Код

Section "Monitor"
Identifier "HDMI-1"
Option "PreferredMode" "800x600"
EndSection


Для 1024х768 аналогично.
При таких настройках видно и процесс загрузки, и интерфейс KlipperScreen.

Картинку, понятно дело, слегка плющит, но жить можно.

Такие дела. Если у кого возникнут идеи – делитесь, будем пробовать. Приставка эта и покупалась скорее для тестов, чем для реального использования.



Дополнение от 24.05.2024





Проблема с разрешением экрана решена.

Как я и предполагал, причина софтверная и лежит в области дров на видео.
После вдумчивого чтения форума-первоисточника этой сборки Armbian, загрузки чистых образов и сравнения доступных режимов видео было выяснено, что дело в ядре.
Спорка поставляется с ядром, содержащим патчи HDMI из LibreELEC и в этом случае среди доступных режимов нет родного для дисплея 1024х600, а автоматически выставляется 1920х1080, при котором изображение имеет корректное соотношение сторон.



Я же, выполнив apt-get upgrade, обновил всю систему, включая ядро, новая версия которого заменила патченную - после этого в доступных режимах появилось родное 1024х600, которое и выбирается поумолчанию. Только картинки при этом нифига нет.



А я всю дорогу пытался заставить его показывать именно в этом разрешение, рассудив, мол, раз оно родное для дисплея - значит в нём и будет нормально показывать >_<

Таким образом имеем два пути решения проблемы:

1) сразу после установки отключить обновления ядра через armbian-config: заходим в меню System и выбираем "Freeze - Disable Armbian kernel upgrades"
2) либо, если уже обновились, вручную настроить работающие разрешения для консоли и КлипперСкрина:

В /boot/armbianEnv.txt добавляем

Код
extraargs=drm_kms_helper.edid_firmware=HDMI-A-1:edid/800x600.bin video=HDMI-A-1:800x600-24@60


Создаём /usr/share/X11/xorg.conf.d/90-monitor.conf и вносим в него

Код

Section "Monitor"
Identifier "HDMI-1"
Option "PreferredMode" "1920x1080"
EndSection


В таком случае интерфейс отображается без искажений геометрии:






Источники:

http://psenyukov.ru/%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0-armbian-%D0%B8-home-assistant-%D0%BD%D0%B0-tv-box-h96-max-%D0%BD%D0%B0-%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%BE%D1%80%D0%B5-rockchip-rk33/
https://psenyukov.ru/%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5-zigbee-cc2652p-%D0%BA-uart-%D0%BF%D0%BE%D1%80%D1%82%D1%83-tv-box-%D0%BF%D1%80%D0%B8%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8-h96max-%D0%BD/
https://forum.armbian.com/topic/3749-how-to-change-resolution-hdmi-display-armbian527/
https://klipperscreen.readthedocs.io/en/latest/Troubleshooting/Rotation/

#3d принтер, #klipper, #техническое

 0  212
Добавлен 22 май 2024, 27 дней назад

или , чтобы оставлять комментарии