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

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

2 ноября 2015
А китайским можно считать?
4 ноября 2015
вот для сравнения с аркадии
28 ноября 2015
Если я правильно понял то должно быть 0870. 17FF. и 1860. FFFF.
28 ноября 2015

посмотрел по скорому, начало конфига идет с адреса AC00 конец F3F0 (по крайней мере если судить по тем файлам что ты мне выслал), как записывать вручную без «склеивания» прошивки знаешь? то есть записать не всю прошивку в процессор а только нужную часть ее? или как «склеить» ее без помощи сайта, вручную на компьютере?

29 ноября 2015
забыл написать в этом куске он хранится MC9S08AW48 5M75B (1860. FFFF)
29 ноября 2015

Все сделал по инструкции, а строчка кода такая — S1231A4007A807F3084E08EB0850086E090008A408C808D308D808E408E708E9FFFFFFFFBA Похоже длинновата.

15 октября 2015

С этой строкой всё в порядке, всё в полном соответствии со стандартом s19.
S — стартовый символ
1- тип поля (данные)
23 — количество байтов (учитываются все: адрес, данные, контрольная сумма). 23 — в шестнадцатиричной системе, в десятичной будет 35 байтов.
1A40 — адрес расположения строки данных.
07A807F3084E08EB0850086E090008A408C808D308D808E408E708E9FFFFFFFF — сами данные
BA — контрольная сумма для проверки целостности данных.

16 октября 2015

Это же s19. Дамп можно вообще в одну строчку записать 🙂
В строке ровно 32 байта данных — как раз две привычных всем шестнадцатибайтных строки.
Порекомендуйте пользователям для анализа считывать в MemoryDump только конфиг, если целостность блоков Soft не проверяется.
Start — 1A00
Stop — 39FF
Wight — 1
Убрать галку на Keep empty SREC

17 октября 2015

Установил прогу USBDM 4.12 но так и не нашол в её каталоге прошу USBDM memory dump. Что я не так делаю, подскажите пожалуйста.

21 октября 2015
В меню программатора предпоследний пункт, на скрине указан курсором.
21 октября 2015

Попробуйте скачать. Но на счёт драйверов которые нужны приложению ничего сказать не могу. Один совет в свойствах файла выставьте галку запускать в режиме совместимости с вин7 (если таковое там имеется, в восьмёркой, а тем более с десяткой не дружу).

21 октября 2015
Не могу понять что делаю не так вроде все по инструкции делаю
28 октября 2015

Ну слил я прошивку Memory Dampom , переконвертировал реконвертером на сайте. Проверил он лайн сервисом а там тока модель и продуктовый номер. Какая мне как ремонтнику польза я не программист я инженер эелектромеханик .Че вручную в текстаре ошибки смотреть что ли из файла ? Так предлагает «хозяин » сайта. Не походу копить деньги надо и на рмбт в очередь к Анди за ключом тут чудес не будет.

Как прочитать прошивку из микроконтроллера. Краткий ликбез.


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

2 ноября 2015

Всем доброго дня! После установки v 4.12.1.30 на Windows HP, окно запущенной программы выглядит так. Ребята, можно это привести к нормальному виду, или она на ХРюше,в принципе работать не должна?

2 ноября 2015
4 ноября 2015
А как считывать с етого зверя обясните пожалуста.
28 ноября 2015
а что там за процессор? посмотреть по даташиту адреса прошивки и считать ее
28 ноября 2015
вот думаю по аналогии поймете какие адреса считать
28 ноября 2015

Пробовал считивать и конвертировать на конвертерею. судя по всему чтото неправильно так как не получаетса конвертировать прошывкую.

28 ноября 2015

чем конвертировать? чуть подробнее поясни. Как я понмиаю конвертация это преобразование прошивки например из S19 в BIN

28 ноября 2015
Онлайн конвертором который есьть на єтом сайте только не в bin a eep
28 ноября 2015

Такойже прощ и на модулях от вирпула WAVE там совсем непонятно мне что туда зашыто ведь там пошивка на отдельном флеш

28 ноября 2015

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

28 ноября 2015
Полностю прав познания в етой области маловаты поетому я и спрашываю .
28 ноября 2015

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

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

В предыдущей статье мы разбирались с Vcc-glitch-атаками при помощи ChipWhisperer. Нашей дальнейшей целью стало поэтапное изучение процесса считывания защищенной прошивки микроконтроллеров. С помощью подобных атак злоумышленник может получить доступ ко всем паролям устройства и программным алгоритмам. Яркий пример – взлом аппаратного криптокошелька Ledger Nano S с платой МК STM32F042 при помощи Vcc-glitch-атак.

Интересно? Давайте смотреть под кат.

О возможности считывания защищенной прошивки мы узнали из статьи, в которой приведены результаты выполнения Vcc-glitch-атаки – обхода байта защиты RDP через масочный загрузчик (bootloader) для нескольких микроконтроллеров (далее – МК). Также рекомендуем к прочтению статью о взломе ESP32.

Теоретической базой исследования послужило руководство успешного считывания защищенной прошивки для LPC1114 через масочный загрузчик с использованием ChipWhisperer.

Так же, как и в первой статье, мы решили проводить эксперименты на плате МК STM32F103RBT6:

Возможность записи данных в сектор флеш-памяти и RAM-памяти или их чтения, а также выполнения других действий с памятью МК определяется значением байта защиты (для STM32 – RDP). Для разных МК значения и назначение байтов защиты, а также алгоритм их проверки различается.

Аппаратная настройка

Приступим к проведению эксперимента. Для начала необходимо подключить ChipWhisperer к МК согласно рисунку:

Схема подключения ChipWhisperer к STM32 для считывания защищенной прошивки через масочный загрузчик

На схеме зачеркнуты элементы, которые следует удалить из платы STM32F103RBT6 (в отличие от стандартного подключения МК). Стрелками обозначены места подключения ChipWhisperer, а подписями – его пины.

Наличие внешнего кварца, представленного на схеме, не обязательно, поскольку при работе с масочным загрузчиком плата МК STM32F103RBT6 использует внутренний CLOCK с частотой 24 МГц, поэтому синхронизация между ChipWhisperer и МК отсутствует.

Перейдем к настройке ChipWhisperer. Как уже было отмечено выше, рекомендуемая частота работы ChipWhisperer – 24 МГц (или другое кратное значение). Чем выше кратность этой частоты, тем точнее можно настроить момент атаки. Из-за отсутствия синхронизации подбор параметра scope.glitch.offset необязателен, ему можно присвоить любое значение.

Параметры scope.glitch.repeat и scope.glitch.width необходимо подбирать в зависимости от установленной частоты ChipWhisperer. При большом значении частоты все кратковременные импульсы, количество которых устанавливается при помощи scope.glitch.repeat, сливаются в один длительный импульс. Поэтому можно подбирать значение параметра scope.glitch.width, а scope.glitch.repeat зафиксировать, либо наоборот. Мы обнаружили, что оптимальная длительность импульса должна составлять около 80 нс (определяется как ширина импульса на его полувысоте).

Осталось подобрать значение параметра scope.glitch.ext_offset.

Подбор scope.glitch.ext_offset

Сначала необходимо выбрать момент атаки. Согласно схеме, представленной в документе компании STM, проверка значения байта защиты выполняется после получения запроса на чтение данных сектора флеш-памяти:

Алгоритм ответа на запрос о чтении данных сектора флеш-памяти

Чтобы удостовериться в верности такой схемы проверки, мы считали исполняемый код загрузчика подобного МК без защиты RDP через ST-Link. На рисунках ниже показаны части алгоритма обработки команды Read Memory command.

Общий вид обработки команды чтения памяти (хорошо видны вызов функции проверки RDP и посылка NACK в случае неудачной проверки)

Тело функции проверки RDP

Обратим внимание на тело функции проверки RDP: видно, что происходит чтение регистра по адресу 0x40022000 + 0x1C , логический сдвиг на 30 разрядов и ветвление. Из документации PM0075 Programming manual (STM32F10xxx Flash memory microcontrollers) становится понятно, что 0x40022000 – это базовый адрес контроллера flash memory, а 0x1C – это смещение регистра FLASH_OBR, в котором нас интересует второй бит RDPRT: Read protection, в котором содержится статус защиты RDP.

Необходимый момент проведения атаки – отработка инструкции LDR (загрузки из памяти). Эта инструкция располагается между запросом на чтение прошивки (отправление байта 0x11 с контрольной суммой 0xEE ) и ответом ACK / NOACK МК по UART. Для того чтобы визуально зафиксировать этот момент, необходимо подключить осциллограф к UART1_RX (пин PA10) и UART1_TX (пин PA9), а затем отслеживать изменение напряжения по UART1. В результате осциллограмма атаки по питанию с подобранным значением scope.glitch.ext_offset должна выглядеть примерно так:

Выбор момента проведения атаки

Скрипт считывания прошивки

Теперь необходимо указать момент срабатывания триггера CW_TRIG в коде Python с целью перехвата момента передачи контрольной суммы по UART1_RX. У ChipWhisperer есть библиотека для общения с масочным загрузчиком МК STM32. В штатном режиме эта библиотека используется для загрузки на МК прошивок из руководств при помощи класса class STM32FSerial(object) , расположенного в файле programmer_stm32fserial.py по пути software/chipwhisperer/hardware/naeusb/ . Для активации срабатывания триггера необходимо скопировать этот класс в главный исполняемый скрипт, чтобы метод класса CmdGeneric(self, cmd) стал глобально доступным, и добавить команду scope.arm() до передачи контрольной суммы (0xEE) запроса на считывание сектора памяти. Итоговый класс приведен в спойлере ниже.

Следует обратить внимание на то, что масочный загрузчик STM32F1хх позволяет считывать за один запрос не более 256 байт прошивки из указанного сектора флеш-памяти. Поэтому при считывании всей прошивки МК необходимо в ходе Vcc-glitch-атаки выполнить несколько запросов на чтение. Затем полученные 256 байт следует разбить на восемь 32-байтных массивов и сформировать из них файл формата HEX.

Настройка параметров ChipWhisperer завершена. Итоговый скрипт на считывание прошивки выглядит следующим образом:

Все закомментированные сообщения print() после строчки except Exception as помогают отслеживать состояние МК при поиске оптимальных параметров glitch-импульса. Для отслеживания конкретного состояния МК достаточно раскомментировать необходимое сообщение print() .

Результаты считывания

На видео продемонстрирована загрузка прошивки на МК через программатор ST-LINK, перевод RDP в состояние защиты и последующее считывание прошивки:

Успешному проведению Vcc-glitch-атаки могут помешать следующие ошибки:

• считывание неверного сектора памяти;

• самопроизвольное удаление прошивки.

Избежать подобных ошибок поможет точный выбор момента атаки путем увеличения частоты работы ChipWhisperer.

После разработки и отладки алгоритма считывания защищенной прошивки мы провели тестовое считывание прошивки программатора ST-LINK-V2.1, который работает на МК STM32F103CBT6. Считанную прошивку мы зашили на «чистый» МК STM32F103CBT6 и установили его вместо заводского. В результате ST-LINK-V2.1 с замененным МК работал в нормальном режиме, будто подмены не было.

Также мы попробовали провести серию атак на STM32F303RCT7. Этот МК в ходе атаки вел себя идентично STM32F103RBT6, но ответ на запрос чтения памяти содержал байт, равный 0х00, что не совпадало с ожидаемым нами результатом. Причина такой неудачи заключалась в более сложном и развитом принципе организации защиты этих МК.

В МК STM32F1xx существует два состояния защиты: защита выключена (Level 0) и включена (Level 1). В старших моделях предусмотрено три состояния защиты: защита отключена (Level 0, RDP = 0x55AA), защита флеш- и SRAM-памяти (Level 2, RDP = 0x33CC) и защита только флеш-памяти (Level 1, RDP принимает любые значения, отличные от 0x55AA и 0x33CC). Поскольку Level 1 может принимать множество значений RDP, установить Level 0 достаточно тяжело. С другой стороны, существует возможность понижения уровня защиты с Level 2 на Level 1 сбиванием одного бита в байте RDP (показано на рисунке ниже), что открывает доступ к SRAM-памяти.

Сравнение значений RDP для разных уровней защиты прошивки

Остается только понять, как этим может воспользоваться злоумышленник. Например, с помощью метода CBS (Cold-Boot Stepping), описанного в этой статье. Этот метод основан на поэтапном снимке состояния SRAM-памяти (периодичность выполнения каждого снимка была в районе микросекунды) после загрузки МК с целью получения ключей шифрования, скрытых паролей или любой другой ценной информации. Авторы предполагают, что метод CBS сработает на всех сериях МК STM32.

