MKS Robin. Трогательный Marlin

jmz
Идет загрузка
Загрузка
29.05.2020
4182
14
печатает на FLSUN 3D Metal Frame Prusa i3 DIY KIT
Техничка

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых постах.

Отписаться от уведомлений вы всегда сможете в профиле автора.

23

STM32, Marlin и дивный новый HAL

Предыстория

После переезда на самодельную плату на базе STM32F4 возвращаться к STM32F1 я не планировал, но судьба распорядилась иначе.

Перед китайским новым годом кто-то на Ali решил почистить склад и объявил аттракцион неслыханной щедрости - акриловая дельта EZT-T1 за 70$ да еще и с поставкой со склада в России. В качестве электроники у дельты выступала плата на STM32F103RBT6 с цветным экраном с разрешением 128x128.

Когда я занимался запуском Marlin на “синей таблетке”, то эксперимента ради сборку под дельту я сделал. Для того, что бы прошивка уместилась в 128КБ пришлось отказаться от поддержки экрана и SD карты, что совсем не так интересно, как плата с возможностью автономной печати.И тут нате вам - STM32, те же 128КБ, но с SD картой и цветным экраном. Понятно, что прошивка базируется на каком-нибудь древнем Marlin или Repetier Firmware. Понятно, что меню куцее. Понятно, что без поддержки аппаратного USB и внешним USB-COM преобразователем. Непонятно, как к этому спокойно относится.

Вызов был принят, дельта оплачена и в китае наступил новый год, плавно переходящий в карантин, принудительную самоизоляцию и молчание продавца.

Ну где же добрый доктор? Ну что же он?

Чтобы период вынужденного ожидания не пропал зря, из запасов была извлечена SKR Mini v1.1, купленная когда-то просто так, для коллекции, как первая серийная плата на STM32 сделанная под Marlin 2.0.

Вариант использования HAL_STM32F1 не рассматривался с самого начала, так как размера флеш памяти на такие излишества, как libmapple, катастрофически не хватало.

Сборку Marlin под HAL_STM32 для линейки STM32F1 никто не практиковал, но подобными шаманскими плясками я уже успешно занимался для платы на STM32F407VET6.

После нескольких дней набивания шишек Marlin не только скомпилировался без ошибок, но и отрапортовал на COM порт об успешной загрузке.Интереса ради собрал ту же конфигурацию под HAL_STM32F1.

Полученный результат наглядно объяснил, за что же я так не люблю библиотеки mapple - размер прошивки с новым HAL уменьшился на 30% - со 173 килобайт до 120.

В этот исторический момент автономная дельта на синей таблетке перестала быть больной фантазией и превратилась в извращенную реальность.

Marlin-2.0 скомпилированный под SKR Mini v1.1 (STM32F103RCT6 - 256KБ)

  • математика дельты
  • поддержка SD карт
  • поддержка графического экрана MKS_MINI_12864 и энкодера
  • HAL_STM32F1
  • DATA:    [==        ]  20.3% (used 9976 bytes from 49152 bytes)
  • PROGRAM: [=======   ]  67.6% (used 177180 bytes from 262144 bytes)

Тот же Marlin, но с HAL_STM32

  • DATA:    [=         ]  13.2% (used 6488 bytes from 49152 bytes)
  • PROGRAM: [=====     ]  47.0% (used 123080 bytes from 262144 bytes)

Поскольку резерв памяти для дельты составлял всего 6%, а внутренняя архитектура u8glib была плохо приспособлена  к 32-х битным контроллерам, то вместо допиливания графической подсистемы я решил написать реализацию пользовательского интерфейса под новый тип экрана, взяв за основу код для текстовых экранов - он проще, а от использования u8glib я мечтал отказаться еще со времени нашего второго знакомства.

При первом знакомстве я прикручивал поддержку традиционных 128x64 экраном и отторжения это не вызывало.

Второе знакомство было намного более эмоциональным насыщенным. Ограничение размера передаваемых данных в 255 байт (uint8_t), при работе с экраном 320x240, да еще и в 16-ти битном цвете очень быстро приводит к пониманию скудности своего словарного запаса в той его части, что используется для выражения сильных эмоций.

Не едет...

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

