Добрый день.
Решил поработать с DMA под линуксом, но для начала хочу поработать с ним на железе (на UART'ах). Для начала, собираю getting_started_project из примеров для AT91SAM9260-EK в IAR'е. Убираю джампер для загрузки с data_flash и джампер для загрузки с nand_flash, перезагружаю плату, втыкаю USB шнур, запускаю SAM-BA, инициализирую SDRAM на 100MHz, шью проект в SDRAM по начальному адресу 0x20000000 (по умолчанию). Закрываю SAM-BA, вытыкаю USB шнур, перезагружаюсь и в терминале ничего кроме:
ROMBoot
>
При том, что считаный из SDRAM бинарник соответствет полностью собраному в IAR'е бинарнику. Что я сделал не так?
На всякий случай - в linux атмеловский драйвер uart поддерживает dma из коробки. При работе с dma в linux нужно а первую очередь не забывать о том чтобы буфер был некэшируемый и выделять память под него используя специальные ф-ции.
Как справедливо написал Павел - из SDRAM ARM стартовать не будет. В datasheet на 9260 есть соответствующий раздел: 13. AT91SAM9260 Boot Program
где описаны стартовые телодвижения АРМа по поиску валидного носителя программы для запуска. Перебираются порты SPI (Dataflash), Nand, USB Sam-ba и Com Dbgu..
А зачем такие сложности? Может проще после сброса, остановить Uboot и командой tftpboot куда-хочу что-хочу загрузить по сетке бинарник в SDRAM. И запустить его (бинарник) go куда-хочу.
Для чистоты экперимента надо помнить что Uboot проинтил соответствующую периферию.