ST-ONE имеет встроенную систему краткой справки. Это файл readme.txt, который располагается в корне эмулируемого диска. Файл не является статичным, а генерируется для каждого конкретного устройства и версии загрузчика динамически. Здесь собраны основные данные для вашего чипа и загрузчика.
Значения параметров представленных в этом файле помогут быстро сориентироваться. Быстро начать разработку или обратиться в службу технической поддержки вашего изделия сообщив ключевые параметры устройства.
Файл предназначен только для чтения, все его изменения сохранены не будут.
Параметр | Назначение |
---|---|
TARGET MCU | Целевой процессор, для которого собран загрузчик |
UNIQUE ID | Уникальный ID контроллера в HEX (12 байт) |
OFFSET FWR | Точка входа в основную микропрограмму |
OFFSETJACK | Точка входа в JACK |
SYSTEMTIME | Текущее время календаря контроллера (RTC) |
FAT SYSTEM | Файловая система загрузчика |
SERVICE MD | PIN и значение для перехода в сервисный режим (SERVICE MODE) |
FORMATTING | PIN и значение для запуска системного форматирования |
STARTUP FW | PIN и значение для запуска основной микропрограммы |
FW_SIZE | Размер основной микропрограммы из файла firmware.ini принятый к расчету MD5 |
FW_HASH | MD5 основной прошивки для контроля целостности |
Для разработчика программного обеспечения будут актуальны параметры точек входа в программу OFFSET FWR и OFFSETJACK. Эти параметры необходимо указать в настройках сборки вашего проекта.
Вести разработку рекомендуется в одной из лучших сред разработки для ARM систем KEIL uVision (MDK-ARM). При создании основной микропрограммы необходимо зайти в настройки проекта и задать точку входа в программу из OFFSET FWR:
Так же, для формирования BIN-файла вашей готовой микропрограммы, необходимо выполнить запуск дополнительной процедуры.
Настраивается это в параметрах проекта во вкладке USER:
$K\ARM\ARMCC\bin\fromelf.exe --bin --output=@L.bin !L
На этом настройка завершена, а программа будет успешно скомпилирована. После компиляции будет создан выходной BIN-файл, который можно записать в кристалл и загрузчик сможет с ним работать. Если программное обеспечение требуется закрыть лицензионным ключом - необходимо провести процедуру подписи вашей микропрограммы на нашем сайте.
Для сборки программ-утилит сервисного режима, необходимо задать другие настройки точки входа в среде разработки. Для этого используется параметр OFFSETJACK. Все остальные настройки остаются прежними.
Как видно выше - старт программы соответствует параметру OFFSETJACK, а размер является фиксированным 0xA800. При этом начало сегмента оперативной памяти так же изменяется на значение REAL_RAM_START + JACK_SIZE и равен 0x2000A800. Размером оперативной памяти, в этом случае, выступает остаток сегмента RAM: REAL_RAM_SIZE - JACK_SIZE и равен 0x57FF.
В этом случае программа полностью размещается в оперативной памяти устройства.
Если будет использован параметр DISABLE_IRQ из файла firmware.ini - вам следует включить прерывания в своей программе. Так же желательно
настроить адрес таблицы векторов прерываний, не смотря на то, что это так же сделает загрузчик. В процессе инициализации вашего ПО - VTOR может быть сбит.
Для безотказной работы, все микропрограммы, созданные для ST-ONE, должны начинаться со строк:
int main(void){
__disable_irq();
SCB->VTOR = OFFSET;
__set_MSP(*((volatile uint32_t *) OFFSET));
__DSB ();
__enable_irq();
.....
.....
Значение OFFSET как раз и берется из переменных OFFSET FWR и OFFSETJACK доступных в файле краткой справки readme.txt. В случае создания JACK-микропрограммы - OFFSET будет равен OFFSETJACK. В случае создания основной микропрограммы устройства OFFSET будет равен OFFSET FWR.
Разработку и отладку основной микропрограммы рекомендуется вести без участия загрузчика. То есть собирать и прошивать микропрограмму в кристалл программатором. При этом вы получаете полный функционал отладчика, а смещения и точки входа - остаются по умолчанию для вашего чипа. По завершению цикла разработки, микропрограмма собирается с необходимой точкой входа (адресом старта) и формируется BIN-файл готовый для загрузки в платы через ST-ONE.
Сложности могут возникнуть с отладкой JACK-микропрограммы. Так как отладчик не сможет ее просто так поместить в SRAM контроллера и передать управление. Для этого необходимо создать специальный INI-файл и указать его среде разработки:
KEIL_ini.ini
/*----------------------------------------------------------------------------
Setup() configure PC & SP for RAM Debug
*----------------------------------------------------------------------------*/
FUNC void Setup (void) {
SP = _RDWORD(0x20000000); // Setup Stack Pointer
PC = _RDWORD(0x20000004); // Setup Program Counter
_WDWORD(0xE000ED08, 0x20000000); // Setup Vector Table Offset Register
}
// executes upon software RESET
FUNC void OnResetExec (void) {
Setup(); // Setup for Running
}
load %L incremental
Setup(); // Setup for Running
Как видно из дампа выше - указатель стека и адрес таблицы векторов прерываний равняется адресу старта JACK, а начало программы +4. Таким образом, используя специальный файл инициализации, можно вести отладку кода прямо в оперативной памяти контроллера, получая при этом все возможности отладки. Повторная сборка JACK с другими параметрами для публикации не требуется - это готовый код.