Разработка электроники,

Систем автоматики,

Программного обеспечения

ООО "Антех ПСБ",
Санкт-Петербург

+79811865082

anteh@bk.ru

ООО Антех ПСБ примеры

Комплекс программного обеспечения загрузки/обновления шифрованной прошивки 8 ми битных AVR Mega контроллеров, поддерживающих boot загрузчик

Текущее описание выдержка из спецификации алгоритмов работы. Общее представление.

Предметом обслуживания являются 8ми битные AVR Mega… контроллеры, поддерживающие boot загрузку, в которых записан код boot загрузчика.

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

Генератор ключа Шифратор
Pic3 Pic4

Состоит из 3 компонент:

1.BLAESCoder.exe -Формирование файла ключа, шифрование .hex .eep файлов. Можно задать любые параметры шифрования по алгоритму Rijndael, есть генератор абсолютно случайной последовательности. Используется сцепка зашифрованных блоков. Rijndael -длина блока шифруемых данных и ключа может быть от 32 до 256 байт с шагом в 32байта причём длина блока и ключа может быть разной. AES является частным, одобренным к применению, случаем Rijndael.

2.BLAESLoader.exe - Загрузка ключа и/или шифрованной прошивки в контроллер(ы), через любой из USART интерфейс котнроллера(ов). После предварительной настройки по нажатию одной кнопки может быть прошито сразу несколько контроллеров или устройств, как однотипных, так и разнотипных.

3.boot загрузчик, написанный для конкретного типа контроллера. Размер 4k. Поддерживаются контроллеры с количеством USART до 8ми включительно.

Гарантией безопасности/секретности прошивки является недоступность файла ключа заинтересованной стороне. Файл ключа в свою очередь также зашифрован.

При необходимости позволяет обновлять прошивку целого комплекса изделий. USARTы которых объединены в сеть.

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

Если у вас есть готовый проект и есть необходимость применения подобного подхода, то нужно только наличие свободных 4k FLASH памяти и RX вывод любого USART контроллера. Т.е. проект не нужно переделывать.

Общие условия различения нескольких контроллеров:

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

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

1.Аппаратный. У каждого контроллера разработчик предусматривает какое то количество пинов для установления однозначной адресации максимальная длина адреса 16 бит, минимальная 1. Можно использовать уже задействованные ноги контроллера. Учитывая, что при входе в boot загрузчик все порты контроллера в третьем состоянии, при отсутствии внешней нагрузки. Считаем, что высокий уровень = 1, низкий = 0.

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

3.Каждому экземпляру boot загрузчика перед прошивкой в контроллер присваивается уникальный адрес указанный заказчиком, в пределах одного изделия. Например: "Pribor1", "TRS-3", "Изделие-1" и т.д. Максимальная длина такого адреса 32 байта. Подобная функция будет доступна за дополнительные деньги. Но это вызовет некоторые неудобства, т.к. при монтаже нужно учитывать, какой контроллер куда устанавливать.

Минимальные условия:

Наличие линии связи TX компьютер => RX контроллер(ы). Можно использовать любой USART контроллера. Имеется в виду только возможность передачи от COM порта компьютера, к USART контроллера. В этом режиме желательно точно знать частоту тактирования контроллера. Прошивка возможна, даже если её знать приблизительно, то процесс прошивки может занять некоторое время. Если её вообще не знать, то процесс прошивки может затянуться на довольно продолжительное время.

Если будет необходимость определять неизвестную, или "ушедшую" частоту контроллера, то COM порт компьютера должен поддерживать смену частоты обмена с шагом 1 Гц, использовать можно например продукцию фирмы MOXA.

Желательные условия:

Наличие линии связи TX RX компьютер => RX TX контроллер(ы) любой USART контроллера. Связь TX контроллер => RX компьютер нужна для того, чтобы сообщить об успешности загрузки прошивки и при поиске частоты тактирования контроллера, если она неизвестна.

Например у вас в одном изделии 20 одинаковых контроллеров, к примеру ATMEGA64A, и у 8ми контроллеров первый тип прошивки, у 4х второй, у 6ти третий и у 2х четвёртый. Тогда вы можете либо аппаратно предусмотреть 2 пина для адресации 4х различных типов прошивок, или 5 пинов для адресации каждого из 20 контроллеров в отдельности. В данном случае, если частота тактирования контроллеров с одинаковой прошивкой одинаковая, отдельный адрес для каждого контроллера не обязателен. Контроллеры с одинаковым адресом и частотой тактирования прошиваются одновременно. Если контроллеры одного устройства содержат одинаковую прошивку, но тактируются разными частотами, то отдельный адрес нужен каждому контроллеру.

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

Загрузчик отслеживает принимаемые посылки по всем USART контроллера.

Boot загрузчик. Программа в boot области контроллера

При перезапуске контроллер переходит в область загрузчика. При разработке схемы учитываем, что во время работы загрузчика все выводы контроллера находятся в третьем состоянии, кроме всех RX USART. RX USART(ов) настраиваются как входы USART. Если быть точнее, то в boot загрузчике настраиваются выводы только RX USART(ов), остальные не трогаются. В области загрузчика контроллер находится некоторое время T. Если вход RX всех USART контроллера в течении этого времени находится в неактивном состоянии, то переходим на стандартную область программы. Иначе ожидаем перепада фронта. На вход контроллера может сыпаться всевозможный мусор, под вменяемой командой подразумеваются посылки синхронизации, которые контроллер принял без ошибок. Т.к. частота передачи посылок ком портом компьютера может не совпадать с частотой приёма USART контроллера.

BLAESLoader

По нажатию на кнопку "Connect" производится попытка подключения к ком порту. Если ком порт был свободен и подключение успешно, то сразу же начинается передача синхропосылок захвата на каждой из частот USART, заданных в поле "Start USART Frequency, Hz" поле не редактируется, вычисляется исходя из частоты тактирования контроллера. Т.е. если прошиваем несколько контроллеров и у них разные частоты тактирования, то синхропосылка поочерёдно будет передаваться по выбранному ком порту на каждой из USART частот.

BLAESCoder

На вкладке CIPHER производится шифрование исходных .hex и .eep файлов. Если .eep файл отсутствует то ставим флаг ".eep OFF. …". Для получения файла шифрованной прошивки, кроме исходных .hex и при необходимости .eep файлов, нужен файл ключа .kee, а также нужно выбрать папку в которую будет помещена шифрованная прошивка. Файл ключа формируется на вкладке Key Generator. Файл ключа формируется один раз. Можно формировать сколько угодно файлов ключа, хоть для каждого контроллера свой ключ. Но при этом при прошивке контроллера нужно вести учёт, в каком контроллере находится какой ключ. И прошивка для конкретного контроллера должна быть зашифрована тем же ключом, который был предварительно загружен в контроллер.

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

Copyright ©Новиков Алексей Александрович,

2023 Санкт-Петербург, 197372, ООО "Антех ПСБ",

anteh собака bk.ru