Найти в Дзене
Электроника и жизнь

Как защитить микроконтроллер от копирования. Биты блокировки (Lock bits) и как с ними работать

Оглавление

Здравствуйте, уважаемые читатели! В прошлой статье я рассказывал, как можно просто скопировать информацию с одного микроконтроллера на другой, используя ISP программатор, в качестве которого выступала Arduino UNO и самодельный модуль. Мы копировали Flash память и энергонезависимую память EEPROM . И вполне логично возникает вопрос, а можно ли как-то защитить микроконтроллер от подобного копирования.

Защищаем микроконтроллер AVR от копирования
Защищаем микроконтроллер AVR от копирования

Что такое Lock биты (Lock bits)

Да, такой метод существует и связан он с таким понятием как Лок биты ( Loc k bits ), т.е. биты блокировки. Эти биты в целом похожи на своих родственников Fuse биты, но и имеют свои отличия. Общее то, что Lock биты, как и Fuse биты являются битами конфигурации, хранятся в отдельной области памяти и единица означает, как и у фьюзов, что данный бит не установлен, не запрограммирован. А ноль , что установлен. Я про эту особенность рассказывал в отдельной статье , где было подробно про Fuse биты.

Структура классического Lock байта у микроконтроллеров AVR. Таблица 20-1 даташита на ATtiny85
Структура классического Lock байта у микроконтроллеров AVR. Таблица 20-1 даташита на ATtiny85

Но в отличие от фьюзов, которых достаточно много разновидностей и которые занимают от одного байта (для ATtiny10), до 3-х на микроконтроллерах начиная с ATtiny25/45/85 и большинстве других. Lock биты всегда занимают один байт.

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

Основные Lock биты. Таблица 20-2 даташита на ATtiny85
Основные Lock биты. Таблица 20-2 даташита на ATtiny85

Перейдем непосредственно к описанию Lock битов.

Режим 1 (LB Mode 1) где оба Lock бита равны 1, означает, что Lock биты не заданы и микроконтроллер работает в обычном режиме, где все функции доступны.

Режим 2 (LB Mode 2) где Lock бит LB 2 равен 1 , а Lock бит LB 1 равен 0 означает, что заблокирована перепрошивка микроконтроллера и изменение фьюзов как с помощью ISP программатора, так и с помощью высоковольтного программатора ("Как восстановить фьюзы на микроконтроллерах ATtiny13/25/45/85?").

Режим 3 (LB Mode 3) где оба Lock бита равны 0 , означает, что мы к тому же еще не сможем скопировать содержимое внутренней памяти микроконтроллера. Именно этот режим нас больше всего и интересует.

Как изменить Lock биты

Для примера возьмем ATtiny85. Подключаем микроконтроллер к ISP-программатору, в качестве которого выступает Arduino UNO. В микроконтроллер загружен скетч, который полностью очищает энергонезависимую память EEPROM и в первую ячейку данной памяти записывается число 5. И далее, в коде скетча, задано мигание светодиодом столько раз, сколько у нас записано в EEPROM памяти. Это нам поможет визуально наблюдать, какие изменения будут происходить с памятью в ходе дальнейших действий.

-4

Запускаем утилиту, которую я уже показывал для изменения фьюзов. Она упрощает работу с программой avrdude . Я сюда добавил еще несколько строк, в которых мы можем прочитать установленные для микроконтроллера Lock-биты и изменить их. Ссылка на утилиту во вложении.

Утилита для изменения Lock битов (ссылка внизу)
Утилита для изменения Lock битов (ссылка внизу)

Вначале выбираем микроконтроллер. В данном случае это A Ttiny 85 и номер COM порта. У меня это com3.

Утилита для изменения Lock битов (ссылка внизу)
Утилита для изменения Lock битов (ссылка внизу)

Выбрав пункт 3 , можно прочитать Lock биты, установленные на микроконтроллере. В каталоге с утилитой создается файл lock.txt в который записывается лок байт в шестнадцатеричном представлении, т.е. FF, что соответствует 8 единицам в двоичной системе исчисления.

Значение Lock байта по умолчанию
Значение Lock байта по умолчанию

Если выбрать пункт 4 , то произойдет частичная блокировка микроконтроллера. Т.е. например, мы не сможем изменить фьюзы. Но скопировать прошивку всё равно сможем.

И только выбрав пункт 5 , мы заблокируем микроконтроллер от чтения и последующего копирования его внутренней памяти. Речь идет как о Flash памяти, так и о памяти EEPROM.

Т.е. при попытке копирования Flash памяти с помощью утилиты из прошлой статьи, создается файл flash.hex, который фактически пустой.

Содержимое файла  flash.hex после блокировки микроконтроллера от копирования
Содержимое файла flash.hex после блокировки микроконтроллера от копирования

А при попытке копирования EEPROM памяти с помощью той же утилиты из прошлой статьи, создается файл eeprom .hex, который заполнен буквами F, т.е. в каждую ячейку записано значение 255. При этом, светодиод продолжает мигать 5 раз подряд. Т.е. записанная нами пятерка в нулевой ячейке памяти сохраняется, а это всё фиктивные данные.

Содержимое файла  eeprom.hex после блокировки микроконтроллера от копирования
Содержимое файла eeprom.hex после блокировки микроконтроллера от копирования

И если выбрать пункт 6 , Chip Erase, вызывается программа avrdude с префиксом e . Что приводит к полному стиранию чипа и возвращению к заводским установкам. Очищается и Flash и EEPROM память (если не установлен Fuse EESAVE ). Соответственно, подключенный к микроконтроллеру светодиод перестает мигать, т.к. память микроконтроллера пуста.

Еще одним способом вернуть чип к нормальной работе, является классическая загрузка скетча через ISP-программатор из среды Arduino IDE . Дело в том, что каждый раз, при загрузке нового скетча в среде Arduino IDE вызывается команда Chip Erase, которая и производит очистку памяти микроконтроллера и возвращение Lock битов в состояние по умолчанию.

Еще стоит отметить, что при работе с ATtiny13 значения Lock байта у не заблокированного микроконтроллера равно не FF , как у ATtiny85 и других микроконтроллеров, а 3F , что в двоичном представлении равно 0011 1111 . Таким образом, чтобы установить частичную блокировку нам нужно задать значение Lock байта равное 3E . А для полной блокировки – . В отличие от остальных микроконтроллеров, где задается FE и FC , соответственно.

Значения Lock байта для ATtiny13 и ATtiny25/45/85.
Значения Lock байта для ATtiny13 и ATtiny25/45/85.

Вот об этом моменте нужно помнить при работе с ATtiny13.

Ссылка на скетч из статьи - https://disk.yandex.ru/d/23WrD4eJklEYrQ

Ссылка на утилиту для изменения фьюзов и битов блокировки - https://disk.yandex.ru/d/aB0ke523QH_I7g

Видео по материалам статьи:

_________________________________________________________

Спасибо, что дочитали до конца! Если статья понравилась, нажмите, пожалуйста, соответствующую кнопку. Если интересна тематика электроники и различных электронных самоделок, подписывайтесь на канал. До встречи в новых статьях!

Другие публикации по теме: