Перейти к содержанию
    

Тестирование SDRAM. Мистическая проблема.

Стоит на плате такая SDRAM.
Тип подключения к микроконтроллеру ARM-Cortex M4  - 13-bit row address, 9-bit column address

image.thumb.png.fe97a43aa4134f01255d759cb0076fae.png

Если всю ее заполнять последовательно случайными числами, а потом заново прочитать то все нормально, и не разу не фиксировалось ошибки за десятки прогонов. 
Но как только пытаешься заполнять  случайными числами по псевдослучайным адресам, то возникают ошибки.
Причем если адресное пространство разбить на 8 частей, и каждую тестировать псевдослучайным заполнением отдельно, то будет так:

  0x0000 0000 ... 0x0040 0000  good     
  0x0040 0000 ... 0x0080 0000  bad 
  0x0080 0000 ... 0x00С0 0000  bad 
  0x00C0 0000 ... 0x0100 0000  bad 
  0x0100 0000 ... 0x0140 0000  good    
  0x0140 0000 ... 0x0180 0000  bad 
  0x0180 0000 ... 0x01C0 0000  bad 
  0x01C0 0000 ... 0x0200 0000  bad 

Что можно напутать чтобы так получилось? 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это я знаю. Схема взята из Dev KIT-а, трассировка и распиновка многократно проверена.
Но главное, почему полное заполнение случайными числами не показывает ошибку? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

41 minutes ago, aaarrr said:

А характер ошибок какой?

Пишу байтами. Типа так:

    srand(magiс_variable);   
    for (i=0; i < blocks_size; i++)
    {
      addr = GetRandAddr();
      *((uint8_t *)addr)= rand();
    }

Когда все заполнено  читаю  и сравниваю опять с rand
Функция rand штатная из C.
Если ошибка, то читается совершенно другой байт. Причем появляется уже на втором шаге цикла
Но как понял, хотя глубоко не копал, если повторить тест с теми же числами, то и значения ошибочных байт повторятся.   
Системы я не обнаружил.   

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 hours ago, AlexandrY said:

Это я знаю. Схема взята из Dev KIT-а, трассировка и распиновка многократно проверена.

Ну не знаю, A0 это всегда SDRAM_A0. Сама память отдаёт по младшему адресу все 16 бит разом. DQM0, DQM1 - это как-раз для управления отдельными байтами. Периферийный блок sdram в ST - самостоятельно рулит адресацию, если его верно настроить.

А то что на схеме приклеено - просто не должно работать, внешний чип памяти инициализируется адресными линиями.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

45 minutes ago, AVI-crak said:

Ну не знаю, A0 это всегда SDRAM_A0. Сама память отдаёт по младшему адресу все 16 бит разом. DQM0, DQM1 - это как-раз для управления отдельными байтами. Периферийный блок sdram в ST - самостоятельно рулит адресацию, если его верно настроить.

А то что на схеме приклеено - просто не должно работать, внешний чип памяти инициализируется адресными линиями.

Схема рабочая. В том смысле что некоторые тесты SDRAM проходят отлично. 
Версия по поводу неправильной инициализации Mode Register в SDRAM могла бы быть интересной,
но именно в этой SDRAM c адреса A10 и выше можно писать что угодно, там эти биты не используются.  

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Неверно, все адресные линии используются для инсталла, но А12 не используется для адресации в mt48lc16 чипе. Эту линию можно посадить на землю, там всегда должен быть ноль. Просто адресные линии чипа ST и адресные линии внешней памяти - это немного разные вещи.

 

Начнём с того что на внешнем чипе А0 - это выборка в строке и столбце, команды подаются раздельно, и на выхлопе всегда данные в полной разрядности чипа. Это свойство позволяет использовать память с выхлопом в два бита данных - просто увеличивая количество микросхем памяти до необходимой ширины шины данных. 

В настройках sdram указывается ширина выборки страниц, которая физически зависит от объёма памяти делённое на 4096 бит (ширина страницы) и ещё на количество банков. А12 уже отпадает как адрес, и используется в выборе банка.

 

Выборка в пределах страницы настраивается косвенно, по ширине линий данных на чипе ST (указывается). При этом  DQM0~3, - это проекция адресных линий A0-A1. Интерфейс sdram может быстро читать блоком - всю страницу разом. Но количество внешних микросхем бывает разным, а сама внешняя память об этом ничего не знает. Есть настройка для чтения потоком, как для ST, так и для внешней памяти. По умолчанию записано и считается что подключена одна внешняя микросхема памяти, в этом случае ничего изобретать не нужно.

 

Для mt48lc16 адрес формируется так: DQM0, DQM1 (А0), быстрое чтение внутри строки (А1-А8), выборка строки (А9-А21), выбор банка (А22-А23). Вот это А0-А23 - это проекция адресного пространства ST на внешнюю память, к нему ещё и смещение добавляется. А то что там из чипа торчит, и как подписано - с реальностью отношения не имеет.

 

И ещё. У меня есть большая подборка журналов схемотехника, большое количество схем из интернетов, а так-же бумажная макулатура от советского наследия (хорошо горит между прочим). Дык вот, каждая вторая схема имеет ошибки!!! Ошибок нет там, где есть обратная связь между шансом появления ошибки - и доходом автора схемы. Например техническая документация на микросхему. А вот публичная схема с участим этой микросхемы - может содержать ошибку, потому как автору глубоко пофиг. 

Изменено пользователем AVI-crak

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 hours ago, aaarrr said:

Несомненно.

Да, это не STM, а скажем так, некий чип от Renesas-а.
Пока стало ясно, что ошибка не в замыканиях  или разрывах дорожек. 
На 3-х платах повторяется все один в один вплоть до неправильно считанных значений.   
И ошибки именно в произвольной адресации в банках SDRAM 1,2,3. 
В банке 0 все тесты проходят успешно.  
Т.е. имеем картину: если адрес по нарастанию переходит из банка 0 в банк 1 и далее, то все отлично, можно писать и читать любые байты, ничего не портится. 
Но если попытаться по произвольному адресу прочитать в одном банке, а потом по произвольному адресу в другом, то чтение будет с ошибкой.  
Прикольно, но если тест в отладчике после записи данных начать идти по шагам на этапе контрольного считывания, то ошибок вообще нет! Из этого следует, что портится не запись, а чтение. 

На всех чипах на корпусе чипа написано 7ZG12.
Т.е. то ли 2017-й то ли 2007-й год , 52 -я неделя, ревизия G (2003 года), countries of diffusion - USA, countries of encapsulation - Singapore
Может брак? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

17 hours ago, AlexandrY said:

Схема взята из Dev KIT-а

А возьмите этот самый Dev KIT и на нем попробуйте свою программу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...