Необходимо чтобы в проекте была доступна вся SD-RAM начиная с адреса 0x20000000. Проект грузится изпод U-boot в адрес 0x20000000 и ему передаётся управление.
Единственнаое место где упоминается SD-RAM в проекте:
//------------------------------------------------------------------------------
/// Initialize and configure the SDRAM
//------------------------------------------------------------------------------
void BOARD_ConfigureSdram(unsigned char busWidth)
{
volatile unsigned int i;
static const Pin pinsSdram = PINS_SDRAM;
volatile unsigned int *pSdram = (unsigned int *) AT91C_EBI_SDRAM;
unsigned short sdrc_dbw = AT91C_SDRAMC_DBW_16_BITS;;
unsigned int tmp = 0;
WRITE(AT91C_BASE_SDRAMC, SDRAMC_MR, AT91C_SDRAMC_MODE_NORMAL_CMD); // Set Normal mode
pSdram[0] = 0x00000000; // Perform Normal mode
}
Эта функция определена в файле board memory.c и больше нигде не упоминается...
Я чайник полный, пока что. Но когда гружу проект через U-boot в SD-Ram, то мне пишет
Zero length ???
## Starting application at 0x20000000 ... и висит...
а должон выдавать в консоль сообщение об удачном старте....
а проект-то по сути простой (мигалка), но запустить что-то никак не получается...
Некторорые утверждают, что возможно проблема из-за того, что в getting-started-project(который я запускаю) присутствуют модули инициализации SD-RAM и пр. перифирии, которые уже запущены с помощью U-boot... (мой U-boot из поставки с платой)
Действительно, впроекте есть папка board, где есть сишные файлы инициализации памяти и ядра, и есть папка peripherals, где сишные файлы описания перифирии...
______________________________
В то же время другие разработчики утверждают что такой простой проект запускается через U-boot без проблем и доработок....
Непонятно кому верить.
______________________________
при компиляции в IAR 5.50 выходит 10 варнингов
8 такимх:
Remark[Pe068]: integer conversion resulted in a change of sign (путь к файлу ***.с)
и 2 таких:
Warning[Pe068]: integer conversion resulted in a change of sign
(путь к файлу ***.c)
может в этом проблема?
Я брал готовый бинарник, утверждалось что он рабочий, - тот же результат.
Я гружу проект в DataFlash по адресу 0х38000 через SAM-BA
указываю в командной строке U-boot адрес где лежит приложение, его размер, а та же адрес куда положить и откуда начать выполнение.
И тоже самое всё:
Zero length ???
## Starting application at 0x20000000 ... и висит...
у меня SAM9XE, поэтому прилагаю пример для него. это стандартный getteng-started, я там работу с светодиодами не правил, главное что он в консоль выдает сообщение о своем успешном запуске, т.е. можно убедиться что он правильно скомпилирован, и отсюда можно танцевать дальше.
грузить файл .bin через u-boot. стопоришь загрузку
tftp 0x20000000 at91sam9xe128_sdram.bin
go 0x20000000
если выдает сообщение типа:
-- Getting Started Project #############
такая-то плата
-- Compiled: тогда-то во столько-то
я частоту кварца вообще не смотрел и не менял наверное. я же говорю - это стандартная демка атмела, которая у меня заработала "сходу".
мой многолетний опыт программирования научил меня тому что не стоит пытаться сразу реализовать все задачу целиком - лучше разбить ее на отдельные этапы и передвигаться к следующему только после успешного выполнения предыдущего.
вы попробуйте сначала загрузить программу по tftp и успешно выполнить, потом будете прошивать .