Выводы

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

Vcc-glitch-атаки опасны тем, что от них сложно защититься. Для уменьшения вероятности успешного проведения подобных атак предлагается использовать МК с более высоким уровнем защиты.

Raccoon Security – специальная команда экспертов НТЦ «Вулкан» в области практической информационной безопасности, криптографии, схемотехники, обратной разработки и создания низкоуровневого программного обеспечения.

Как считать прошивку Arduino через UART

Для того, чтобы считать прошивку, дамп из Arduino через UART TTL, собственно, для этого нужен преобразователь usb — uart ( CP2102 Orange Pi Zero ) .Как подключить и узнать порт написано здесь:

Далее скачиваем консольную программу avrdude:

Зачастую при попытке считать прошивку с Ардуино появляются ошибки:

avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x12

Это связано со скоростью передачи данных, скорость передачи данных необходимо снизить до 19200 бод.

Исправили скорость до 19200 бод, появляется ошибка, вроде:

avrdude: Device signature = 0x1e9406 (probably m168)
avrdude: Expected signature for ATmega168P is 1E 94 0B

Это связано с тем, что в выбранный микроконтроллер прошит загрузчик Arduino и сигнатура чипа не совпадает.Чтобы это обойти необходимо использовать флаг -F , который отменяет проверку сигнатуры чипа.

Итого, чтобы считать прошивку, необходимо выполнить:

1.Распаковать архив avrdude

avrdude -F -p m168p -c arduino -b 19200 -P COM7 -v -U flash:r:flash.hex:i

и переименовать его в read_firm.bat

-F — не проверять сигнатуруподпись чипа

-p m168p — конкретный микроконтроллер, в наше случает ATMEGA168

-c arduino — выбор программатора, программатор arduino, представляет из себя протокол STK500v1

-b 19200 — выбор скорости передачи данных, в бодах

-P COM7 — выбор порта на котором сидит UART, у вас будет свой порт

-v Вывести подробную информацию

-U flash:r:flash.hex:r — U — команда программирования, здесь flash — означает выбрать память из flash(еще может быть eeprom, фьюзы и т.д.).Буква r — означает прочитать флэш память(сокращение от read), «flash.hex» — имя файла, который создастся при чтении памяти flash.i — означает записать файл в формате Intel HEX, а r(не путать с командой чтения) записать файл в формате дампа, то есть так, как прочитано.

3.Запустить файл read_firm.bat, после чего пойдет процесс считывания содержимого flash-памяти.Файл сохранится рядом с программой avrdude с именем flash.hex.

Считывание защищенной прошивки из флеш-памяти STM32F1xx с использованием ChipWhisperer

В предыдущей статье мы разбирались с Vcc-glitch-атаками при помощи ChipWhisperer. Нашей дальнейшей целью стало поэтапное изучение процесса считывания защищенной прошивки микроконтроллеров. С помощью подобных атак злоумышленник может получить доступ ко всем паролям устройства и программным алгоритмам. Яркий пример – взлом аппаратного криптокошелька Ledger Nano S с платой МК STM32F042 при помощи Vcc-glitch-атак.

Интересно? Давайте смотреть под кат.

О возможности считывания защищенной прошивки мы узнали из статьи, в которой приведены результаты выполнения Vcc-glitch-атаки – обхода байта защиты RDP через масочный загрузчик (bootloader) для нескольких микроконтроллеров (далее – МК). Также рекомендуем к прочтению статью о взломе ESP32.

Теоретической базой исследования послужило руководство успешного считывания защищенной прошивки для LPC1114 через масочный загрузчик с использованием ChipWhisperer.

Так же, как и в первой статье, мы решили проводить эксперименты на плате МК STM32F103RBT6:

Возможность записи данных в сектор флеш-памяти и RAM-памяти или их чтения, а также выполнения других действий с памятью МК определяется значением байта защиты (для STM32 – RDP). Для разных МК значения и назначение байтов защиты, а также алгоритм их проверки различается.

Аппаратная настройка

Приступим к проведению эксперимента. Для начала необходимо подключить ChipWhisperer к МК согласно рисунку:

Схема подключения ChipWhisperer к STM32 для считывания защищенной прошивки через масочный загрузчик

На схеме зачеркнуты элементы, которые следует удалить из платы STM32F103RBT6 (в отличие от стандартного подключения МК). Стрелками обозначены места подключения ChipWhisperer, а подписями – его пины.

Наличие внешнего кварца, представленного на схеме, не обязательно, поскольку при работе с масочным загрузчиком плата МК STM32F103RBT6 использует внутренний CLOCK с частотой 24 МГц, поэтому синхронизация между ChipWhisperer и МК отсутствует.

Перейдем к настройке ChipWhisperer. Как уже было отмечено выше, рекомендуемая частота работы ChipWhisperer – 24 МГц (или другое кратное значение). Чем выше кратность этой частоты, тем точнее можно настроить момент атаки. Из-за отсутствия синхронизации подбор параметра scope.glitch.offset необязателен, ему можно присвоить любое значение.

Параметры scope.glitch.repeat и scope.glitch.width необходимо подбирать в зависимости от установленной частоты ChipWhisperer. При большом значении частоты все кратковременные импульсы, количество которых устанавливается при помощи scope.glitch.repeat, сливаются в один длительный импульс. Поэтому можно подбирать значение параметра scope.glitch.width, а scope.glitch.repeat зафиксировать, либо наоборот. Мы обнаружили, что оптимальная длительность импульса должна составлять около 80 нс (определяется как ширина импульса на его полувысоте).

Осталось подобрать значение параметра scope.glitch.ext_offset.

Подбор scope.glitch.ext_offset

Сначала необходимо выбрать момент атаки. Согласно схеме, представленной в документе компании STM, проверка значения байта защиты выполняется после получения запроса на чтение данных сектора флеш-памяти:

Алгоритм ответа на запрос о чтении данных сектора флеш-памяти

Чтобы удостовериться в верности такой схемы проверки, мы считали исполняемый код загрузчика подобного МК без защиты RDP через ST-Link. На рисунках ниже показаны части алгоритма обработки команды Read Memory command.

Общий вид обработки команды чтения памяти (хорошо видны вызов функции проверки RDP и посылка NACK в случае неудачной проверки)

Тело функции проверки RDP

