LINUX.ORG.RU

Отладка SDRAM

 , , ,


0

2

Есть куча рамы: чипы MT48LC32M16A2P-75.
Также есть китайский SoC. Развёл плату, спаял, ничего не работает. Из RAM всегда читается 0x123123.
Возможно, развёл неправильно или футпринт неправильный нарисовал, мог плохо пропаять. Проверил сейчас: вроде, всё хорошо. Возможно, неправильно проинициализирован контроллер. Прошивка вообще должна быть рабочая.
Вооружился осциллографом, посмотрел, что у меня там на ногах этой памяти: WE#, CAS#, RAS#, CS#, CLK.
Что бы ещё такого пощупать? Где и как искать корни проблемы?

★★★★★

Последнее исправление: CYB3R (всего исправлений: 1)

Из RAM всегда читается 0x123123.

Теперь надо лишь придумать полезную задачу, решение которой можно найти, принимая в качестве входных параметров лишь 0x123123.
:)

Stahl ★★☆
()
Ответ на: комментарий от anonymous

На WE# и RAS# один импульс раз в 25мкс, на CAS# и CS# два импульса раз в 25мкс.

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от Stahl

Дык, мне бы линукс загрузить, ему это не очень полезно.

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Да, я читал. Сейчас я использую прошивку, сорцов которой у меня нет, но есть информация, что с ней всё работает.
Исходники есть для другой прошивки, она тоже должна работать, я даже в ней какие-то тайминги поправил. Ковыряться в страшном низкоуровневом коде у меня скилла не хватит.

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от CYB3R

при инициализации написано нужно сделать команду NOP (CS=0,RAS=1,CAS=1,WE=1), затем PRECHARGE (0,0,1,0), затем два раза AUTO REFRESH(0,0,0,1). а то, что дальше идет только READ(0,1,0,1) и LOAD MODE REGISTER (0,0,0,0) вероятно правильно.

anonymous
()
Ответ на: комментарий от anonymous

а то, что дальше идет только READ(0,1,0,1) и LOAD MODE REGISTER (0,0,0,0) вероятно правильно.

уже сомневаюсь. как точно расположены CS, RAS, CAS, и WE друг относительно друга в периоде 25мс? (один луч на CAS# или CS# поставь, на тот который удобней)

anonymous
()
Ответ на: комментарий от anonymous

А что ты хочешь увидеть? Может, и есть там нужные команды, только я их не успеваю увидеть.
Если интересно, как сигналы на разных ногах расположены друг относительно друга, то вот так: CS [1, 1], RAS [0, 1], CAS [1, 1], и WE [1, 0].
Получаются команды 1011 (WRITE) и 1110 (AUTO REFRESH). Или я чего-то неправильно измерил.

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от ebantrop

У меня вместо человеческого UART'а костыль, потому я так вижу. На самом деле читается 0x123123123123.

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от CYB3R

На самом деле читается 0x123123123123.

То есть на самом деле читается 1231 2312 3123 с одного чипа. То есть выходит что работают только 2 бита, которые дают 1, 2 или 3.

А что значит «Есть куча рамы: чипы MT48LC32M16A2P-75.»? У тебя несколько чипов на одном девайсе? Как они соединены? Просто может быть работает только один из них, или наоборот не работает, и у него ноги в третьем состоянии что всегда 1 дает при чтении?

ebantrop
()
Ответ на: комментарий от ebantrop

На каждом девайсе только один чип.

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от CYB3R

я наверное чего-то не понимаю, но если отправляются команды записи и обновления данных внутри памяти, то каким образом ты что-то умудряешься читать из памяти?

anonymous
()
Ответ на: комментарий от anonymous

Да я вообще не понимаю, почему на RAM есть активность. Её вообще быть не должно, если я всё правильно понимаю.

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Похоже, придётся во всём этом разбираться. А хотелось «запустил и сразу работает».

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от CYB3R

А хотелось «запустил и сразу работает».

Если разведено правильно - так обычно и бывает на SDR (если на кастомном дизайне стоят чипы SDRAM аналогичной конфигурации с референсом), там частоты - херня. Начиная с DDR2 стандартом предусмотренны различные калибровки для учета топологии конкретного дизайна. На SDR максимум что можно сделать - понизить частоту, стабильность питания проверить - больше там хз что можно сделать.

anonymous
()
Ответ на: комментарий от CYB3R

Постоянно? Но зачем?


Конденсатор можно представить себе в виде небольшого дырявого «ведерка», которое при необходимости заполняется электронами. Если оно заполнено электронами, его состояние равно единице. Если опустошено, то нулю. Проблемой конденсатора является утечка. За считанные миллисекунды (тысячные доли секунды) полный конденсатор становится пустым. А это значит, что или центральный процессор, или контроллер памяти вынужден постоянно подзаряжать каждый из конденсаторов, поддерживая его в наполненном состоянии. Подзарядку следует осуществлять до того, как конденсатор разрядится. С этой целью контроллер памяти осуществляет чтение памяти, а затем вновь записывает в нее данные. Это действие обновления состояния памяти осуществляется автоматически тысячи раз за одну только секунду.

Конденсатор динамической оперативной памяти можно сравнить с протекающим ведром. Если его не заполнять электронами снова и снова, его состояние станет нулевым. Именно эта операция обновления и внесла в название данного вида памяти слово «динамическая». Такая память или обновляется динамически, или «забывает» все, что она «помнила». Есть у этой памяти существенный недостаток: необходимость постоянно обновлять ее требует времени и замедляет работу памяти.

http://hi-news.ru/hardware/fakty-kak-rabotaet-operativnaya-pamyat.html

CrossFire ★★★★★
()
Последнее исправление: CrossFire (всего исправлений: 1)
Ответ на: комментарий от CYB3R

Постоянно?

Не постоянно, а каждые 66 нан, если AUTO REFRESH, или каждые 64 миллисекунды если полное обновление. Зависит от того как там контролер сделан (см стр 18 ближе к концу). Иногда удобно вычитать бюрстом страницу и обновить весь модуль. Если у тебя процессор, то разумнее делать авто циклы.

Но зачем?

Ну как зачем, это же динамическая память, она так работает :)