Пришлось совершить набег на радиорынок и раскошелиться на экранчик 160x128 на том же контроллере ST7735, что и в ожидаемой дельте.

SKR Mini использует разные SPI для встроенной карты и для разъемов EXP1/EXP2, что позволяет экрану узурпировать SPI в разъеме EXP2 в личное пользование и использовать DMA для передачи данных в фоновом режиме.

Плата EZT-T1 так же использует разные SPI для SD и экрана, что позволило отказаться от идеи совместного использования SPI в пользу простоты и быстродействия.Поскольку рисование, это не мое от слова совсем, то для картинки и шрифт для нового экрана были позаимствованы от традиционного 12864 интерфейса.

Внутренняя логика работы с экраном отличается кардинально, но визуальных различий получилось совсем немного - более свободное расположение элементов на основном экране, использование цвета для отображения статусов нагревателей и 8 строчек меню на экране вместо 5.

В 128 килобайт влезли математика дельты, SD карта с эмуляцией EEPROM и цветной экран с энкодером. На автокалибровку места уже не осталось, поэтому пришлось применить метод двухступенчатой калибровки - сначала используется прошивка с автокалибровкой, но без SD карты, а потом результаты калибровки заносятся в настройки прошивки с SD картой, но без автокалибровки.

Сова и глобус

Продавец дельт по факту оказался продавцом воздуха и проданного количества принтеров на складе не было. В тематическом сообществе из ста с лишним покупателей принтер получили хорошо если десять. Меня в числе этих счастливчиков не оказалось, поэтому роль полигона для дальнейших экспериментов досталась MKS Robin.

SKR Mini я прошивал напрямую через ST-Link, для Robin такой вариант не подходил.Пару дней пришлось потратить на борьбу с загрузчиком и поиск ошибок в параметрах линковки, но результат того стоил.

Теперь у меня был рабочий код для вывода картинки на экран. Осталось ерунда - эту самую картинку нарисовать. Желательно в приличном качестве.

Идея масштабировать существующий шрифт была отвергнута на входе. А рисование новых иконок в большем разрешении выявило печальный факт, что однобитная графика в сочетании с моими несомненными художественными (от слова худо) талантами на большом экране выглядит недостаточно прекрасно, чтобы преодолеть барьер внутренней самоцензуры. Со шрифтами дело обстояло не сильно лучше, но для начала можно было ограничиться готовыми шрифтами из u8g2, а приступ перфекционизма отложить до решения более насущных проблем.

Самыми удобными для использования оказались иконки от BTT TFT в варианте Material Design. Обесцвеченные, нормированные по яркости фона и сохраненные в 15-ти оттенках серого (4 бита на точку) они занимают немного места, а при использовании динамически генерируемой палитры позволяют выдавать вполне пристойную цветную картинку.

Итоговый результат оказался настолько хорош, что захотелось его потрогать. Для этого меню было сокращено с семи строк до шести, а на освободившемся месте обосновались кнопки навигации.

На экран редактирования, кроме кнопок “больше”, “меньше” и “так сойдет” был добавлен слайдер, для быстрого изменения редактируемого значения.

Элементы на главном экране стали активными и к ним добавилось еще две кнопки - переход в главное меню и печать с SD карты. Последняя активна только если карта есть, а принтер бездельничает.

TL; DR

  • На MKS Robin Marlin работает и его можно потрогать.
  • Если к SKR Mini подключить TFT экран с интерфейсом SPI, то его тоже можно будет потрогать. Но сначала придется его чем-то откалибровать.

Дополнительная информация

  • Поддерживаются как FSMC, так и SPI экраны, но SD карта и экран должны использовать разные шины SPI.
  • Код для работы с SPI тестировался только на F103. На F4 от тоже должен работать, но это еще предстоит проверить.
  • Инициализация FSMC шины пока сделана только для F103Zx. Основная часть кода универсальна, но инициализацию для F103Vx и F4 еще нужно дописать.
  • SDIO на STM32F1 в HAL_STM32 нестабилен. Изначально его совсем не было, пришлось на скорую руку прикрутить однобитный вариант, чтобы хоть как-то тестировать работу с картой. Для печати лучше пока использовать программный SPI.
  • В процессе оптимизации код работы с картинками был много раз переписан и код для экрана 128x128 перестал собираться. Проблема это временная, но сейчас единственный рабочий вариант - это экран 320x240.
  • Картинки хранятся в основной памяти, SPI флеш пока не поддерживается, хотя архитектурно возможность его использования предусмотрена.
  • Есть небольшая вероятность, что NXP выделит человека, портировать код для работы с SPI под LP1768/9. Тогда этот функционал будет доступен и на SKR 1.3/1.4
  • Запрос на включение кода в основной репозиторий отправлен и ожидает рассмотрения.

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых постах.

