ST-ONE обладает простой и гибкой системой настройки. Файл конфигурации имеет стандартный INI-формат. Переменные имеют осмысленные названия и задаются опциями, описанными в этом документе. Конфигурация загрузчика и прошивки находится в файле FIRMWARE.INI расположенном в корне USB-диска загрузчика.
Файл конфигурации располагается в корне эмулируемого диска и имеет имя firmware.ini. Директивы, заданные в этом файле, помогут точно сконфигурировать загрузчик и позволят управлять процессом загрузки основной микропрограммы используя, в том числе, лицензирование.
По соглашению, при работе с файлом конфигурации используются символы латинского алфавита в ВЕРХНЕМ регистре. При этом файл не может превышать размер в 512 байт. Этого размера достаточно для задания всех необходимых параметров. Таким образом, исключается более сложная обработка файла при запуске системы, что позволило уменьшить размер кода загрузчика всего до 32 Кбайт.
Firmware.ini имеет богатые возможности по конфигурированию системы. Перечень основных директив в таблице ниже:
Директива | Тип значения | Описание |
---|---|---|
FAT_LOCK | 1 / 0 | Блокировки таблицы размещения файлов FAT |
FW_WRITE_LOCK | 1 / 0 | Запрет записи и удаления микропрограммы. Налагает защиту только на регион хранения самой микропрограммы и ее модулей (если они есть) |
FULL_READ_ONLY | 1 / 0 | Переводит устройство в режим полного READONLY. Таким образом сбросить этот флаг обратно нельзя - только через системное форматирование |
USB_ON_PIN | [PIN][NUM]-[1 / 0] | Сложный составной параметр. Позволяет задать PIN для подключения чипа к USB. На брендовой плате ST-ONE используется специальный электронный ключ для подключения USB - он управляется этим программным параметром. |
INDICATOR_PIN | [PIN][NUM] | LED-индикакатор статуса загрузчика |
FAST_FORMAT | 1 / 0 | Системное форматирование. Если задано 1 - быстрый формат, 0 - полный формат кристалла |
BOOT_WAIT | ms | Ожидание ввода аппаратной команды входа в загрузчик в миллисекундах. Таймаут ожидания Vcc на PIN 1. Если Vcc нет - передача управления основной программе [с учетом FW_START_DELAY] |
FW_START_DELAY | ms | Задержка в миллисекундах перед стартом основной микропрограммы |
DISABLE_IRQ | 1 / 0 | Запрет прерываний на момент передачи управления основной программе. 1 - блокировать прерывания, 0 - разрешить прерывания |
FW_PROTECT | 1 / 0 | Защита микропрограммы от чтения. При установке этого параметра изменение или чтение кристалла будет невозможным! Эта опция включает так же аппаратную защиту. Внимание! Снятие такой защиты возможно только специальной JACK-подпрограммой или полным стиранием всего кристалла |
FW_SIZE | bytes | Размер микропрограммы в байтах. Необходим для корректного подсчета MD5 прошивки |
FW_KEY | string | Ключ для аппаратного декодирования и установки основной микропрограммы. Применяется при лицензировании и защиты распространяемого ПО |
Количество и перечень опций может меняться в зависимости от версии программного обеспечения и чипа.
Для более полного понимания работы опций рекомендуется изучить общие принципы работы файловых систем FAT12 / FAT16. Рассмотрим подробнее каждую из директив и область ее применения:
Директива необходима для принудительной блокировки таблицы размещения файлов. По умолчанию опция всегда включена и касается только и непосредственно самой таблицы FAT. Делается это для того, чтобы исключить влияние операционной системы компьютера, куда подключается устройство, на FAT и ее содержимое. Например, Windows может создавать служебные записи, создавать скрытые папки и файлы. Стороннее ПО так же может создавать какие-то метки или скрытые файлы на USB-носителях. При блокированной таблице размещения файлов - структура файлов гарантированно останется неизменной. То есть количество файлов и их виртуальный размер будет таким как после системного форматирования. Эффективное использование опции достигается совместно с FW_WRITE_LOCK. При этом, содержимое файлового пространства может быть изменено, так как операционная система может посчитать, что она успешно обновила FAT, об этом далее.
Директива необходима для принудительной блокировки области FLASH-памяти которая размечена под основную микропрограмму и содержит изменяемые данные. По умолчанию всегда 0. При установке этой опции в 1 и после перезагрузки устройства, файл прошивки firmware.bin будет закрыт для редактирования. Совместно с опцией FAT_LOCK это даст гарантированную защиту микропрограммы от случайного изменения извне. Как в случае штатного доступа к файловой системе, так и через утилиты прямой работы с диском. При этом, совокупность этих опций не является защитой от несанкционированного доступа (копирования). Вы сможете прочитать программный код и все файлы параметров. Так же беспрепятственно можно снять эту защиту через firmware.ini, например, для обновления прошивки или записи другой микропрограммы.
Принудительно переводит всю файловую систему устройства в режим READONLY. По умолчанию всегда 0. При установке этой опции в 1 - мы получим устройство целиком доступное только для чтения. При этом запись будет блокирована в любые сектора эмулируемого диска, а файл firmware.ini будет больше недоступен для редактирования. Таким образом снять такую защиту можно только путем системного форматирования. Эта опция максимально полно гарантирует неизменность данных на устройстве, а микропрограмма всегда будет запускаться с гарантированными параметрами загрузчика. Директива не является защитой от несанкционированного доступа и обеспечивает беспрепятственный доступ к памяти кристалла для чтения.
Сложный составной параметр. Может принимать различные значения. Реализован для максимальной универсальности решения, независимо от того на какой плате и в каком чипе будет работать загрузчик. Суть параметра в том, чтобы задать PIN и его состояние для активации USB. В грамотном решении, для подключения USB, всегда будет присутствовать электронный ключ программного управления коммутацией USB-шины с внешними устройствами. Роль аппаратного ключа может выполнять «цифровой транзистор», так как это сделано, например, на брендовой плате ST-ONE. При подаче низкого потенциала на этот ключ - шина USB будет подключена к контроллеру и устройство скоммутируется с внешним миром. Таким образом, мы получаем возможность программного управления подключением и отключением устройства от внешней электроники не разрывая интерфейсы (не извлекая кабели).
Формирование значение параметра осуществляется следующим образом: задается порт и PIN управления логикой включения USB, через дефис указывается состояние необходимое для активации электронного ключа. Таким образом, если у нас ключ висит на PIN12 порта C, а для его активации необходим низкий потенциал, значение будет выглядеть как: C12-0. Если ключ висит на порт B, PIN7, а для включения логики необходим высокий потенциал - значение параметра будет иметь вид: B7-1.
Сложный составной параметр. Так же может принимать значение порта и PIN-а. Индикатор используется для отображения состояния загрузчика и текущей операции. Например, если у нас индикатор находится на порту C и PIN7 - значение параметра будет C7.
Используется для определения типа системного форматирования. Необходим для быстрого сброса устройства в исходное состояние. Быстрое форматирование имеет такой же механизм работы как быстрое форматирование в операционной системе на компьютере. По умолчанию всегда 1. При выключении параметра в 0 - форматирование будет всегда осуществляться в полном объеме. То есть будет перезаписано все, от MBR и файловых таблиц, до пространства микропрограмм. Полное форматирование занимает более продолжительное время в несколько секунд, при этом гарантированно удаляя все предыдущие данные. Параметр является зависимым от параметра FW_PROTECT. При включенной защите форматирование невозможно, возврат в исходное состояние возможен только с помощью JACK-подпрограммы сброса или путем полного стирания кристалла с последующим перепрограммированием.
Опция для определения таймаута в период которого будет ожидаться аппаратная команда входа в бутлоадер. Может быть использована в устройствах требующих периодического обновления или входа в загрузчик для выполнения сервисных задач. На PIN активации загрузчика может быть выведена кнопка или цепь коммутации для активации загрузчика по внешнему событию. Это позволит более гибко использовать конечное устройство, не прибегая к модификации электронной схемы. Если команда входа в загрузчик не поступила, в период ожидания - управление будет передано основной микропрограмме.
Задержка перед запуском основной микропрограммы. Опция используется для паузы перед стартом. Может пригодиться, когда требуется завершение каких-либо длительных переходных процессов после подачи питания на устройство. Загрузчик выждет установленный таймаут и передаст управление основной микропрограмме.
Заблокировать прерывания на момент JUMP-а в основную микропрограмму. По умолчанию всегда 1. Это означает, что контроллер будет выполнять переход к основной микропрограмме в полной тишине (без прерываний). Это налагает определенные требования на основную микропрограмму. Например, при старте основной программы, необходимо снова разрешить прерывания. При этом - значение можно сбросить в 0. Тогда переход к основной подпрограмме будет выполняться на свой страх и риск, с возможностью вызова прерываний. Если в момент перехода будет вызван обработчик какого-то события - система может зависнуть. Запуск устройства может происходить с запретом прерываний и без, в зависимости от ситуации и конфигурации основной микропрограммы. Подавляющее большинство стартов - успешные при любом значении параметра. Пользователь может это регулировать - повысив гарантированную надежность устройства.
Защита устройства. Это опция может быть использована как отдельно, так и совместно с лицензией. Реализует полноценную защиту устройства. При включении этой опции устройство необходимо перезагрузить. Произойдет установка защиты. Затем индикатор покажет успех операции и устройство надо обесточить. Все последующие запуски будут в защищенном режиме. Пользователь по-прежнему сможет активировать вход в загрузчик, но при этом не сможет прочитать основную микропрограмму. Не сможет вносить изменения в файлы. Это необходимо для защиты авторских прав или в других ситуациях, когда изменение или чтение микропрограммы - недопустимы. При установке этой защиты, будут активированы 2 режима защиты: программный и аппаратный. Программный режим защиты обеспечит корректную работу устройства с загрузчиком, через который уже нельзя извлечь исполняемый код основной микропрограммы. Аппаратный режим обеспечит защиту кристалла на аппаратном уровне. Записать или прочитать что-либо из контроллера будет уже невозможно. Даже с помощью программатора. Команда форматирования в этом режиме не работает ни в каком виде. Доступен только переход в сервисный режим, если он не запрещен в файлах конфигурации. Внимание! При запуске любой JACK-подпрограммы на защищенном кристалле - произойдет автоматическое стирание основной микропрограммы! Если сервисный режим доступен, тогда возможен мягкий возврат устройства к первоначальному виду: рабочий загрузчик с пустым кристаллом для загрузки микропрограмм. Если сервисный режим недоступен - устройство является полностью заблокированным и для возврата его в начальное состояние потребуется программатор, а так же новый загрузчик. Необходимо будет проводить полное стирание всего кристалла и повторное перепрограммирование.
Задает размер основной микропрограммы в байтах. Это необходимо для корректного подсчета MD5 суммы дампа прошивки. Если этот параметр установлен, то в файле readme.txt можно будет увидеть контрольную сумму прошивки, что обеспечит полный контроль целостности программного обеспечения. Таким образом, сверив контрольные суммы - можно быть уверенным, что исполняемый код записан верно, не разрушен и не модифицирован. Если параметр не установлен или равен 0, подсчет контрольной суммы не осуществляется.
Используется механизмом лицензирования. Через этот параметр передается ключ защиты программного обеспечения. Защищенные прошивки могут распространяться в открытом доступе, в том числе через Internet. При этом воспользоваться такой прошивкой смогут только пользователи устройств с загрузчиком ST-ONE. Микропрограмма загружается на устройство обычным способом, затем прописывается лицензионный ключ установки, режим FW_PROTECT устанавливается в 1. Крайне желательно на этом шаге так же задать размер прошивки, чтобы иметь контрольную сумму устанавливаемой микропрограммы. Затем требуется перезапустить устройство. Начнется установка микропрограммы. Индикатор событий будет информировать пользователя о своих действиях. Ключи могут быть разных типов. Прошивка может быть предназначена для конкретного устройства с определенным ID, установить ее можно будет только на целевое устройство, либо на любые устройства.
Если параметр не задан или равен 0, а так же если FW_PROTECT не равен 1, установка лицензионной микропрограммы производиться не будет.