Я пытаюсь изменить существующую последовательность инициализации (низкоуровневая инициализация 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: Мое вышеописанное поведение ошибки (пишет работает, читает только частично), вероятно, уникально для некоторой неверной настройки ОЗУ. Кто-нибудь может дать мне совет, на какую настройку взглянуть поближе? Также может быть возможно установить «безопасные» параметры, чтобы даже при сниженной производительности система позволила мне сузить кругозор.
Ответы:
Для 2 начните с настроек с демонстрационной платы iMX31. Затем измените их, как требуется для вашей части (скорость и размер в основном). В частности, у вас, вероятно, неправильное количество состояний ожидания при чтении.
источник