Взаимодействие с E-Stim 2B при обновлении прошивки

С помощью специальной утилит UpLink в повербоксе E-Stim 2B можно обновить прошивку до последней версии. Производитель не выкладывает UpLink в свободный доступ, а продаёт утилиту совместно с кабелем Digital link Interface. Если есть интерфейсный кабель, но нет волшебной утилиты, то можно ли обновить прошивку обходным способом?

Речь в статье пойдёт о взаимодействии загрузчика версии 1.4 и утилиты UpLink версии 2.1. Bootloader 1.4 «зашит» в большинство E-Stim 2B за исключением самых старых, а UpLink 2.1 уже несколько лет не меняет свою версию.

Формат файла прошивки

E-Stim Systems периодически выпускает прошивки для E-Stim 2B и выкладывает их в свободный доступ на своём сайте. Только прошивки эти зашифрованы.

Утилита UpLink сначала расшифровывает прошивку, а только потом отправляет её на подключенный к компьютеру повербокс E-Stim 2B.

Прошивка E-Stim 2B в зашифрованном виде
Прошивка E-Stim 2B в зашифрованном виде

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

Схема шифрования
Схема шифрования

Хоть ключ, которым E-Stim Systems шифрует свои прошивки, держится в секрете, для шифрования / дешифрования прошивок можно воспользоваться моим онлайн инструментом https://tools.sexestim.tk/ , нужный ключ он уже знает.

Зашифрованные прошивки имеют расширение «.2bfx», расшифрованные – «.hex».

Расшифрованные прошивки – это текстовые файлы в формате Intel HEX.

Прошивка в формате Intel HEX
Прошивка в формате Intel HEX

Рекомендую прочить про формат Intel HEX на Википедии https://ru.wikipedia.org/wiki/Intel_HEX .

Структура файла Intel HEX
Структура файла Intel HEX

Bootloader 1.4

Bootloader 1.4 – это небольшая программа, которая записана производителем E-Stim 2B в память микроконтроллера PIC 18F4520-I/P. «Бутлоадер», по-другому «загрузчик», после подачи питания на устройство выполняется первым, и если от загрузчика не потребовалось никаких действии, то он передаёт управление основной прошивке.

E-Stim 2B подключенный к компьютеру
E-Stim 2B подключенный к компьютеру

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

Что бы войти в режим загрузчика, надо:

  1. выключить E-Stim 2B
  2. зажать кнопку Select
  3. с жатой кнопкой Select включить питание
  4. на дисплее E-Stim 2B отобразиться символ «B»

После этого бутлоадер готов к приёму прошивки.

Кнопка Select на E-Stim 2B
Кнопка Select на E-Stim 2B

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

Символ "B" на экране стимулятора E-Stim 2B
Символ «B» на экране стимулятора E-Stim 2B

К слову сказать, Bootloader 1.4 в виде зашифрованного файла доступен для свободного скачивания на сайте E-Stim Systems.

Файл загрузчика зашифрован точно таким же ключом, что и все остальные прошивки для E-Stim 2B, с дешифрованием справится инструмент на https://tools.sexestim.tk/ .

Примечание: Bootloader 1.4 занимает в памяти микроконтроллера адреса с 0000h по 0700h.

Код загрузчика в памяти программ
Код загрузчика в памяти программ

Для чего E-Stim Systems шифрует прошивки?

Если ответить кратко, то шифрование прошивки – это мера, направленная на усложнение копирования прибора сторонними производителями.

При создании E-Stim 2B инженеры потратили силы не только на разработку электрической схемы стимулятора, но и на написание программы микроконтроллера, которая «оживляет» прибор. Без загруженной в микроконтроллер прошивки, E-Stim 2B – это просто нерабочий набор радиоэлементов.

Узнать из чего состоит E-Stim 2B можно разобрав прибор, а вот вытащить программу из микроконтроллера PIC 18F4520-I/P просто так не получиться. Микроконтроллер защищен и прошивку не выдаст.

Схему стимулятора можно скопировать, а вот не имея на руках полноценной (незашифрованной) прошивки, её или придётся разрабатывать самостоятельно, или же отбросить мысли о копировании устройства.

E-stim 2B со снятой крышкой
E-stim 2B со снятой крышкой

