CMSIS2000
0.0.7
|
Загрузчик iboot является постоянно хранящимся во FLASH МК загрузчиком в функции которого входит 1.
Поиск образа загружаемой программы во FLASH в случае если поиск не успешен то выполнение пункта 4 2. Проверка заголовка программы и тела программы на CRC в случае если проверка не успешна то выполнение пред. пункта с другой стартовой позиции 3. Копирование программы во внешнюю или внутреннюю RAM в случае если Load Address заголовка указывает на ОЗУ 3. Запуск программы с адреса указанного в заголовке. 4. Загрузка образа программы с внешнего носителя USB FLASH во внутреннюю память. Если в заголовке Load Address и Entry Point не указывают на флешь , то загрузка происходит именно во FLASH с начала FLASH если Load Address указывает на FLASH то загрузка происходит начиная с Load Address. Если только Entry Point указывает на FLASH то загрузка происходит с адреса Entry Point
установлен бит "execute in place" то копирование происходит в адрес указанный в заголовке(а заголовок копируется в конец последнего сектора). Иначе копирование происходит в любое другое место FLASH.
Поиск образа осуществляется по сигнатуре и прочим атрибутам заголовка образа. Поиск осуществляется в следующем порядке 1. С конца загрузчика 2. С конца и начала каждого сектора FLASH (поиск с загрузчика до начала FLASH) 3. поиск во всей FLASH на наличие сигнатуры
В качестве формата образа выбран формат U-boot как наиболее распространённый. Образ программы состоит из заголовка и тела программы. Длина заголовка u-boot составляет 64 байта. Образ программы должен храниться по границе сектора FLASH. Если программа должна выполнятся из flash, то программа должна быть скомпонована так, чтобы первый адрес программы соответствовал адресу начального сектора .
Один файл с FLASH может иметь несколько образов формата UBOOT.
Некоторым исключением в поведении программы является если образ программы расположен с 0 адреса, в этом случае сначала храниться программа, а потом заголовок. При загрузке в нулевой сектор тело программы изменяется с тем, чтобы при сбросе устройства управление было передано на загрузчик.
Загрузчик может быть скомпилирован и прошит по произвольному адресу, предпочтительно в конце FLASH памяти.
Проблема размещения функций прошивки в ОЗУ!!! Функции поиска во флешь функции обновления ПО в ОЗУ. Обработчик прерывания тоже должен быть в ОЗУ?
В итоге большая часть функций в ОЗУ?
Условные обозначения EP – точка запуска образа (Entry Point) LA – адрес загрузки (Load Address)
Обеспечивается несколько вариантов размещения программы.
1. Файл помещается в ОЗУ и выполняется в ОЗУ. (LA указывает на ОЗУ,EP указывает на FLASH) Запуск происходит по адресу EP-START_OF_FLASH + LA.
2. Файл помещается в FLASH МК в любое доступное место по принципу "лишь бы уместилась" при перезапуске программа помещается в ОЗУ и выполняется в ОЗУ. (EP не в FLASH, LA не в FLASH) Сначала помещается заголовок потом тело программы.
3. Файл помещается в FLASH МК в по адресу Load Address (LA в пределах FLASH).
3а.При перезапуске программа выполняется начиная с адреса EP (EP в пределах FLASH) в FLASH ОЗУ.
3b. Файл имеет заголовок и размер тела меньше 4 байт, заголовок помещается в FLASH МК в любое доступное место по принципу "лишь бы уместилась", при запуске происходит передача управления по адресу EP.
3c. Файл имеет тип IH_TYPE_FILESYSTEM, заголовок помещается в FLASH МК по адресу LA или, если LA не указывает во FLASH то по принципу "лишь бы уместилась". При записи на FLASH LA будет указывать на место размещения образа во FLASH.
При запуске не происходит передача управления – используется для того, чтобы загрузить тот или иной массив данных во FLASH по определённому адресу. Если EP указывает не во FLASH, то при запуске идёт загрузка образа по адресу EP.