ebantrop
()
Ответ на: комментарий от ebantrop

То есть на самом деле читается 1231 2312 3123

То есть я опять соврал. На самом деле там 0x0123012301230123, я сейчас проверил.

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от CYB3R

Постоянно? Но зачем?

Если у тебя такие познания разумно спросить - на китайской плате какие чипы памяти стояли ?

anonymous
()
Ответ на: комментарий от anonymous

Я это к чему спросил

я даже в ней какие-то тайминги поправил

там кроме этого главное в контроллере SDRAM задать правильную конфигурацию чипов - Row addressing, Column addressing, количество банков (это Table 2: Address Table в даташите на твои чипы). Если проблемы с SDR бывают то они чаще всего не так явно выражены как у тебя - просто тест памяти частично не проходит, так чтобы вообще мусор читался - это явные косяки либо в разводке либо в настройке контроллера.

anonymous
()
Ответ на: комментарий от anonymous

Да нет никакой китайской платы, у меня своя плата, не факт, что я развёл правильно, но я старался. Подключение RAM такое.

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от CYB3R

Да нет никакой китайской платы, у меня своя плата

Да не так важно если есть код загрузчика где настраивается контроллер SDRAM - там где ты прописывал тайминги - адресация правильно прописана для твоего чипа ?

anonymous
()
Ответ на: комментарий от CYB3R

Да нет никакой китайской платы, у меня своя плата, не факт, что я развёл правильно, но я старался. Подключение RAM такое.

А с другой стороны у тебя что? Чем ты эту память рулишь?

ebantrop
()
Ответ на: комментарий от anonymous

Оригинальные значения закомментированы, свои я взял из даташита:

//Here are these common definitions
//Once your system configration change,just modify the file

#define CONFIG_NR_DRAM_BANKS    1  /* SDRAM BANK Number: 1, 2*/
#define SDRAM_CASL              3       /* CAS latency: 2 or 3 */
// SDRAM Timings, unit: ns
//#define SDRAM_TRAS            45      /* RAS# Active Time */
//#define SDRAM_RCD             20      /* RAS# to CAS# Delay */
//#define SDRAM_TPC             20      /* RAS# Precharge Time */
//#define SDRAM_TRWL            7       /* Write Latency Time */
//#define SDRAM_TREF        15625       /* Refresh period: 4096 refresh cycles/64ms */

#define SDRAM_TRAS              44      /* RAS# Active Time */
#define SDRAM_RCD               20      /* RAS# to CAS# Delay */
#define SDRAM_TPC               20      /* RAS# Precharge Time */
#define SDRAM_TRWL              15      /* Write Latency Time */
#define SDRAM_TREF          7812        /* not sure */
Также в прошивку передаются такие аргументы:
SDRAM_BUSWIDTH=16
SDRAM_BANKS=4
SDRAM_ROWADDR=13
SDRAM_COLADDR=10
SDRAM_ISMOBILE=0
SDRAM_ISBUSSHARE=1

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от CYB3R

Подключение RAM такое.

Хехе - а почему у тебя CAS, RAS местами перепутаны ? у тебя команды неправильно декодируются. Посмотри даташит на память Figure 3: 32 Meg x 16 Functional Block Diagram

там где command decoder

anonymous
()
Ответ на: комментарий от CYB3R

Ох ты ж блин. Ведь и правда перепутаны.

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

anonymous
()
Ответ на: комментарий от CYB3R

По-моему, так и должно быть.

Сказал бы лучше что за процессор, на SDR это конечно не так важно, а с DDR такой финт ушами не прокатит - там по BA команды передаются.

anonymous
()
Ответ на: комментарий от anonymous

По-моему, так и должно быть.

Да - так может быть быть на китайском говне, но не должно.

anonymous
()
Ответ на: комментарий от CYB3R

Да какая разница какой национальности процессор. Важно как у него контролер SDRAM'а стартовать.

ebantrop
()
Ответ на: комментарий от anonymous

JZ4725B. Ещё мне достались JZ4725, на них есть документ, в котором описаны отличия от JZ4725B. Я так и не смог понять, изменены там функции ног или номера GPIO. Так что я пока не знаю, нужно мне новую плату разводить или просто хэдер написать.

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от CYB3R

JZ4725B

С BA скорей всего нормально все, судя по даташиту для JZ4725

The bank select signals are always output from the A13 pin and A14 pin of processor.

anonymous
()
Ответ на: комментарий от anonymous

Всё хорошо, потому что всё работает. Сейчас на двух платах накостылял обмен RAS и CAS, они загружаются.

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Есть всё-таки на ЛОРе умные анонимусы, которые за просто так вникают в твою проблему, помогают разобраться. Спасибо!

CYB3R ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.