С помощью специальной утилит UpLink в повербоксе E-Stim 2B можно обновить прошивку до последней версии. Производитель не выкладывает UpLink в свободный доступ, а продаёт утилиту совместно с кабелем Digital link Interface. Если есть интерфейсный кабель, но нет волшебной утилиты, то можно ли обновить прошивку обходным способом?
Речь в статье пойдёт о взаимодействии загрузчика версии 1.4 и утилиты UpLink версии 2.1. Bootloader 1.4 «зашит» в большинство E-Stim 2B за исключением самых старых, а UpLink 2.1 уже несколько лет не меняет свою версию.
Дополнение от 13.12.2021. В 2020 году вышла новая версия UpLink 2.3. Версия 2.3 поддерживает 64-битные операционные системы. Других принципиальных отличий между версиями 2.1. и 2.3. нет. UpLink версии 2.1 также работает на 64-битной ОС.
Формат файла прошивки
E-Stim Systems периодически выпускает прошивки для E-Stim 2B и выкладывает их в свободный доступ на своём сайте. Только прошивки эти зашифрованы.
Утилита UpLink сначала расшифровывает прошивку, а только потом отправляет её на подключенный к компьютеру повербокс E-Stim 2B.
Прошивки шифруются обратимым алгоритмом RC4. Если пропустить через этот алгоритм некое сообщение задав секретный ключ, то на выходе получится зашифрованный текст. Если теперь пропустить зашифрованный текст через алгоритм ещё раз с этим же ключом, то исходное сообщение будет восстановлено в первозданном виде.
Хоть ключ, которым E-Stim Systems шифрует свои прошивки, держится в секрете, для шифрования / дешифрования прошивок можно воспользоваться моим онлайн инструментом http://tools.estim.win/ , нужный ключ он уже знает.
Зашифрованные прошивки имеют расширение «.2bfx», расшифрованные – «.hex».
Расшифрованные прошивки – это текстовые файлы в формате Intel HEX.
Рекомендую прочить про формат Intel HEX на Википедии https://ru.wikipedia.org/wiki/Intel_HEX .
Bootloader 1.4
Bootloader 1.4 – это небольшая программа, которая записана производителем E-Stim 2B в память микроконтроллера PIC 18F4520-I/P. «Бутлоадер», по-другому «загрузчик», после подачи питания на устройство выполняется первым, и если от загрузчика не потребовалось никаких действии, то он передаёт управление основной прошивке.
Бутлоадер умеет принимать прошивку извне и загружать её в микроконтроллер. Бутлоадер даже может заменить ту область памяти, в которой находиться сам, т.е. с помощью бутлоадера можно обновить бутлоадер.
Что бы войти в режим загрузчика, надо:
- выключить E-Stim 2B
- зажать кнопку Select
- с жатой кнопкой Select включить питание
- на дисплее E-Stim 2B отобразиться символ «B»
После этого бутлоадер готов к приёму прошивки.
Если при включении питания кнопка Select не была зажата, то бутлоадер тут же инициализирует работу основной прошивки и пользователь даже не замечает, что в устройстве сидит какой-то там загрузчик.
К слову сказать, Bootloader 1.4 в виде зашифрованного файла доступен для свободного скачивания на сайте E-Stim Systems.
Файл загрузчика зашифрован точно таким же ключом, что и все остальные прошивки для E-Stim 2B, с дешифрованием справится инструмент на http://tools.estim.win/ .
Примечание: Bootloader 1.4 занимает в памяти микроконтроллера адреса с 0000h по 0700h.
Для чего E-Stim Systems шифрует прошивки?
Если ответить кратко, то шифрование прошивки – это мера, направленная на усложнение копирования прибора сторонними производителями.
При создании E-Stim 2B инженеры потратили силы не только на разработку электрической схемы стимулятора, но и на написание программы микроконтроллера, которая «оживляет» прибор. Без загруженной в микроконтроллер прошивки, E-Stim 2B – это просто нерабочий набор радиоэлементов.
Узнать из чего состоит E-Stim 2B можно разобрав прибор, а вот вытащить программу из микроконтроллера PIC 18F4520-I/P просто так не получиться. Микроконтроллер защищен и прошивку не выдаст.
Схему стимулятора можно скопировать, а вот не имея на руках полноценной (незашифрованной) прошивки, её или придётся разрабатывать самостоятельно, или же отбросить мысли о копировании устройства.
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 ( http://tools.estim.win/ ).
Залить бутлоадер и последнюю версию прошивки в микроконтроллер 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 основной программы
Если основная прошивка не загружена, то устройство вернёт только версию бутлоадера:
14:
Команды изменения памяти программ
Команды изменяющие память начинаются с двоеточия и должны соответствовать формату строк 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.
При нажатие на кнопку Version, утилита направляет в стимулятор команду «V», в ответ получает версию бутлоадера и версию текущей установленной прошивки (если она установлена).
Если бутлоадер ответил на «V» чем-то вроде «14:106R», то становится доступна кнопка Transfer. При нажатии на эту кнопку, предлагается выбрать файл прошивки (зашифрованной) с расширением «.2bfx».
Далее UpLink расшифровывает прошивку и получает формат Intel HEX. Расшифрованная прошивка присутствует только в оперативной памяти компьютера, сохранить её как файл нельзя.
На основе расшифрованного текста прошивки, вычисляется хеш по алгоритму MD5. Посчитанный 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» и прекращает передачу данных.
Если E-Stim 2B вернул ответом «C», что означает ошибку контрольной суммы, то Uplink 2.1 завершает передачу с ошибкой «Checksum Error».
Строка «:00000001FF» – запись конца файла прошивки.
Встретив «:00000001FF», Uplink отправляет эту команду на E-Stim 2B и выдаёт сообщение: «Firmware transfered. Your 2B should now be resetting.»
Методика загрузки прошивки без использования утилиты Uplink
Загрузить прошивку в E-Stim 2B можно по следующей методике.
- Расшифровать прошивку
- Заменить в файле прошивке символы возврата каретки «CRLF» на «CR» («\r\n» на «\r»)
- Перевести E-Stim 2B в режим загрузчика
- Соединить E-Stim 2B кабелем с компьютером
- Подключиться терминальной программой к COM-порту на скорости 9600
- Отправить файл прошивки на COM-порт с паузой между строками в 310 мс – в 350 мс
В качестве терминальной программы предпочитаю использовать Tera Term. Подробная инструкция по загрузке прошивке через программу Tera Term описана в отдельной статье.
Оцени полезность этой статьи в комментариях!!!
Добрый день. А когда выйдет статья Подробная инструкция по загрузке прошивке через программу Tera Term?
Скоро…. Ждите…
Уважаемый админ, подскажите, где скачать утилиту Uplink 2.3? Или можете поделиться? Хочу поэкспериментировать с ней.
Если вы купили оригинальный кабель «Digital link Interface» у производителя стимулятора, то надо написать в тех.поддержку, и они вышлют вам утилиту последней версии. В папблике этой утилиты нет. Для обновления прошивки можно обойтись и без Uplink, изучайте материалы на сайте, например статью «Инструкция по обновлению E-Stim 2B без использования утилиты UpLink».
Есть еще одна команда, если в терминале отправить ~ (тильда) 2B должен ответить с кодом. Это внутренняя контрольная сумма, поэтому она указывает на наличие повреждений при загрузке он должен состоять из 6 или 8 цифр.