Здравствуйте! Досталась мне платка AS-SAM9. До этого с подобными чипами дела не имел - только кортексы и ARM7TDMI. Возникли проблемы с загрузкой. Компилирую тестовые проекты, грузу в SDRAM - все работает, но вот загрузиться с DataFlash никак не выходит. Собрал bootstrap из пакета at91sam9260-ek softpack 1.5 - гружу с помощью SAM-BA в Dataflash - заливка проходит корректно, но после перезапуска проца - на DBGU порту - тишина, хотя судя по исходникам bootstrap - он туда должен плевать отладочные сообщения. При том, что другие проекты, при загрузке в SDRAM и запуске на отладку работают корректно. Работаю в Keil. Собственно вопрос - что я делаю не так и куда копать?
ЗЫ: сама микросхема DataFlash - живая, тесты проходит (при запуске из SDRAM), линух с готового образа со скриптами для SAM-BA шьется и грузится.
ЗЗЫ: на форумах постоянно упоминается некий REMAP - где его задавать? Ноги у проца такой нет (или невнимательно смотрел?), либо этот как-то в стартап-файле прописывается?
AT91SAM9260 загрузка с DataFlash
- KT315B
- Сверлит текстолит когтями
- Сообщения: 1269
- Зарегистрирован: Пт июл 21, 2006 15:05:19
- Откуда: плод воображения
- Контактная информация:
AT91SAM9260 загрузка с DataFlash
R2AIV 73!
- Реклама
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: AT91SAM9260 загрузка с DataFlash
Начну с цитаты из Datasheet, точнее чем там я всё равно не расскажу
Если на пальцах, то всё происходит так. Процессор запускает из своей внутренней ПЗУ программу поиска откуда же он будет грузиться. В это время ПЗУ примаплена с 0-го адреса. Если процессор находит откуда он будет грузиться, то он загружает код в SRAM, переключает SRAM на 0-й адрес (делает REMAP) и запускает. В большинстве случаев это какой-то пользовательский загрузчик, который инициализирует SDRAM, загружает в него основную программу и передаёт ей управление. Для того чтобы стартовая программа приняла данные во флэшь за "достойные для загрузки" надо выполнить ряд условий, описанных в разделе "11.4.1 Valid Image Detection". Опять таки, на пальцах, то вектора прерываний должны быть командами перехода, а в шестом векторе размер прошивки лежать должен.
[uquote="KT315B",url="/forum/viewtopic.php?p=3709120#p3709120"]ЗЗЫ: на форумах постоянно упоминается некий REMAP - где его задавать? Ноги у проца такой нет (или невнимательно смотрел?), либо этот как-то в стартап-файле прописывается?[/uquote]REMAP делается программно. Он перемещает внутреннюю SRAM чипа по нулевому адресу. Если вы грузитесь с DataFlash, то стартовая программа сама делает REMAP. Если загружаете код в память отладчиком, то REMAP должен сделать либо отладчик, либо сама пользовательская программа.
Насколько я помню, у этого чипа таблицу векторов прерываний нельзя произвольно в памяти располагать, поэтому пользовательское приложение, работающее в SDRAM, должно само свою таблицу векторов прерываний скопировать в ремапленую SRAM перед разрешением прерываний.
Ну собственно всё. В принципе, в даташите всё хорошо расписано, надо только читать.
Спойлер
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.
[uquote="KT315B",url="/forum/viewtopic.php?p=3709120#p3709120"]ЗЗЫ: на форумах постоянно упоминается некий REMAP - где его задавать? Ноги у проца такой нет (или невнимательно смотрел?), либо этот как-то в стартап-файле прописывается?[/uquote]REMAP делается программно. Он перемещает внутреннюю SRAM чипа по нулевому адресу. Если вы грузитесь с DataFlash, то стартовая программа сама делает REMAP. Если загружаете код в память отладчиком, то REMAP должен сделать либо отладчик, либо сама пользовательская программа.
Насколько я помню, у этого чипа таблицу векторов прерываний нельзя произвольно в памяти располагать, поэтому пользовательское приложение, работающее в SDRAM, должно само свою таблицу векторов прерываний скопировать в ремапленую SRAM перед разрешением прерываний.
Ну собственно всё. В принципе, в даташите всё хорошо расписано, надо только читать.
- KT315B
- Сверлит текстолит когтями
- Сообщения: 1269
- Зарегистрирован: Пт июл 21, 2006 15:05:19
- Откуда: плод воображения
- Контактная информация:
Re: AT91SAM9260 загрузка с DataFlash
Спасибо за инфу, частично прояснилось. Вот только не совсем понял, где должны лежать (в коде) упомянутые вектора - в .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
R2AIV 73!
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: AT91SAM9260 загрузка с DataFlash
Лежит в стартапе там где таблица векторов прерываний. Кинь свой стартап - найдём 
- KT315B
- Сверлит текстолит когтями
- Сообщения: 1269
- Зарегистрирован: Пт июл 21, 2006 15:05:19
- Откуда: плод воображения
- Контактная информация:
Re: AT91SAM9260 загрузка с DataFlash
Тут лимит на заливку файлов у меня исчерпан
Закинул на гитхаб кейловский пример: https://github.com/r2aiv/Keil_sam9260_b ... /SAM9260.s
UPD: вектора там начинаются аж со строки 1333
UPD: вектора там начинаются аж со строки 1333
R2AIV 73!
- Реклама
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: AT91SAM9260 загрузка с DataFlash
Строки 1316 по 1329 упрости до просто константы да и всё. Оставь просто DCD 0x1000. Константу по дпташиту проверь.
- KT315B
- Сверлит текстолит когтями
- Сообщения: 1269
- Зарегистрирован: Пт июл 21, 2006 15:05:19
- Откуда: плод воображения
- Контактная информация:
Re: AT91SAM9260 загрузка с DataFlash
Завелось пересобранным примером с другого компа. Видимо, я что-то там запорол ) Теперь буду дальше разбираться как там все функционирует ) Спасибо за помощь!
R2AIV 73!


