MKS WiFi для Скруджа

VyacheslavSS
Идет загрузка
Загрузка
14.07.2020
2561
24
Техничка

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

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

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

4

В продолжении темы о моих изысканиях: Sapphire PRO

После изучения прошивки материнской платы MKS Robin Nano, стал понятен протокол ее обмена с модулем WiFi. Наверно эта техническая сторона мало кому интересна, скажу лишь, что сам протокол может быть расширен, а значит и расширен функционал связки MKS Robin Nano + MKS WiFi. Об этом позже.

Если на флеш карту записать файл MksWiFi.bin, то после старта принтер запустит алгоритм прошивки модуля WiFi. Используется стандартный протокол Espressif для esp8266. Значит, мы можем просто подсунуть чистый самодельный модуль, что я и сделал.

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

Хорошо, можно пойти путем длиннее. Дело в том, что модуль esp8266 на основе которого сделан MKS WiFi (к слову просто адаптер в DIP), был спроектирован для OpenSource проектов, а значит не имеет никакой защиты памяти, и все что в ней есть можно считать. Делаем считыватель, дампим память оригинального модуля, прошиваем свой.

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

Другой вопрос - зачем все это делать? Ну во-первых лучший подарок - это подарок сделанный своими руками, а во-вторых - любопытство не порок. Ну и в-третьх цена вопроса 600р или <100.

Пытливый ум повел дальше. Стало интересно, а что же такое китайцы прописали в модуле, чтобы определять оригинальность прошивки? Подробности изучения опущу. Оказалось, что по адресу 0x3fb0c0 они записывают серийный номер модуля - строка из 20 символов, и если ее нет (или она не верна), после подключения модуля к WiFi сети, он отдает на материнскую плату код ошибки, вместо подтверждения подключения. Мой серийный номер выглядит так: HJNLM0002CF********* под звездочками цифры. Найти его можно в оригинальной прошивке где-то в настройках облака. Он в QR код преобразуется.

Судя по тому, что новый модуль с серийным номером со старого начал рабоать нормально в этом серийном номере не содержится ничего, что было бы привязывало прошивку к модулю (например его mac адрес). Я не стал экспериментировать с вариантами изменения серийного модуля ибо цель достигнута, клон создан, минимальные достаточные условия определены. Уже позже я попробовал поменять номер. Все  оказалось в порядке, контрольных сумм тоже нет.

Результатом всего стала доработка в прошивке материнской платы. Теперь она принимает файл MksWifi_Key.bin с серийным номером. То есть, можно вставить в плату совершенно чистый модуль WiFi и он будет прошит как оригинальный с установленным серийным номером.

На этом развлекательная часть была закончена. Копировать чужую интеллектуальную собственность с получением собственной прибыли не хорошо. Прошивка модуля закрытая. Не зря он стоит 600р вместо 100.

Но теперь мы знаем протокол обмена, имеем клон модуля и можем восстановить его в случае ошибок собственного проектирования. Можем притвориться принтером, подключив модуль к компьютерную. Можем притвориться модулем WiFi подключив Cura к собственному прокси. Полноценный стенд для разработки своей WiFI прошивки создан.

Внутри WiFi модуля 3 службы:

  1. Мост WIFI-UART на порту 8080
  2. HTTP сервер на порту 80 для настройки подключения и связи с Cura (методом POST она передает файы)
  3. Обеспечение связи с китайским облаком

Если 1 и 2 понятно, то 3 - "нафига козе баян" и что туда сливается китайцам лишь известно.

В моей прошивке я реализовал 1 и 2. Плюс расширил протокол обмена, добавил туда службу точного времени (NTP). Почему ее? Была заготовка кода, встроить легко, на чем-то надо испытать. Планирую сделать WebDAV, если хватит запала. Но уже сейчас на принтере стоит мой модуль WiFi и на главном меню отображается точное время.

Без подводных камней, конечно же не обошлось. Весть протокол обмена WiFi модуля с материнской платой идет по UART на скорости 115200, но при аплоаде файла материнская плата переключает алгоритм в режим DMA а скорость обмена увеличивает до 1958400. Если раньше, я обращал внимание, что Cura подвислала при передаче, или по факту передачи ничего не происходило, то теперь, так как ошибочные ситуации я обработал, выдаются сообщения о нарушении протокола обмена или долгой задержке при передаче. Последнее регулируется алгоритмом MKS.

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

