понедельник, 9 января 2012 г.

Изучение arm - загрузка AT91RM9200

Как уже ранее отмечалось что после подачи питания процессорное ядро arm920t начинает выполнение кода с нулевого адреса памяти. этот адрес принадлежит загрузочному(boot) сектору общим объемом 1МБ



При старте Soc в зависимости от логического уровня на это пространство спроецирован либо встроенный ПЗУ либо внешний параллельный flash-накопитель. Если в качестве адреса загрузки выбран встроенный ПЗУ то происходит первичная инициализация периферии и поиск первичного загрузчика.

Перейдем к 84ой странице дш.
Как видно из графика происходит все с точностью как и было описано выше.

Т.е. идет перебор все возможны источников загрузки(SPI Dataflash, TWI eeprom, parralelflash, serilal и usb источники).
Загрузку с usb и с накопителей мы рассмотри позднее, а вот загрузку с последовательного порта мы изучим по подробнее, т.к. эта загрузка пока будет основной для нас.

Загрузка осуществляется по протоколу x-modem, размер загрузчика не может превышать 11КБ(это важно помнить, т.к. при превышении размера загрузчик просто срывает скачивание файла и Soc остается в "подвешенном" состоянии). Загрузка происходит на скорости 115200 бод(8бит, 1стопбит, без проверки четности). Код загружается во внутреннее статическое ОЗУ по начиная с нулевого адреса, после того как загрузка будет закончена происходит ремап(remap, обмен адресами) м/у ОЗУ и ПЗУ Soc. и процессорное ядро начинает исполнение снова с нулевого адреса в памяти. Обмен нужен для того чтобы избавится от пересчета адресов что положительно сказывается на всем коде для данного Soc.

На этом заканчивается теоретическое введение в AT91RM9200. Дальнейшие статьи буду в основном посвящены практике, лишь где это действительно необходимо будут теоретические отступления.