Всем доброго дня!
Вопрос уже задавал в ветке "ARM32 для начинающих".
Проблема с записью в SDRAM массивов. Ошибки происходят либо при инициализации массива, либо при непрерывной записи в массив.
Сняли осциллограмму. На ней циклы записи в память идут очень плотно, даже без соблюдения правильной длительности отдельной операции записи. Если не добавлять в программе NOP между записью в конкретную ячейку памяти, то заполнение массива гибнет. Притом всегда в одном и том же месте при данных настройках.
При изменении таймингов место "краха" изменяется. И что особенно непонятно для меня - чем более длительные тайминги задаешь, тем больше NOP я должен поставить в программе.
Т.е. проблема не в несоблюдении таймингов в конкретной операции, а в том - что контроллер работает быстрее, чем память и пытается записать значения чаще, чем это допустимо, хотя в регистрах управления SDRAM вся информация о быстродействии памяти контроллеру "известна". Неужели необходимо снижение тактовой частоты контроллера, без снижения частоты работы SDRAM ? По-моему это маловероятно. А как "объяснить" контроллеру, что записывать чаще нельзя - я не могу найти.
Это лично мой взгляд на проблему. Высказывалась версия, что контроллер не может "впихнуть" команду REFRESH (64ms/8kb). Что тоже возможно. Но, опять же, где это задается в контроллере LPC3250, я что-то пока не нашел.
Еще, если есть возможность, киньте ссылку на литературу или хорошую статью по SDRAM.