Обратим внимание на тело функции проверки RDP: видно, что происходит чтение регистра по адресу 0x40022000 + 0x1C , логический сдвиг на 30 разрядов и ветвление. Из документации PM0075 Programming manual (STM32F10xxx Flash memory microcontrollers) становится понятно, что 0x40022000 – это базовый адрес контроллера flash memory, а 0x1C – это смещение регистра FLASH_OBR, в котором нас интересует второй бит RDPRT: Read protection, в котором содержится статус защиты RDP.

Необходимый момент проведения атаки – отработка инструкции LDR (загрузки из памяти). Эта инструкция располагается между запросом на чтение прошивки (отправление байта 0x11 с контрольной суммой 0xEE ) и ответом ACK / NOACK МК по UART. Для того чтобы визуально зафиксировать этот момент, необходимо подключить осциллограф к UART1_RX (пин PA10) и UART1_TX (пин PA9), а затем отслеживать изменение напряжения по UART1. В результате осциллограмма атаки по питанию с подобранным значением scope.glitch.ext_offset должна выглядеть примерно так:

Выбор момента проведения атаки

Скрипт считывания прошивки

Теперь необходимо указать момент срабатывания триггера CW_TRIG в коде Python с целью перехвата момента передачи контрольной суммы по UART1_RX. У ChipWhisperer есть библиотека для общения с масочным загрузчиком МК STM32. В штатном режиме эта библиотека используется для загрузки на МК прошивок из руководств при помощи класса class STM32FSerial(object) , расположенного в файле programmer_stm32fserial.py по пути software/chipwhisperer/hardware/naeusb/ . Для активации срабатывания триггера необходимо скопировать этот класс в главный исполняемый скрипт, чтобы метод класса CmdGeneric(self, cmd) стал глобально доступным, и добавить команду scope.arm() до передачи контрольной суммы (0xEE) запроса на считывание сектора памяти. Итоговый класс приведен в спойлере ниже.

Класс для общения ChipWhisperer с STM32
import time import sys import logging from chipwhisperer.common.utils import util from chipwhisperer.hardware.naeusb.programmer_stm32fserial import supported_stm32f from chipwhisperer.capture.api.programmers import Programmer # class which can normally using internal CW library for reading STM32 firmware by UART class STM32Reader(Programmer): def __init__(self): super(STM32Reader, self).__init__() self.supported_chips = supported_stm32f self.slow_speed = False self.small_blocks = True self.stm = None def stm32prog(self): if self.stm is None: stm = self.scope.scopetype.dev.serialstm32f else: stm = self.stm stm.slow_speed = self.slow_speed stm.small_blocks = self.small_blocks return stm def stm32open(self): stm32f = self.stm32prog() stm32f.open_port() def stm32find(self): stm32f = self.stm32prog() stm32f.scope = self.scope sig, chip = stm32f.find() def stm32readMem(self, addr, lng): stm32f = self.stm32prog() stm32f.scope = self.scope #answer = stm32f.readMemory(addr, lng) answer = self.ReadMemory(addr, lng) return answer def stm32GetID(self): stm32f = self.stm32prog() stm32f.scope = self.scope answer = stm32f.cmdGetID() return answer # Needed for connection to STM after reload by reset_target(scope) method def FindSTM(self): #setup serial port (or CW-serial port?) stm32f = self.stm32prog() try: stm32f.initChip() except IOError: print(«Failed to detect chip. Check following: «) print(» 1. Connections and device power. «) print(» 2. Device has valid clock (or remove clock entirely for internal osc).») print(» 3. On Rev -02 CW308T-STM32Fx boards, BOOT0 is routed to PDIC.») raise boot_version = stm32f.cmdGet() chip_id = stm32f.cmdGetID() for t in supported_stm32f: if chip_id == t.signature: # print(«Detected known STMF32: %s» % t.name) stm32f.setChip(t) return chip_id, t # print(«Detected unknown STM32F ID: 0x%03x» % chip_id) return chip_id, None

Следует обратить внимание на то, что масочный загрузчик STM32F1хх позволяет считывать за один запрос не более 256 байт прошивки из указанного сектора флеш-памяти. Поэтому при считывании всей прошивки МК необходимо в ходе Vcc-glitch-атаки выполнить несколько запросов на чтение. Затем полученные 256 байт следует разбить на восемь 32-байтных массивов и сформировать из них файл формата HEX.