Отписаться от уведомлений вы всегда сможете в профиле автора.

23
Комментарии к статье

Комментарии

29.05.2020 в 17:14
0

Круто!

29.05.2020 в 17:15
0

Шикарно!

29.05.2020 в 17:22
0

Да это праздник какой-то :)

29.05.2020 в 17:34
0

А я с робином первым успешно попрощался. Точнее камень сдул и надул туда 429. Доработки минимальные, за то камень весчь.

29.05.2020 в 17:44
0

Мне Robin, да и Lerdge тоже не нравятся архитектурно - внешняя микросхема COM/USB не дает возможности использовать принтер в режиме флешки, что сильно замедляет процесс загрузки файлов.
И вентиляторов мало.

29.05.2020 в 18:53
0

А меню свайпами листать или кнопки тыркать? 

29.05.2020 в 20:17
0

Кнопки в меню это постраничная прокрутка и назад.
Пункты меню на текущей странице выбираются методом тыка в нужную строчку.

30.05.2020 в 16:40
0

Привет из чатика)

30.05.2020 в 23:24
0

А что помешало робин через стлинк шить? Ну, кроме желания бутлоадер сохранить.

Да и в случае чего бутлоадер можно слить да восстановить в любое время.

31.05.2020 в 08:17
0

У Robin микроконтроллер заблокирован, слить прошивку с него - это отдельная история

А с загрузчиком все равно пришлось бы разбираться - пользователей у платы много, и большая их часть не будет заливать прошивку через st-link.

jmz
31.05.2020 в 14:33
0

Я не про обычного пользователя, а скорее к тому, что эта история вполне оправдана на этапе разработки ибо задолбаешься бегать с флэшкой после каждой сборки. К тому же бутлоадер вносит свой вклад в этот хаос - оставляет после себя некоторую перефирию инициализированной, что мешает и вынуждает с тем же стлинком сидеть в дебаггере и вылавливать порегистрово что там и где китаец оставил включенным. Не знаю уж повлияло это или нет, но марлинописатели так и забили на eeprom на этих картах, хотя совместная работа i2c с fsmc фиксится в две строчки кода (не считая поддержки самой eeprom нестандартного размера).

Кстати, теперь и клиппер доступен.

31.05.2020 в 15:15
0

Неужели дожили! и у марлина будет наконец нормальный тач!!!?

Являюсь владельцем сапфира с Robin nano. Пользуюсь чуть допиленной прошивкой mks2.0.2.
Марлин не прижился из за интерфейса, как раз.

09.07.2020 в 11:48
0

Так вроде есть уже официальный марлин2,0 для robin 

https://github.com/fenics555/MKS-Robin/tree/master/MKS%20Robin/firmware

Кто пробовал?

09.07.2020 в 12:36
0

Официального в этой версии Marlin только признание MKS, что Marlin на своих платах они приветствуют и за взлом шифрования зла не держат. Это был скользкий вопрос - можно ли на GitHub выкладывать скрипт для шифрования прошивки под платы MKS с проприетарным зарузчиком.


В разделе "Special thanks" написано откуда этот код взялся.


Это старый Marlin с монохромным 128x64 интерфейсом и нарисованными кнопками для эмуляции отсутствующего энкодера. Код очень старый, сейчас, скорее всего, уже не собирается. Поддержкой этой ветки никто не занимается, т.к. все то же самое есть в официальном Marlin - https://github.com/MarlinFirmware/Marlin



Для написания комментариев, пожалуйста, авторизуйтесь.

Читайте в блогах

8 лайфхаков для 3D-печати или основы основ

3D визуализация — Часы

Большая поставка материалов для 3D печати от компании Esun уже на складе!

Выбираем бюджетный 3D-сканер в 2020 году

Поливалки для газона.

Ключик для горячего кубика