1. Если ПЛИС загружалась по JTAG, то память работает нормально (рисунок 1), MicroBlaze выполняет код:
Код
/* Step 1: Send the Read CFI Command */
FLASH_WRITE(0x0055, CMD(0x0098));
/* Step 2: Check that the CFI interface is operable */
if( (FLASH_READ( 0x0010 ) != CMD(0x0051)) ||
(FLASH_READ( 0x0011 ) != CMD(0x0052)) ||
(FLASH_READ( 0x0012 ) != CMD(0x0059)) )
return Flash_CfiFailed;
2. Если ПЛИС стартовала с флэша, то память работает криво (рисунок 2), MicroBlaze выполняет код:
Код
/* Step 1: Send the Read CFI Command */
FLASH_WRITE(0x0055, CMD(0x0098));
/* Step 2: Check that the CFI interface is operable */
data = FLASH_READ( 0x0010 );
if( (FLASH_READ( 0x0010 ) != CMD(0x0051)) ||
(FLASH_READ( 0x0011 ) != CMD(0x0052)) ||
(FLASH_READ( 0x0012 ) != CMD(0x0059)) )
return Flash_CfiFailed;
Во втором случае, чтобы пройти инициализацию памяти, добавлена дополнительная операция чтения.
Для ядра AXI EMC есть настройки таймингов (рисунок 3), их взял из pg100, там как раз аналогичная память используется. Пробовал их менять, влияния не оказывают. Ещё пробовал менять частоту тактирования памяти, источник тактирования, разрешать тактирующую частоту через определённый интервал времени после загрузки прошивки - результат такой же.
Нужна помощь. Какие будут идеи?