Код HEX-конвертера и вспомогательные функции
def int2str_0xFF(int_number, number_of_bytes): return ‘X>’.format(int_number,number_of_bytes_in_string) def data_dividing_from_256_to_32_bytes (data_to_divide, mem_sector, mem_step=32): if mem_sector > 0xFFFF: mem_conversion = mem_sector >> 16 mem_conversion = mem_sector — (mem_conversion > 20) > i*4 temp_addr_string -= ((temp_addr_string >> i*4) > 8) + 1 crcacc = (crcacc_2nd_symbol

Настройка параметров ChipWhisperer завершена. Итоговый скрипт на считывание прошивки выглядит следующим образом:

# string of start HEX file Start_of_File_Record = ‘:020000040800F2’ # string of end HEX file End_of_File_Record = ‘:00000001FF’ length_of_sector = 256 if length_of_sector % 4 != 0: sys.exit(‘length_of_sector must be equal to 4’) output_to_file_buffer = » output_to_file_buffer += Start_of_File_Record + ‘n’ mem_current = mem_start while mem_current < mem_stop: # flush the garbage from the computer’s target read buffer target.ser.flush() # run aux stuff that should run before the scope arms here reset_target(scope) # initialize STM32 after each reset prog.FindSTM() try: # reading of closed memory sector data = prog.stm32readMem(mem_current, length_of_sector) except Exception as message: message = str(message) if «Can’t read port» in message: # print(‘Port silence’) pass elif ‘Unknown response. 0x11: 0x0’ in message: # print(‘Crashed. Reload!’) pass elif ‘NACK 0x11’ in message: # print(‘Firmware is closed!’) pass else: # print(‘Unknown error:’, message, scope.glitch.offset, scope.glitch.width, scope.glitch.ext_offset) pass else: data_to_out = data_dividing_from_256_to_32_bytes (data, mem_current) print(data_to_out) output_to_file_buffer += data_to_out mem_current += length_of_sector output_to_file_buffer += End_of_File_Record + ‘n’ send_to_file(output_to_file_buffer, File_name, directory)

Все закомментированные сообщения print() после строчки except Exception as помогают отслеживать состояние МК при поиске оптимальных параметров glitch-импульса. Для отслеживания конкретного состояния МК достаточно раскомментировать необходимое сообщение print() .

Результаты считывания

На видео продемонстрирована загрузка прошивки на МК через программатор ST-LINK, перевод RDP в состояние защиты и последующее считывание прошивки:

Успешному проведению Vcc-glitch-атаки могут помешать следующие ошибки:

• считывание неверного сектора памяти;

• самопроизвольное удаление прошивки.

Избежать подобных ошибок поможет точный выбор момента атаки путем увеличения частоты работы ChipWhisperer.

После разработки и отладки алгоритма считывания защищенной прошивки мы провели тестовое считывание прошивки программатора ST-LINK-V2.1, который работает на МК STM32F103CBT6. Считанную прошивку мы зашили на «чистый» МК STM32F103CBT6 и установили его вместо заводского. В результате ST-LINK-V2.1 с замененным МК работал в нормальном режиме, будто подмены не было.

Также мы попробовали провести серию атак на STM32F303RCT7. Этот МК в ходе атаки вел себя идентично STM32F103RBT6, но ответ на запрос чтения памяти содержал байт, равный 0х00, что не совпадало с ожидаемым нами результатом. Причина такой неудачи заключалась в более сложном и развитом принципе организации защиты этих МК.

В МК STM32F1xx существует два состояния защиты: защита выключена (Level 0) и включена (Level 1). В старших моделях предусмотрено три состояния защиты: защита отключена (Level 0, RDP = 0x55AA), защита флеш- и SRAM-памяти (Level 2, RDP = 0x33CC) и защита только флеш-памяти (Level 1, RDP принимает любые значения, отличные от 0x55AA и 0x33CC). Поскольку Level 1 может принимать множество значений RDP, установить Level 0 достаточно тяжело. С другой стороны, существует возможность понижения уровня защиты с Level 2 на Level 1 сбиванием одного бита в байте RDP (показано на рисунке ниже), что открывает доступ к SRAM-памяти.

Сравнение значений RDP для разных уровней защиты прошивки

Остается только понять, как этим может воспользоваться злоумышленник. Например, с помощью метода CBS (Cold-Boot Stepping), описанного в этой статье. Этот метод основан на поэтапном снимке состояния SRAM-памяти (периодичность выполнения каждого снимка была в районе микросекунды) после загрузки МК с целью получения ключей шифрования, скрытых паролей или любой другой ценной информации. Авторы предполагают, что метод CBS сработает на всех сериях МК STM32.

Выводы

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

Vcc-glitch-атаки опасны тем, что от них сложно защититься. Для уменьшения вероятности успешного проведения подобных атак предлагается использовать МК с более высоким уровнем защиты.

Raccoon Security – специальная команда экспертов НТЦ «Вулкан» в области практической информационной безопасности, криптографии, схемотехники, обратной разработки и создания низкоуровневого программного обеспечения.

Расшифровка имени

Те­перь, ког­да наш­ли нуж­ный чип и про­чита­ли мар­киров­ку, ее нуж­но декоди­ровать. Кста­ти, мар­киров­ка далеко не всег­да чита­ется целиком: часть может быть слу­чай­но или намерен­но скры­та, а то и Wow­се под­делана, как любят устра­ивать китай­цы со сво­ими деталя­ми на Али.

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

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

Расшифровка имени чипа

Ес­ли же декоде­ра нет, при­дет­ся вык­ручивать­ся. Мож­но поп­робовать разоб­рать­ся по схе­ме на скрин­шоте ниже, но, естес­твен­но, безо вся­ких гаран­тий успе­ха. Воз­можно, даже луч­ше сра­зу идти к япон­цам — они очень любят неадек­ватно запутан­ные наз­вания без извес­тной логики. Она, конеч­но, есть, но пока что ник­то ее не смог понять.

Расшифровка имени чипа

Поиск документации

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

Ес­ли уж любишь Google, поп­робуй поиск по кар­тинкам — там порой мож­но най­ти то, что тек­стом не ищет­ся.

Еще огромные базы чипов есть в ПО для прог­рамма­торов — я исполь­зую ПО ком­пании Elnec. Зачас­тую там даже есть даташи­ты, но слиш­ком на это наде­ять­ся не сто­ит.

И еще одно хорошее мес­то для поис­ков — GitHub. С боль­шим шан­сом там най­дет­ся что‑нибудь по зап­росу в духе «X microcircuit read poc». Даль­ше мож­но выд­рать ссыл­ку на даташит или что‑то еще полез­ное. Мне попада­лись даже скры­тые сер­висные коман­ды для бло­киров­ки/раз­бло­киров­ки чипа, что, конеч­но, очень при­ятно при изу­чении.

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

В предыдущей статье мы разбирались с Vcc-glitch-атаками при помощи ChipWhisperer. Нашей дальнейшей целью стало поэтапное изучение процесса считывания защищенной прошивки микроконтроллеров. С помощью подобных атак злоумышленник может получить доступ ко всем паролям устройства и программным алгоритмам. Яркий пример – взлом аппаратного криптокошелька Ledger Nano S с платой МК STM32F042 при помощи Vcc-glitch-атак.

Интересно? Давайте смотреть под кат.

О возможности считывания защищенной прошивки мы узнали из статьи, в которой приведены результаты выполнения Vcc-glitch-атаки – обхода байта защиты RDP через масочный загрузчик (bootloader) для нескольких микроконтроллеров (далее – МК). Также рекомендуем к прочтению статью о взломе ESP32.

Теоретической базой исследования послужило руководство успешного считывания защищенной прошивки для LPC1114 через масочный загрузчик с использованием ChipWhisperer.

Так же, как и в первой статье, мы решили проводить эксперименты на плате МК STM32F103RBT6:

Возможность записи данных в сектор флеш-памяти и RAM-памяти или их чтения, а также выполнения других действий с памятью МК определяется значением байта защиты (для STM32 – RDP). Для разных МК значения и назначение байтов защиты, а также алгоритм их проверки различается.

Аппаратная настройка

Приступим к проведению эксперимента. Для начала необходимо подключить ChipWhisperer к МК согласно рисунку:

Схема подключения ChipWhisperer к STM32 для считывания защищенной прошивки через масочный загрузчик

На схеме зачеркнуты элементы, которые следует удалить из платы STM32F103RBT6 (в отличие от стандартного подключения МК). Стрелками обозначены места подключения ChipWhisperer, а подписями – его пины.

Наличие внешнего кварца, представленного на схеме, не обязательно, поскольку при работе с масочным загрузчиком плата МК STM32F103RBT6 использует внутренний CLOCK с частотой 24 МГц, поэтому синхронизация между ChipWhisperer и МК отсутствует.

Перейдем к настройке ChipWhisperer. Как уже было отмечено выше, рекомендуемая частота работы ChipWhisperer – 24 МГц (или другое кратное значение). Чем выше кратность этой частоты, тем точнее можно настроить момент атаки. Из-за отсутствия синхронизации подбор параметра scope.glitch.offset необязателен, ему можно присвоить любое значение.

Параметры scope.glitch.repeat и scope.glitch.width необходимо подбирать в зависимости от установленной частоты ChipWhisperer. При большом значении частоты все кратковременные импульсы, количество которых устанавливается при помощи scope.glitch.repeat, сливаются в один длительный импульс. Поэтому можно подбирать значение параметра scope.glitch.width, а scope.glitch.repeat зафиксировать, либо наоборот. Мы обнаружили, что оптимальная длительность импульса должна составлять около 80 нс (определяется как ширина импульса на его полувысоте).

Осталось подобрать значение параметра scope.glitch.ext_offset.

Подбор scope.glitch.ext_offset

Сначала необходимо выбрать момент атаки. Согласно схеме, представленной в документе компании STM, проверка значения байта защиты выполняется после получения запроса на чтение данных сектора флеш-памяти:

Алгоритм ответа на запрос о чтении данных сектора флеш-памяти

Чтобы удостовериться в верности такой схемы проверки, мы считали исполняемый код загрузчика подобного МК без защиты RDP через ST-Link. На рисунках ниже показаны части алгоритма обработки команды Read Memory command.

Общий вид обработки команды чтения памяти (хорошо видны вызов функции проверки RDP и посылка NACK в случае неудачной проверки)

Тело функции проверки RDP

Обратим внимание на тело функции проверки RDP: видно, что происходит чтение регистра по адресу 0x40022000 + 0x1C , логический сдвиг на 30 разрядов и ветвление. Из документации PM0075 Programming manual (STM32F10xxx Flash memory microcontrollers) становится понятно, что 0x40022000 – это базовый адрес контроллера flash memory, а 0x1C – это смещение регистра FLASH_OBR, в котором нас интересует второй бит RDPRT: Read protection, в котором содержится статус защиты RDP.

Необходимый момент проведения атаки – отработка инструкции LDR (загрузки из памяти). Эта инструкция располагается между запросом на чтение прошивки (отправление байта 0x11 с контрольной суммой 0xEE ) и ответом ACK / NOACK МК по UART. Для того чтобы визуально зафиксировать этот момент, необходимо подключить осциллограф к UART1_RX (пин PA10) и UART1_TX (пин PA9), а затем отслеживать изменение напряжения по UART1. В результате осциллограмма атаки по питанию с подобранным значением scope.glitch.ext_offset должна выглядеть примерно так:

Выбор момента проведения атаки

Скрипт считывания прошивки

Теперь необходимо указать момент срабатывания триггера CW_TRIG в коде Python с целью перехвата момента передачи контрольной суммы по UART1_RX. У ChipWhisperer есть библиотека для общения с масочным загрузчиком МК STM32. В штатном режиме эта библиотека используется для загрузки на МК прошивок из руководств при помощи класса class STM32FSerial(object) , расположенного в файле programmer_stm32fserial.py по пути software/chipwhisperer/hardware/naeusb/ . Для активации срабатывания триггера необходимо скопировать этот класс в главный исполняемый скрипт, чтобы метод класса CmdGeneric(self, cmd) стал глобально доступным, и добавить команду scope.arm() до передачи контрольной суммы (0xEE) запроса на считывание сектора памяти. Итоговый класс приведен в спойлере ниже.

Следует обратить внимание на то, что масочный загрузчик STM32F1хх позволяет считывать за один запрос не более 256 байт прошивки из указанного сектора флеш-памяти. Поэтому при считывании всей прошивки МК необходимо в ходе Vcc-glitch-атаки выполнить несколько запросов на чтение. Затем полученные 256 байт следует разбить на восемь 32-байтных массивов и сформировать из них файл формата HEX.

Настройка параметров ChipWhisperer завершена. Итоговый скрипт на считывание прошивки выглядит следующим образом:

Все закомментированные сообщения print() после строчки except Exception as помогают отслеживать состояние МК при поиске оптимальных параметров glitch-импульса. Для отслеживания конкретного состояния МК достаточно раскомментировать необходимое сообщение print() .

Результаты считывания

На видео продемонстрирована загрузка прошивки на МК через программатор ST-LINK, перевод RDP в состояние защиты и последующее считывание прошивки:

Успешному проведению Vcc-glitch-атаки могут помешать следующие ошибки:

• считывание неверного сектора памяти;

• самопроизвольное удаление прошивки.

Избежать подобных ошибок поможет точный выбор момента атаки путем увеличения частоты работы ChipWhisperer.

После разработки и отладки алгоритма считывания защищенной прошивки мы провели тестовое считывание прошивки программатора ST-LINK-V2.1, который работает на МК STM32F103CBT6. Считанную прошивку мы зашили на «чистый» МК STM32F103CBT6 и установили его вместо заводского. В результате ST-LINK-V2.1 с замененным МК работал в нормальном режиме, будто подмены не было.

Также мы попробовали провести серию атак на STM32F303RCT7. Этот МК в ходе атаки вел себя идентично STM32F103RBT6, но ответ на запрос чтения памяти содержал байт, равный 0х00, что не совпадало с ожидаемым нами результатом. Причина такой неудачи заключалась в более сложном и развитом принципе организации защиты этих МК.

В МК STM32F1xx существует два состояния защиты: защита выключена (Level 0) и включена (Level 1). В старших моделях предусмотрено три состояния защиты: защита отключена (Level 0, RDP = 0x55AA), защита флеш- и SRAM-памяти (Level 2, RDP = 0x33CC) и защита только флеш-памяти (Level 1, RDP принимает любые значения, отличные от 0x55AA и 0x33CC). Поскольку Level 1 может принимать множество значений RDP, установить Level 0 достаточно тяжело. С другой стороны, существует возможность понижения уровня защиты с Level 2 на Level 1 сбиванием одного бита в байте RDP (показано на рисунке ниже), что открывает доступ к SRAM-памяти.

Сравнение значений RDP для разных уровней защиты прошивки

Остается только понять, как этим может воспользоваться злоумышленник. Например, с помощью метода CBS (Cold-Boot Stepping), описанного в этой статье. Этот метод основан на поэтапном снимке состояния SRAM-памяти (периодичность выполнения каждого снимка была в районе микросекунды) после загрузки МК с целью получения ключей шифрования, скрытых паролей или любой другой ценной информации. Авторы предполагают, что метод CBS сработает на всех сериях МК STM32.

Выводы

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

Vcc-glitch-атаки опасны тем, что от них сложно защититься. Для уменьшения вероятности успешного проведения подобных атак предлагается использовать МК с более высоким уровнем защиты.

Raccoon Security – специальная команда экспертов НТЦ «Вулкан» в области практической информационной безопасности, криптографии, схемотехники, обратной разработки и создания низкоуровневого программного обеспечения.

Как и чем прошить STM32 STM32F103C8T6 на примере blue pill.

Данное руководство по прошивке микроконтроллеров STM32. В частности и на примере blue pill, на которой установлен контроллер STM32F103C8T6. Если вы знакомы с ардуино, то понимаете, что контроллер можно прошить программатором, либо через встроенный загрузчик. Но в отличии от AVR, и arduino в семействе STM32 загрузчик уже зашит в микроконтроллер. Да, не нужно прошивать загрузчик в пустой кристалл! Он уже зашит с завода, и зашит так, что он не может слететь. Что бы вы не вытворяли с STM32 загрузчик не слетит.

Кто сидит на arduino знакомы с этой проблемой, чуть косяк с прошивкой, чуть она длиннее положеного или указали не тот камень и прошивка затирает загрузчик arduino. При этом, что бы его восстановить нужен программатор. Есть в STM32 еще одна прекрасная вешь, это отсутствие фьюз! то есть конфигурирование микроконтроллера происходит из программы! Не нужно указывать откуда тактироваться, какие режимы включать и т.д. Тиким образом STM32 может по ходу выполнения кода сам себя разгонять — когда нужна производительность, вжарить на максимальной частоте, а потом снизить тактовую частоту и экономить батарейку.

И при этом его в отличии от AVR не окирпичить неправильно зашитыми фьюзами! Неграмотными действиями при прошивке вы не убьете STM32, не переживайте! Да AVR можно восстановить высоковольтным программатором, но у всех ли он есть? Я собирал AVR FUSE BIT DOCTOR для этого. Был грешок, косячил с тактированием.

Теперь о 2х самых распространенных. Это через этот самый загрузчик и через отладочный разьем. В первом случае потребуется USB то UART переходник. Кто пользуется ардуино у них эти переходники или есть, или распаяны на плате с ардуино.

Если нету, то лучше купить внешний, например такой

CH340G RS232

Прошивка STM32 (STM32F103C8T6 )через UART, через выстроенный загрузчик.

Для прошивки через встроенный загрузчик потребуется программа Flash Loader Demonstrator.

Во первых переходник нужно переключить на напряжение 3,3 вольта.

USB to UART для STM32

Заем подключить этот переходник к компьютеру и к самой голубой таблетке, а на таблетке переставить перемычку. Эта перемычка говорит контролеру, с чего загружаться. В данном случае будет загружена не прошивка, а загрузчик. Подключать стоит TX к RX а RX к TX. Если перепутаете, то ничего страшного не произойдет. Просто программа не увидит контроллер, и потом провода можно поменять местами. Нельзя путать только + и — питания.

Установка перемычек

Запустить программу Flash Loader Demonstrator и выбрать в ней COM порт, к которому подключена плата (если в компьютере у вас нет ком порта, то в списке будет всего 1 порт, не ошибетесь).

Выбор порта в программе flash loader demonstrator

Дальше, если все верно подключено, то программа выведет вот такое вот окно.

Контроллер обнаружен flash loader demonstrator

Тут выбирать больше не чего, и нужно нажать кнопку NEXT. На следующей вкладке программы, на которой тоже ничего интересного, просто служебная информация, которая мало кому интересна, трогать тут ничего не нужно, и смело можно жать NEXT.

А вот на следующей вкладке нужно выбрать файл который нужно прошить.

Выбор файла для прошивки

Больше тут ничего трогать не надо, жмем порядком надоевший NEXT, и запускаем тем самым процесс прошивки.

Прогресс бар прошивки

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

Окончание прошивки микроконтроллера

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

Прошивка через отладчик.

Быстрее и удобнее все же прошивать СТМ32 программатором через SWD разьем. Если соберетесь программировать под STM32 то вам понадобится отладчик! Это очень удобная вешь. При отладке можно построчно выполнять код в микроконтроллере, и при этом видеть в каком состоянии какая переыерия, и в каком регистре какое значение! даже на компе нет таких возможностей, как в STM32. В общем рекомендую брать STLINK — на вырост так сказать, при этом стоит он столько же, сколько и голубая таблетка.

Плата Stlink ST-Link V2

Китайский клон ST-LINK V2

Соответственно это все китайские клоны, но они прекрасно работают и даже в них самих можно обновить прошивку через программу STM32 ST-LINK Utility.

Прошить контроллер так же просто как и с помощью загрузчика, даже еще проще. Для начала нужно подключить STLINK к bluepill. В голубой таблетке для этого выведены отдельные 4 линии, для питания и отладки. На платах есть вся необходимая маркировка, схема не нужна.

Дальше необходимо запустить программу STM32 ST-LINK Utility

STM32 ST-LINK Utility

Для открытия файла с прошивкой необходимо выбрать File->OpenFile и выбрать файл для прошивки

STM32 ST-LINK Utility с открытым файлом

Что бы подключиться к контроллеру необходимо нажать эту кнопку. Контроллер уже должен был быть подключен к программатору, а программатор (отладчик, STLINK, называйте как хотите), к USB порту. Драйвера на ST-Link искать не нужно, они автоматически ставятся с утилитой.

STM32 ST-LINK Utility подключение к микроконтроллеру

Для запуска процесса прошивки необходимо выбрать пункт Target->Program или Target->Program Open:

Начинающим о прошивке микроконтроллера STM8S003F3P6

Файл прошивки имеет расширение файла .s19/ После загрузки прошивки в программу произойдет следующее:

Начинающим о прошивке микроконтроллера STM8S003F3P6

В области описания (выделено красным) в разделе PROGRAM MEMORY будет указаны сведения файла прошивки. В поле главной вкладки PROGRAM MEMORY (обведено синим цветом) будет массив данных прошивки, в поле лога внизу (зеленым) будет этот самый лог загрузки. Поподробнее о нем: Последняя строка «Файл успешно загружен. Контрольная сумма …«. Но перед этим куча ошибок с указанием строки, адреса и «выход за пределы — проигнорировано». Это нормально. Файл прошивки содержит всю область памяти, включая адреса с 0х4000 по 0х407F, этот диапазон является проигнорированной ЕЕПРОМ памятью, который относится а следующей вкладке «DATA MEMORY«, на который нужно теперь перейти (нажать, где обведено красным цветом, ниже на картинке)

Начинающим о прошивке микроконтроллера STM8S003F3P6

Загружать данные в «DATA MEMORY» необходимо, если область памяти ЕЕПРОМ содержит эти самые данные. Проверяем, открыв тот же самый файл прошивки. Загрузка будет идти подольше, большая часть файла прошивки будет проигнорирована, но область памяти ЕЕПРОМ будет успешно загружена:

Начинающим о прошивке микроконтроллера STM8S003F3P6

Если в поле массива данных видны какие либо шестнадцатеричные значения, то значит прошивать их нужно. Если там все будет по нулям, то шить их нет необходимости. Я, к примеру, зачастую, если даже в описание поделки описано, что «настройки сохраняются в энергонезависимой памяти«, не заполняю область ЕЕПРОМ данными, делая первичную инициализацию ЕЕПРОМ при первом запуске микроконтроллера. То есть микроконтроллер сам прошивает ЕЕПРОМ, поэтому сам файл прошивки не содержит этих данных.

Вкладка «OPTION BYTE» это те же самые фьюзы, как у микроконтроллеров АТтини, но менять их значения, как правило, нет никакой необходимости — поэтому описывать их и не буду. После загрузки прошивки в программу можно подключать программатор и сам микроконтроллер или отладочную плату с ним. Для загрузки прошивки в микроконтроллер, необходимо нажать кнопку «загрузить все» (обведено красным цветом):

Начинающим о прошивке микроконтроллера STM8S003F3P6

Если все прошло успешно, то быстро «проскачут» шкалы выполнения (обведено зеленым цветом) и в логе пробегут данные выполнения (обведено синим цветом) Если логи содержат фразы «completed» «successfully» — то все успешно прошилось.
Если что то пойдет ни так, и логи закраснеют красными ругачками, то что то пошло не так. Подробнее о ругачках:

» Нет соединения с микроконтроллером…» Проверьте, правильно ли контачат провода программатора и жив ли сам чип.

Начинающим о прошивке микроконтроллера STM8S003F3P6

» Не могу соединится с программатором.» . Неправильно выбран тип программатора, не подключен сам программатор или не установлены драйвера, возможно программатор завис (нужно его перевоткнуть)

Начинающим о прошивке микроконтроллера STM8S003F3P6

«Чип залочен«. Если залочить чип (заблокировать ему возможность записи и чтения прошивки), то нужно сначала снять защиту (прошивка в памяти контроллера конечно потеряется).

Начинающим о прошивке микроконтроллера STM8S003F3P6

Нужно перейти на вкладку «OPTION BYTE» (обведено синим цветом), убедится, что значение параметра защиты выключено (обведено красным цветом) и нажать на кнопку » записать данные» (обведено зеленым цветом).

Начинающим о прошивке микроконтроллера STM8S003F3P6

Все, защита снята, и можно прошивать.

Пример прошивки микроконтроллера терморегулятора W1209

На плате вход RESET (4 pin контроллера) выведен на контакты для программирования

Для перепрошивки модуля нам потребуется:

  1. USB программатор ST-Link V2. (Стоит программатор на Алиэкспресс около 200 руб.)
  2. Софт для программатора на офсайте:
    http://www.st.com/web/catalog/tools/FM147/CL1794/SC1807/SS1747/PF210568 (драйвер и софт для программирования). Внизу ссылка. (Для скачивания нужно заполнить таблицу и email придет ссылка).
  3. Гребенка с шагом 2,54 мм для программирования (можно и без неё, тогда припаиваем 4 проводка).

Шаг 1. Программатор соединяем с разъемом программирования на плате W1209. На программаторе подписано:

Начинающим о прошивке микроконтроллера STM8S003F3P6

Шаг 2. Запускаем программу ST-Link Visual Programmer, выставляем параметры программирования:

Начинающим о прошивке микроконтроллера STM8S003F3P6

Шаг 3. +12в на плату не подавать! Питать от ST-Link. Присоединить программатор в USB.

Шаг 4. Попробовать прочитать данные. Если вышла ошибка — чип защищен от чтения/записи. Надо разблокировать: закладка options , первая — программа, вторая — еепром, третья — байты опций (нам нужна внизу третья), переключиться на нее и сделать write page.

Внимание! Сейчас старая прошивка СТЕРТА!

Попробовать вычитать — если все нормально, чип начнет читаться нулями.

Шаг 5. Теперь записываем новую прошивку. Файл — открыть — выбираем old_termo.hex, распакованный из архива (взят с комментариев пользователей). Нажимаем — Program — All Tabs.

Использованы материалы сайта:drive2.ru (профиль CAMOKAT-BETEPAHA)

ПОДЕЛИТЕСЬ СО СВОИМИ ДРУЗЬЯМИ:

Цифровой генератор на si5351

Схема данного генератора построена на чипе Silicon Labs si5351s и графическом ЖК-дисплее от Nokia 5110/3310.

Это универсальный цифровой многовыходной VFO для любительских радиоприемников.

Дистанционное управление по радиоканалу. Обзор. Схема. Программирование

Сейчас в продаже недорого можно купить готовый комплект ДУ на 433МГц: модуль приемника и передатчик (брелок). Например, что на фото стоимость около 400 руб. на Aliexpress.

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

Схемы простых счётчиков импульсов

В некоторых случаях надо подсчитать количество кого-либо или чего-либо.

Например, количество витков при намотке катушки, трансформатора, подсчёт посетителей, проходящих через проходную или количество материалов на транспортёре и т.д.

Ниже, представлено несколько простых схем для реализации этой задачи.

Популярность: 2 553 просм.
of your page —>

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

Оцените статью
TutShema
Добавить комментарий