Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

AT91SAM9260 загрузка с DataFlash

Вс сен 29, 2019 00:51:10

Здравствуйте! Досталась мне платка AS-SAM9. До этого с подобными чипами дела не имел - только кортексы и ARM7TDMI. Возникли проблемы с загрузкой. Компилирую тестовые проекты, грузу в SDRAM - все работает, но вот загрузиться с DataFlash никак не выходит. Собрал bootstrap из пакета at91sam9260-ek softpack 1.5 - гружу с помощью SAM-BA в Dataflash - заливка проходит корректно, но после перезапуска проца - на DBGU порту - тишина, хотя судя по исходникам bootstrap - он туда должен плевать отладочные сообщения. При том, что другие проекты, при загрузке в SDRAM и запуске на отладку работают корректно. Работаю в Keil. Собственно вопрос - что я делаю не так и куда копать?

ЗЫ: сама микросхема DataFlash - живая, тесты проходит (при запуске из SDRAM), линух с готового образа со скриптами для SAM-BA шьется и грузится.

ЗЗЫ: на форумах постоянно упоминается некий REMAP - где его задавать? Ноги у проца такой нет (или невнимательно смотрел?), либо этот как-то в стартап-файле прописывается?

Re: AT91SAM9260 загрузка с DataFlash

Вс сен 29, 2019 06:50:53

Начну с цитаты из Datasheet, точнее чем там я всё равно не расскажу
Если на пальцах, то всё происходит так. Процессор запускает из своей внутренней ПЗУ программу поиска откуда же он будет грузиться. В это время ПЗУ примаплена с 0-го адреса. Если процессор находит откуда он будет грузиться, то он загружает код в SRAM, переключает SRAM на 0-й адрес (делает REMAP) и запускает. В большинстве случаев это какой-то пользовательский загрузчик, который инициализирует SDRAM, загружает в него основную программу и передаёт ей управление. Для того чтобы стартовая программа приняла данные во флэшь за "достойные для загрузки" надо выполнить ряд условий, описанных в разделе "11.4.1 Valid Image Detection". Опять таки, на пальцах, то вектора прерываний должны быть командами перехода, а в шестом векторе размер прошивки лежать должен.

ЗЗЫ: на форумах постоянно упоминается некий REMAP - где его задавать? Ноги у проца такой нет (или невнимательно смотрел?), либо этот как-то в стартап-файле прописывается?
REMAP делается программно. Он перемещает внутреннюю SRAM чипа по нулевому адресу. Если вы грузитесь с DataFlash, то стартовая программа сама делает REMAP. Если загружаете код в память отладчиком, то REMAP должен сделать либо отладчик, либо сама пользовательская программа.

Насколько я помню, у этого чипа таблицу векторов прерываний нельзя произвольно в памяти располагать, поэтому пользовательское приложение, работающее в SDRAM, должно само свою таблицу векторов прерываний скопировать в ремапленую SRAM перед разрешением прерываний.

Ну собственно всё. В принципе, в даташите всё хорошо расписано, надо только читать.

Re: AT91SAM9260 загрузка с DataFlash

Вс сен 29, 2019 16:47:18

Спасибо за инфу, частично прояснилось. Вот только не совсем понял, где должны лежать (в коде) упомянутые вектора - в .s - файле? У меня он начинается вот таким образом (из атмеловского примера bootstrap):

Код:
; Standard definitions of Mode bits and Interrupt (I & F) flags in PSRs

ARM_MODE_USR        EQU     0x10
ARM_MODE_FIQ        EQU     0x11
ARM_MODE_IRQ        EQU     0x12
ARM_MODE_SVC        EQU     0x13
ARM_MODE_ABT        EQU     0x17
ARM_MODE_UND        EQU     0x1B
ARM_MODE_SYS        EQU     0x1F

I_BIT               EQU     0x80            ; when I bit is set, IRQ is disabled
F_BIT               EQU     0x40            ; when F bit is set, FIQ is disabled

AT91C_BASE_AIC      EQU     0xFFFFF000
AIC_IVR             EQU     0x100
AIC_EOICR           EQU     0x130


Подозреваю, что все-же это не оно, поэтому бутстрап не стартует, верно?

Re: AT91SAM9260 загрузка с DataFlash

Вс сен 29, 2019 17:23:33

Лежит в стартапе там где таблица векторов прерываний. Кинь свой стартап - найдём :)

Re: AT91SAM9260 загрузка с DataFlash

Вс сен 29, 2019 18:31:59

Тут лимит на заливку файлов у меня исчерпан :( Закинул на гитхаб кейловский пример: https://github.com/r2aiv/Keil_sam9260_b ... /SAM9260.s

UPD: вектора там начинаются аж со строки 1333

Re: AT91SAM9260 загрузка с DataFlash

Вс сен 29, 2019 18:44:15

Строки 1316 по 1329 упрости до просто константы да и всё. Оставь просто DCD 0x1000. Константу по дпташиту проверь.

Re: AT91SAM9260 загрузка с DataFlash

Вс сен 29, 2019 18:47:34

Завелось пересобранным примером с другого компа. Видимо, я что-то там запорол ) Теперь буду дальше разбираться как там все функционирует ) Спасибо за помощь!
Ответить