Проблема инициализации SDRAM (Freescale iMX31)


10

Я пытаюсь изменить существующую последовательность инициализации (низкоуровневая инициализация SDRAM), чтобы приспособиться к изменению конфигурации оборудования: существующая SDRAM на моем iMX31 была заменена на другой размер, в остальном тот же тип / производитель / компоновка / контакты / тайминги. Согласно спецификации

Краткий сценарий установки и поведение при ошибках: мне удалось загрузить плату (последовательность такова: выполнить загрузчик из NAND, скопировать загрузчик step2 в RAM, выполнить загрузчик step2 из RAM). Но, похоже, у меня неправильные настройки, так как выполнение из ОЗУ (после перехода к шагу 2) не проходит постоянно.

Я провел большое количество углубленных тестов для определения неправильных параметров, мои результаты таковы: - чтение / запись одного байта / слова при выполнении из NAND или JTAG - блочная / пакетная запись, кажется, работает при выполнении из NAND ( JTAG также) Интересная вещь: - после блочной записи мне нужно многократное чтение на любом адресе SDRAM для чтения правильного байта / слова (!) - если я изменяю свои настройки столбца, чтобы ТОЛЬКО использовать большее (+1) количество столбцы для «режима загрузки», но не для предварительной зарядки / обновления, тогда это работает, но противоречиво (по моей теории это работает надежно для нижнего диапазона адресов, где отсутствующий столбец не имеет значения).

Чтобы получить представление о моем конфиге: настройки из ОЗУ практически идентичны тем, которые приведены в этом вопросе. Это неудивительно, поскольку они поставляются Freescale, помимо времени оперативной памяти: на Freescale iMX31 как я могу преобразовать адрес SDRAM в адрес процессора? Мои исходные настройки идентичны (также 64 МБ SDRAM, как в ссылке), моя новая оперативная память составляет 128 МБ. Все эталонные платы поставляются с 64 МБ или 128 МБ, поэтому оба значения поддерживаются iMX31 и производными.

Изменение, которое я должен сделать (внимание: предположение!) Только в конфигурации COLUMN (это еще один столбец) оперативной памяти. Объем оперативной памяти удваивается, но в остальном спецификация требует одинаковых временных интервалов и т. Д. Поскольку в ней имеется только еще один столбец (см. Ссылку выше, мои регистры режима предварительной зарядки, обновления и загрузки меняются с 0x92100000 на 0x92200000 для новой оперативной памяти - например, ) больше ничего не изменилось.

Вопрос 1: Имеет ли смысл мое предположение, что если все временные характеристики и физические характеристики микросхемы (влияющие на мощность диска, временные характеристики и энергопотребление) схожи, то изменение числа столбцов может быть «локальным» (не затрагивающим другие параметры)? Интересно, что я сравнил свои настройки со многими другими, доступными в Интернете (U-Boot, Red-Boot с 128 МБ), и помимо конкретных настроек платы, таких как мощность диска, я не вижу различий.

Вопрос 2: Мое вышеописанное поведение ошибки (пишет работает, читает только частично), вероятно, уникально для некоторой неверной настройки ОЗУ. Кто-нибудь может дать мне совет, на какую настройку взглянуть поближе? Также может быть возможно установить «безопасные» параметры, чтобы даже при сниженной производительности система позволила мне сузить кругозор.


Вы уверены, что проблема не связана с конструкцией оборудования (плохие микросхемы, ошибки компоновки, плохая целостность сигнала, недостаточное энергопотребление ...)?
JBarlow

Ответы:


1

Для 2 начните с настроек с демонстрационной платы iMX31. Затем измените их, как требуется для вашей части (скорость и размер в основном). В частности, у вас, вероятно, неправильное количество состояний ожидания при чтении.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.