Кто любит 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, точнее чем там я всё равно не расскажу
Спойлер
11. SAM9260 Boot Program
11.1 Description
The Boot Program integrates different programs permitting download and/or upload into the different memories of
the product.
First, it initializes the Debug Unit serial port (DBGU) and the USB Device Port.
Then the DataFlash Boot program is executed. It looks for a sequence of eight valid ARM exception vectors in a
DataFlash connected to the SPI. All these vectors must be B-branch or LDR load register instructions except for
the sixth vector. This vector is used to store the size of the image to download.
If a valid sequence is found, code is downloaded into the internal SRAM. This is followed by a remap and a jump to
the first address of the SRAM.
If no valid ARM vector sequence is found, the DataFlash Boot program is executed on the second chip select.
If no valid ARM vector sequence is found, NAND Flash Boot program is then executed.
The NAND Flash Boot program looks for a sequence of eight valid ARM exception vectors. If such a sequence is
found, code is downloaded into the internal SRAM. This is followed by a remap and a jump to the first address of
the SRAM.
If no valid ARM vector sequence is found, SAM-BA Monitor is then executed. It waits for transactions either on the
USB device, or on the DBGU serial port.
Если на пальцах, то всё происходит так. Процессор запускает из своей внутренней ПЗУ программу поиска откуда же он будет грузиться. В это время ПЗУ примаплена с 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

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