Моя прошивка для модуля WiFi состоит из 2х файлов: ShWifi_0x00000.bin и ShWifi_0x10000.bin. Собственно и оригинальная из 2х секций объединенных в один файл. Области конфигураций у прошивок не пересекаются, поэтому после установки моей прошивки ключ оригинального модуля WiFi не будет утерян.

Ссылка на прошивки:

https://github.com/vyacheslav-shubin/mks-robin-nano35-binary/tree/master/2020-07-13-snapshot-with-wifi

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

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

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

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

Комментарии

14.07.2020 в 00:23
0

Т.е. для перепрошивки модуля достаточно скинуть на карту два файла ShWifi_0x00000.bin и ShWifi_0x10000.bin ?

14.07.2020 в 01:59
0

Да, и прошивка материнской платы должна быть моя. 

14.07.2020 в 06:51
0

Мда... Но соединение с сетью быстрее происходить не стало...

14.07.2020 в 09:30
0

Я делал аналогичные изыскания :) https://github.com/Sergey1560/esp_firm

Для FB 4S (плата Robin Nano) я сделал модуль для марлина, для быстрой передачи файлов. https://github.com/Sergey1560/Marlin_FB4S/tree/FB4S_WIFI/Marlin/src/module/mks_wifi

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

14.07.2020 в 09:40
0

Писали на esp sdk? 

14.07.2020 в 09:44
0

Вы про мой опыт вообще? Да, был опыт, правда с esp32.

А если про данный проект, то там использована стандартная прошивка MksWifi, а код дописан со стороны stm32, для поддержки этого протокола в марлине. Сделано это для использования свежего марлина на 4S. 

14.07.2020 в 09:58
0

Я не так понял, я подумал что Вы именно для модуля wifi сделали свою прошивку. Хотел предложить объединить наработки

14.07.2020 в 10:57
0

Я изначально планировал сделать для wifi модуля свою прошивку. Точнее использовать ESP3D в качестве web-интерфейса и дописать туда протокол передачи файлов. Но потом понадобилось использовать еще web-камеру и от этой затеи отказался. Реализовал на raspberry zero подключенной проводом, а модуль wifi оставил со штатной прошивкой.

14.07.2020 в 13:15
0

Вот и я хочу туда прицепить либо Pi либо ESP32. Плюс вытащить из модуля I2C для дальнейшего моста материнской платы UART->I2C/GPIO модуля WiFi. Можно будет управлять дополнительными устройствами.

14.07.2020 в 15:37
0

Не проще на малину октопринт приделать и будет и вебкамера и нормальное управление и вебинтерфейс. 

Ковырялся с этими модулями тоже, пришел к выводу что пока все сыро очень, проще реально воспользоваться октопринтом или dwc2.

16.07.2020 в 11:14
0

