Цитата
ATMEL LOADER VER 1.01 Apr 10 2008 16:03:20
*----------------------------------------*
DataFlash:AT45DB161
Nb pages: 004096
Page Size: 000528
Size=02162688 bytes
Logical address: 0xC0000000
*----------------------------------------*
1: Download Dataflash [addr]
2: Read Dataflash [addr]
3: Start U-BOOT
4: Clear bootloader section in Dataflash
5: Memory test
*----------------------------------------*
Enter: 2 C0000000
c0000000: 00000000 00000000 00000000 00000000 ................
c0000010: 00000000 00000000 00000000 00000000 ................
c0000020: 00000000 00000000 00000000 00000000 ................
c0000030: 00000000 00000000 00000000 00000000 ................
c0000040: 00000000 00000000 00000000 00000000 ................
c0000050: 00000000 00000000 00000000 00000000 ................
c0000060: 00000000 00000000 00000000 00000000 ................
c0000070: 00000000 00000000 00000000 00000000 ................
c0000080: 00000000 00000000 00000000 00000000 ................
c0000090: 00000000 00000000 00000000 00000000 ................
c00000a0: 00000000 00000000 00000000 00000000 ................
c00000b0: 00000000 00000000 00000000 00000000 ................
c00000c0: 00000000 00000000 00000000 00000000 ................
c00000d0: 00000000 00000000 00000000 00000000 ................
c00000e0: 00000000 00000000 00000000 00000000 ................
c00000f0: 00000000 00000000 00000000 00000000 ................
*----------------------------------------*
DataFlash:AT45DB161
Nb pages: 004096
Page Size: 000528
Size=02162688 bytes
Logical address: 0xC0000000
*----------------------------------------*
1: Download Dataflash [addr]
2: Read Dataflash [addr]
3: Start U-BOOT
4: Clear bootloader section in Dataflash
5: Memory test
*----------------------------------------*
Enter: 2 C0000000
c0000000: 00000000 00000000 00000000 00000000 ................
c0000010: 00000000 00000000 00000000 00000000 ................
c0000020: 00000000 00000000 00000000 00000000 ................
c0000030: 00000000 00000000 00000000 00000000 ................
c0000040: 00000000 00000000 00000000 00000000 ................
c0000050: 00000000 00000000 00000000 00000000 ................
c0000060: 00000000 00000000 00000000 00000000 ................
c0000070: 00000000 00000000 00000000 00000000 ................
c0000080: 00000000 00000000 00000000 00000000 ................
c0000090: 00000000 00000000 00000000 00000000 ................
c00000a0: 00000000 00000000 00000000 00000000 ................
c00000b0: 00000000 00000000 00000000 00000000 ................
c00000c0: 00000000 00000000 00000000 00000000 ................
c00000d0: 00000000 00000000 00000000 00000000 ................
c00000e0: 00000000 00000000 00000000 00000000 ................
c00000f0: 00000000 00000000 00000000 00000000 ................
Здесь я пропущу часть вывода, т.к. там тоже нули
Цитата
c0000400: fffffff fffffffff ffffffff ffffffff ................
c0000410: ffffffff ffffffff ffffffff ffffffff ................
c0000420: ffffffff ffffffff ffffffff ffffffff ................
c0000430: ffffffff ffffffff ffffffff ffffffff ................
c0000440: ffffffff ffffffff ffffffff ffffffff ................
c0000450: ffffffff ffffffff ffffffff ffffffff ................
c0000460: ffffffff ffffffff ffffffff ffffffff ................
c0000470: ffffffff ffffffff ffffffff ffffffff ................
c0000480: ffffffff ffffffff ffffffff ffffffff ................
c0000490: ffffffff ffffffff ffffffff ffffffff ................
c00004a0: ffffffff ffffffff ffffffff ffffffff ................
c00004b0: ffffffff ffffffff ffffffff ffffffff ................
c00004c0: ffffffff ffffffff ffffffff ffffffff ................
c00004d0: ffffffff ffffffff ffffffff ffffffff ................
c00004e0: ffffffff ffffffff ffffffff ffffffff ................
c00004f0: ffffffff ffffffff ffffffff ffffffff ................
Ну здесь такая же картина...c0000410: ffffffff ffffffff ffffffff ffffffff ................
c0000420: ffffffff ffffffff ffffffff ffffffff ................
c0000430: ffffffff ffffffff ffffffff ffffffff ................
c0000440: ffffffff ffffffff ffffffff ffffffff ................
c0000450: ffffffff ffffffff ffffffff ffffffff ................
c0000460: ffffffff ffffffff ffffffff ffffffff ................
c0000470: ffffffff ffffffff ffffffff ffffffff ................
c0000480: ffffffff ffffffff ffffffff ffffffff ................
c0000490: ffffffff ffffffff ffffffff ffffffff ................
c00004a0: ffffffff ffffffff ffffffff ffffffff ................
c00004b0: ffffffff ffffffff ffffffff ffffffff ................
c00004c0: ffffffff ffffffff ffffffff ffffffff ................
c00004d0: ffffffff ffffffff ffffffff ffffffff ................
c00004e0: ffffffff ffffffff ffffffff ffffffff ................
c00004f0: ffffffff ffffffff ffffffff ffffffff ................
Вообщем получается что килобайт нормальных данных. килобайт 0xFFFFFFFF (нули стоят т.к. я очистил загрузочный сектор, если смотреть далее, то заместо нулей будут нормальные данные, вообщем так и болжно быть) и все поновой.
Дальше стал думать в чем причина, первое что пришло в голову это SDRAM. Внимательно прошелся по плате со линзой посмотрел на наличие непропаев. Вроде бы нет Написал простенькую подпрограмку тестирования памяти, вроде бы тоже все ок.
Вот навсякий случай ее код:
Код
printf("Starting memory test...\n\r");
while (1){
pSDRAM = (unsigned int *) 0x20000000;
for (wCount = 0;wCount < 0x1FFFFFF;wCount++){
wWrite=0x20000000+wCount;
*pSDRAM = wWrite;
wRead = *pSDRAM;
//delay
for(s_time=0;s_time<1000;s_time++);
if (wRead != wWrite)
printf ("!\n\rAddress [0x%08X] = Write: 0x%08X, Read: 0x%08X\n\r",wWrite,wWrite,wRead );
pSDRAM++;
}
while (1){
pSDRAM = (unsigned int *) 0x20000000;
for (wCount = 0;wCount < 0x1FFFFFF;wCount++){
wWrite=0x20000000+wCount;
*pSDRAM = wWrite;
wRead = *pSDRAM;
//delay
for(s_time=0;s_time<1000;s_time++);
if (wRead != wWrite)
printf ("!\n\rAddress [0x%08X] = Write: 0x%08X, Read: 0x%08X\n\r",wWrite,wWrite,wRead );
pSDRAM++;
}
Потом попробовал поиграться с настройками SDRAM контроллера, безрезультатно
Следующее, что подверглось тестированию это флешка, поменял флешки местами на плате, результат тот же, но зато теперь есть точно уверенность что он оби рабочие.
Далее, что стал проверять, это непосредственно данные которые брались из SPI. Дошел до функции AT91F_SpiWrite(), в ней есть два указателя на массив в памяти куда PDC будет кидать данные из SPI.
Код
/* Initialize the Transmit and Receive Pointer */
AT91C_BASE_SPI->SPI_RPR = (unsigned int)pDesc->rx_cmd_pt;
AT91C_BASE_SPI->SPI_TPR = (unsigned int)pDesc->tx_cmd_pt;
AT91C_BASE_SPI->SPI_RPR = (unsigned int)pDesc->rx_cmd_pt;
AT91C_BASE_SPI->SPI_TPR = (unsigned int)pDesc->tx_cmd_pt;
Если считывать эту память то действительно считываемые символы лежат там, но к моему разочарованию там же оказались и 0xFFFFFFFF Посмотрел на какой же адрес указывают эти указатели оказалось, что на rx_cmd_pt=0x000029FE, tx_cmd_pt=0x000029FE, т.е. куда-то в начало адресного пространства(странно как-то ведь SDRAM у нас находится совсем в другом месте, как собстно и SRAM).Может я где-то косяк допустил? Подскажите в каком направлении двигаться?
З.Ы. Да к стати думал о том что неправильно заданна частота PLL и соответстно памяти, но потом глянул в код и увидел, что PLL инициализируется только на шаге загрузке U-Boota, а у меня до этого даже не доходит. Выходит что пока вся система работает с частотой кварца. Исходник romboota брал с heavy.