Прошивка и Bootloader ET-312

Любители реверс-инжиниринга просто не могли обойти стороной столь популярный стимулятор ET-312. Всестороннему исследованию со стороны американских инженеров подверглась не только схема прибора, но и микропрограмма контроллера. Благодаря им, например для целей ремонта ET-312, можно взять чистый ATmega16A и залить в него рабочую прошивку.

Прошивка микроконтроллера ET-312 разделена на две части: основную программу и загрузчик (Bootloader). Загрузчик занимает последние 512 байт (256 слов) памяти и служит для самостоятельного обновления пользователем основной программы через кабель сопряжения ET-312 с компьютером (см. кабель ErosLink для ET-312B под лупой).

Про штатное обновление прошивки, в том случае, когда есть рабочий прибор, читайте в статье «Обновление прошивки в ET-312».

Примечание

Возможность самостоятельного обновления прошивок стала доступна в приборах ET-312 с установленной прошивкой не ниже 1.4. Последняя актуальна версия прошивки 1.6.

Для защиты от реверс-инжиниринга, производитель распространяет файлы обновления (расширение .upg) в закодированном виде. Bootloader налету декодирует прошивку, проверяет контрольную сумму, заменяет новой прошивкой старую в памяти микроконтроллера.

В архиве, который можно скачать внизу статьи, лежит файл дампа только бутлоадера и дамп бутлоадера вместе с прошивкой версии 1.6. Если ваша среда разработки требует HEX-формат, то пригодится утилита перевода BIN в HEX (скачать IHEX_Convertor).

Перед заливкой бутлоадера в микроконтроллер, в обязательном порядке следует поправить байт 0x3fff. Назначение этого байта – хранение калибровочного значения внутреннего RC-генератора для работы на частоте 8 МГц.

Установка калибровочного байта
Установка калибровочного байта

Значения будут отличаться для разных микроконтроллеров даже в пределах одной партии. Бутлоадер при запуске считывает байт 0x3fff и копирует его в регистр OSCCAL. Если значение неточно, могут возникнуть различные сбои, связанные с синхронизацией, прерываниями и последовательной связью.

Калибровочный байт в прошивке
Калибровочный байт в прошивке

Заводское калибровочное значение для частоты 8 МГц хранится в четвертом байте строки сигнатуры ATmega16A. Значение этого байта следует скопировать в 0x3fff дампа прошивки и после этого можно залить дамп в микроконтроллер.

Конфигурация микроконтроллера ATmega16A
Конфигурация микроконтроллера ATmega16A

Микроконтроллер ATmega16A в ET-312 прошит на заводе с установленными фьюзами блокировки доступа к считыванию памяти и запрета отладки. Сделано это для защиты от «воровства» прошивки.

Скриншот ниже показывает, какие фьюзы установлены на заводе.

Фьюзы микроконтроллера ATmega16A
Фьюзы микроконтроллера ATmega16A

Примечание

На физическом уровне «прожжённая» перемычка, т.е. ноль, соответствует установленному фьюзу. В интерфейсах различных программ для прошивки установленная галочка может означать как включенный, так и выключенный фьюз. Логику интерфейса обязательно следует уточнить. На скриншотах выше, установленная галочка означает – 0, а снятая – 1.

Справочная информация по фьюзам

BODLEVEL = 0 Порог монитора питания = 4.0 В.
BODEN = 0 Монитор питания включен.
SUT1 = 1
SUT0 = 0
Время старта после подачи питания или сброса 64 мс.
CKSEL3 = 0
CKSEL2 = 1
CKSEL1 = 0
CKSEL0 = 0
Работа от встроенного RC генератора на 8 МГц.
OCDEN = 1 Работа схемы внутреннего отладчика запрещена.
JTAGEN = 1 Работа интерфейса программирования-отладки JTAG запрещена.
SPIEN = 0 Работа интерфейса внутрисхемного программирования по SPI разрешена.
CKOPT = 1 Определяет режим работы встроенного генератора тактовой частоты для работы с кварцевыми резонаторами. В схеме ET-312 кварцевый резонатор отсутствует.
EESAVE = 1 При стирании памяти микроконтроллера программатором, содержимое EEPROM будет также стираться.
BOOTSZ1 = 1
BOOTSZ0 = 0
Размер загрузчика 256 слов.
BOOTRST = 0 Переход к загрузчику после сброса.
BLB12 = 1
BLB11 = 0
Уровень доступа из секции прикладной программы к коду в секции загрузчика. Команда SPM не может писать по адресам, находящимся в пределах секции загрузчика.
BLB02 = 1
BLB01 = 1
Уровень доступа из секции загрузчика к коду в секции прикладной программы. Нет никаких ограничений по доступу к коду, расположенному в секции прикладной программы.
LB2 = 0
LB1 = 0
Запрещены запись и чтение FLASH и EEPROM программатором. Также запрещено изменение конфигурационных ячеек.

 

Скачать загрузчик и микропрограмму 1.6

В дальнейшем планируются статьи:

  • Прошивка ET-312. Декодирование
  • Прошивка ET-312. Модификация

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

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