E-Stim Systems хочет дать пользователям повербокса E-Stim 2B возможность самостоятельно обновлять прошивку до самой свежей версии. Новая версия прошивки может существенно расширять возможности прибора, добавлять новые функции или режимы стимуляции. При этом производитель не хочет делиться прошивкой с потенциальными копировщиками и облегчать им задачу по созданию клонов.

Вот ля этого и придумали прошивки шифровать, а для загрузки прошивок в стимулятор написали утилиту UpLink, которая знает ключ для дешифрования.

Имея на руках утилиту UpLink загрузить прошивку в «чистый» микроконтроллер PIC 18F4520-I/P не получится, ведь там не бутлоадера. Загрузить сначала бутлоадер в «чистый» микроконтроллер PIC 18F4520-I/P через UpLink также не получится.

Что-либо загрузить в микроконтроллер в E-Stim 2B через утилиту UpLink можно только если в микроконтроллер уже прошит бутлоадер.

Первоначально производитель прошивает бутлоадер в микроконтроллер через программатор, а когда бутлоадер уже сидит в микроконтроллере, то тут уже можно и через UpLink прошивки грузить.

Прошивка микроконтроллера PIC 18F4520-I/P через программатор

Ключ и прочие параметры шифрования мне известны. Был написан онлайн инструмент дешифрования прошивок в формат Intel HEX ( https://tools.sexestim.tk/ ).

Залить бутлоадер и последнюю версию прошивки в микроконтроллер PIC 18F4520-I/P можно с помощью программатора.

Прошивка микроконтроллера PIC 18F4520-I/P через программатор
Прошивка микроконтроллера PIC 18F4520-I/P через программатор

Имея полноценные прошивки Intel HEX и зная схему повербокса E-Stim 2B можно изготовить клон прибора самостоятельно.

Как именно залить прошивку и бутлоадер в микроконтроллер PIC 18F4520-I/P через программатор  – это тема для отдельной статьи. Тут я лишь сообщаю о такой возможности, а эта статья посвящена взаимодействию с бутлоадером.

Команды и действия Bootloader 1.4

Напомню, что для перехода в режим загрузчика надо зажать Select перед включением устройства, на экране отобразиться символ «B».

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

Ответы устройства также завершаются символом возврат каретки CR.

Экран стимулятора в время загрузки прошивки
Экран стимулятора в время загрузки прошивки

На каждую принятую команду E-Stim 2B будет реагировать последовательной сменой символов «―» и «|» на дисплее после символа «B».

Команда запроса версии бутлоадера и прошивки

Команда «V» служит для запроса версии бутлоадера и версии основной программы (если она загружена).

В ответ на запрос «V» прибор вернёт что-то вроде этого:

14:106R

где
14 – это версия 1.4 бутлоадера
106R – это версия 2.106 основной программы

Ответ на команду V в окне терминала
Ответ на команду V в окне терминала

Если основная прошивка не загружена, то устройство вернёт только версию бутлоадера:

14:

Ответ на команду V в окне терминала
Ответ на команду V в окне терминала

Команды изменения памяти программ

Команды изменяющие память начинаются с двоеточия и должны соответствовать формату строк Intel HEX.

Например, команда

:100710000000000000000000046ED8CF05F0E0CF1C

запишет в микроконтроллер 16 байт «0000000000000000046ED8CF05F0E0CF» начиная с адреса 0710h.

Прежде чем выполнить такую команду, бутлоадер проверяет контрольную сумму в соответствии со стандартом Intel HEX, т.е. сумма всех байт должна быть равна 0.

В случае ошибки контрольной суммы, бутлоадер вернет в ответ символ «C».

Если операция завершилась успехом, то бутлоадер, в качестве подтверждения, ответит символом «K».

Примечание. Контрольная сумма проверяется только для команд, содержащих начальный адрес больше 0700h, в прочих случаях ответом на команду всегда будет «K» даже если условие верности контрольной суммы будет нарушено. Возможно это связано с тем, что сам бутлоадер занимает место в памяти до адреса 0700h.

Команда окончания отправки данных

Команда «:00000001FF» сообщает бутлоадеру, что передача данных завершена.

Также как и на все корректно принятые команды Intel HEX, ответом будет символ «K».

Приняв эту команду, бутлоадер пытается передать управление вновь загруженной основной программе (выглядит как перезагрузка устройства с новой прошивкой), если это сделать по каким-то причинам не удалось, то бутлоадер просто перестаёт реагировать на любые вновь поступающие команды, в этом случае требуется выполнить перезагрузку стимулятора вручную.

В стандарте Intel HEX прошивки должны завершаться командой «:00000001FF».

Взаимодействие UpLink версии 2.1 и Bootloader 1.4

Нажав на кнопку Connect, утилита UpLink открывает выбранный порт. В случае успеха, становится доступна кнопка Version.

Отображение версии прошивки и бутлоадера в программе UpLink
Отображение версии прошивки и бутлоадера в программе UpLink

При нажатие на кнопку Version, утилита направляет в стимулятор команду «V», в ответ получает версию бутлоадера и версию текущей установленной прошивки (если она установлена).

Сообщение об установленной версии бутлоадера и прошивки
Сообщение об установленной версии бутлоадера и прошивки
Сообщение об установленной версии бутлоадера и отсутствии прошивки
Сообщение об установленной версии бутлоадера и отсутствии прошивки

Если бутлоадер ответил на «V» чем-то вроде «14:106R», то становится доступна кнопка Transfer. При нажатии на эту кнопку, предлагается выбрать файл прошивки (зашифрованной) с расширением «.2bfx».

Диалог выбора файла прошивки с расширением ".2bfx"
Диалог выбора файла прошивки с расширением «.2bfx»

Далее UpLink расшифровывает прошивку и получает формат Intel HEX. Расшифрованная прошивка присутствует только в оперативной памяти компьютера, сохранить её как файл нельзя.

На основе расшифрованного текста прошивки, вычисляется хеш по алгоритму MD5. Посчитанный MD5 выводится пользователю для ознакомления.

Сообщение UpLink с рассчитанным MD5 прошивки
Сообщение UpLink с рассчитанным MD5 прошивки

После подтверждения пользователем на загрузку прошивки, утилита последовательно отправляет строки на E-Stim 2B.

Каждая отправляемая строка завершается символом возврат каретки CR (не CRLF).

Строки в тексте прошивке, начинающиеся с символа «;», являются комментариями и UpLink их игнорирует и на E-Stim 2B не отправляет.

Пример комментариев
Пример комментариев

На выполнение команд E-Stim 2B требуется некоторое время. Следующая команда не сможет быть принята устройством пока не обработана текущая, поэтому команды должны поступать не непрерывно, а с задержкой.

Утилита Uplink 2.1 делает паузу между отрывками строк прошивки примерно в 310 мс.

Ответ на посланную команду E-Stim 2B должен вернуть не позднее чем через 250 мс, иначе утилита Uplink 2.1 считает, что связь потеряна, выдаёт ошибку «No Response from 2B» и прекращает передачу данных.

Сообщение UpLink об отсутствии ответа от стимулятора
Сообщение UpLink об отсутствии ответа от стимулятора

Если E-Stim 2B вернул ответом «C», что означает ошибку контрольной суммы, то Uplink 2.1 завершает передачу с ошибкой «Checksum Error».

Сообщение UpLink об ошибке контрольной суммы при передачи прошивки
Сообщение UpLink об ошибке контрольной суммы при передачи прошивки

Строка «:00000001FF» – запись конца файла прошивки.

Встретив «:00000001FF», Uplink отправляет эту команду на E-Stim 2B и выдаёт сообщение: «Firmware transfered. Your 2B should now be resetting.»

Сообщение UpLink об окончании загрузки прошивки
Сообщение UpLink об окончании загрузки прошивки

Методика загрузки прошивки без использования утилиты Uplink

Загрузить прошивку в E-Stim 2B можно по следующей методике.

  1. Расшифровать прошивку
  2. Перевести E-Stim 2B в режим загрузчика
  3. Соединить E-Stim 2B кабелем с компьютером
  4. Подключиться терминальной программой к COM-порту на скорости 9600
  5. Отправить файл прошивки на COM-порт с паузой между строками в 310 мс – в 350 мс

 

Загрузка прошивки через программу Tera Term
Загрузка прошивки через программу Tera Term

В качестве терминальной программы предпочитаю использовать Tera Term. Подробная инструкция по загрузке прошивке через программу Tera Term выйдет в отдельной статье.

Оцени полезность этой статьи в комментариях!!!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *