Jump to content

    
AlexandrY

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

Recommended Posts

Стоит на плате такая 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 

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

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
41 minutes ago, aaarrr said:

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

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

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

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

Share this post


Link to post
Share on other sites
3 hours ago, AlexandrY said:

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

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

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

Share this post


Link to post
Share on other sites
45 minutes ago, AVI-crak said:

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

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

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

Share this post


Link to post
Share on other sites

Неверно, все адресные линии используются для инсталла, но А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 на внешнюю память, к нему ещё и смещение добавляется. А то что там из чипа торчит, и как подписано - с реальностью отношения не имеет.

 

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

Edited by AVI-crak

Share this post


Link to post
Share on other sites
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
Может брак? 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.