Доброго дня всем. У кого-нибудь есть опыт подключения октопринта к сапфиру про? Все мои попытки сводятся к очень низкой скорости загрузки файлов. Файл 11 Мбт. Жду, когда пропадет надпись Streaming(((

16.07.2020 в 12:45
0

Если октопринет ничего не знает об особенностях обмена с прошивкой (см выше о переключении скорости), то обмен идет на 115200

17.07.2020 в 19:30
0

У makerbase выложены исходники для mks tft там как раз можно посмотреть протокол обмена, я не думаю что он отличается от платы robin.. я вот кстати в чистую esp заливал прошивку mkswifi , но блин она почему то мне всегда выдавала ошибку на экран по подключению, хотя к сети esp подключалась нормально...так и не победил этот момент...

18.07.2020 в 17:27
0

А Вы читали мою запись?) 

19.07.2020 в 12:14
0

Читал, ток не понял исходники у вас выложены на mks wifi уже с серийным номером ???..

И еще получается что у них уже прошитый кусок памяти заранее ( у оригинальных модулей ) так как если заливать прошивку с сайта у него этого номера не будет ? 

Поэтому и возник вопрос что получается в данной прошивке MksWifi.bin не все данные есть ?

Просто если судить про исходникам то

//connect state  if(msg[6] == 0x0a)  {   wifi_link_state = WIFI_CONNECTED;  }  else if(msg[6] == 0x0e)  {   wifi_link_state = WIFI_EXCEPTION;  }  else  {   wifi_link_state = WIFI_NOT_CONFIG;  }

Тогда можно просто заменить на

//connect state  if(msg[6] == 0x0a || msg[6] == 0x0e)  {   wifi_link_state = WIFI_CONNECTED;  else {   wifi_link_state = WIFI_NOT_CONFIG;  }

И по идее должно будет заработать ?? или там где то еще проверки идут или в самой прошивке esp ?

19.07.2020 в 21:26
0

У меня есть фактически переписанная прошивка материнской платы. Помимо прошивки модуля wifi она может прошить и его серийный номер. Т. Е. Сделать полную рабочую копию. 

Есть и полностью самописная прошивка wifi, о которой речь шла тут. Загрузить ее в модуль можно так же как и оригинальную через материнскую плату. 

20.07.2020 в 03:26
0

А вы случайно не разбирались еще почему принтер игнорирует команду G-code М81 ? Прикол в том что сделал реле, если во время печати зайти в меню принтера и нажать кнопочку автоотключение после печати - то все ок, принтер вырубается. А если дать ему в G-code команду М81 то он ее просто игнорирует. Что там интересного китайцы завернули на этот раз?

20.07.2020 в 22:57
0

Она не реализована у китайцев. Поставьте мою прошивку будет работать и M300

20.07.2020 в 16:27
0

На материнку мне не нужна, прошивка так как у меня не материнка а MKS TFT  экран...

А вот если поделитесь исходником для esp буду очень благодарен, писать самому просто лень...хоть там и не сложно все...

Загрузить в esp это вообще не проблемма..есть загрузчик от той же espressif  да и у меня настроенный eclipse есть для сборки и заливки прошивок ...

20.07.2020 в 23:00
0

Вы можете мою прошивку в esp прошить и штатным способом. Соберите 2 файла в один, и назовите mkswifi.bin, коль сами писать умеете, объяснять как это сделать не надо. 

20.07.2020 в 23:31
0

да это то не проблема (прошить, я же правильно понял из названия файлов , одна часть по 0 адресу шьется , вторая по адресу 10000)...я просто думал если у вас  есть под есп прошивка с исходниками, под esp32 их адаптировать хотел..благо у меня их хватает...в наличии..без дела все равно лежат.. а то с нуля писать не хочется...там тем более я так понял есп файл как то кусками отдает...после передергивания ног ее...насколько я понял из исходников MKS...(смотрел пока так не вникая сильно)

20.07.2020 в 23:44
0

Сначала идет пакет сигнализирующий начало передачи файла. Потом материнская плата переключает uart в режим dma и отдает ему 8 буферов по 1к. Отдельный пин используется для обратной связи, если буферы переполняются. Высокий уровень - требоваеие приостановить пкредачу. Максимальный размер пакета с накладными расходами 1к. Пакеты имеют внутри сквозной порядковый номер. Установленный старший бит в номере пакета означает конец передачи, после чего режим dma выключается. 

27.07.2020 в 16:50
0

При попытке управлять принтером через телнет соедиение ( mks wifi воткнутый в msk tft  ) видно что ктото по дороге не пропускает ряд команд. Например M114  и тд, а другие нормально проходят. Сталкивались с подобным?


И чтобы спокойно использовать клон mks wifi ( в наличии просто   с десяток ESP8822 модулей)  проще в прошивке дисплея вырубить проверку на серийник вообще. А вот где она там закопана это вопрос

28.07.2020 в 21:41
0

Да, так и есть. По дороге идет перехват команд со свойственным всей прошивке копи-пастом реализации. Перехватываются не все команды. Ответы не на все команды уходят в wifi терминал. Могу завтра глянуть, что именно перехватывается. 

По поводу того, что проще ;), попробуйте, перед тем, как делать выводы. Проблемы и решения я описал. 

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

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

Теория вычисления стоимости изделия 3D печати

Всякие полезности

Первые впечатления об eSUN Hard-Tough Resin.

Радиоуправляемая авиамодель распечатанная на 3Д принтере

Лишние поддержки в фотон с

О программном выборе режима StealthChop/SpreadCicle у драйверов TMC (по UART/SPI) в Marlin