Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проверка SDRAM (ну и вообще памяти)
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
kolobochishe
Здравствуйте!

Есть проблема: программы с объявленным массивом более 10кБ не грузится J-TAG программатором в модуль mini3250 (LPC3250 с 64МБ памяти SDRAM)

Можно ли проверить работу SDRAM с помощью такого кода?

Код
int i, pattern, pread;
int * p;

pattern = 0x0F0F0F0F;

for (i = 0x80000000; i<0x88000000; i++)
{
  p = (int *) i;
  * p = pattern;
  pread = * p;
  if (pread =! pattern)
  {
    printf ("Write test data to adr %X\n", p);
    printf ("Reading %X\n", pread);
  }
}

printf ("Testing completed\n");


Мою проверку память проходит, но программа так и не грузится.

Реализация памяти - 2 чипа 16Mx16 включенных параллельно. Разделены только 32 бита данных. Одна часть в одном чипе, вторая - во втором.

Ну и верхний адрес проверки что-то не совпадает. По идее должно быть не больше 0x81FF FFFF. Но проверка проходит. Такое ощущение что по верхним адресам расположено что-то еще.
DpInRock
Крестьянин говорит: у меня мешок с картошкой на телегу не грузится.
Не может такого быть. Правильно. Не может.
Ибо крестьянин скажет - нет места, или там у мешка ноги вырастают и он убегает.

Гордыня - это когда вместо проверки программы начинаешь проверять оборудование. Смертный грех.

Начните лучше сначала.
MaslovVG
При тестировании памяти желательно сначала записывать весь тестируемый массив, и лишь затем проверять его правильность.
Я предпочитаю писать псевдрслучайную М последовательность. Это позволяет обнаружить не только ошибки в ячейках но и ошибки дешифрации адресов и адресной шины (обрывы залипания на 0 или 1 отдельных битов как данных так и адресов).
kolobochishe
Цитата(DpInRock @ Feb 14 2011, 15:24) *
Гордыня - это когда вместо проверки программы начинаешь проверять оборудование. Смертный грех.

Начните лучше сначала.


Наверно плохо я объяснил. Есть пример для платы PHYTEC3250. У меня же mini3250. Взял пример POWERPAC'овский от PHYTEC. Пример LED_BLINK работает. Но как добавляешь к нему чего побольше, начинаются проблемы. Притом что линковка проходит нормально. Тайминги проверил. На первый взгляд все нормально.

Цитата(MaslovVG @ Feb 14 2011, 15:26) *
При тестировании памяти желательно сначала записывать весь тестируемый массив, и лишь затем проверять его правильность.
Я предпочитаю писать псевдрслучайную М последовательность. Это позволяет обнаружить не только ошибки в ячейках но и ошибки дешифрации адресов и адресной шины (обрывы залипания на 0 или 1 отдельных битов как данных так и адресов).


спасибо sm.gif а поконкретнее, как сгенерировать эту последовательность?
MaslovVG
Цитата(kolobochishe @ Feb 14 2011, 13:35) *
спасибо sm.gif а поконкретнее, как сгенерировать эту последовательность?

Берете XOR Двух старших битов значения переменной сдвгаете его влево на Бит вдвигая на младший бит значение от XOR
P:= D15#D14
D0:= P
D1:= D0
D2:= D1
.....
D15:=D14
Подробнее читайте генерация псевдослучайных чисел
DpInRock
Цитата
Но как добавляешь к нему чего побольше, начинаются проблемы.

Гружу, барин, а оно не грузится. Потому что проблема.

Случаем, от чего ее питаете? Нежто без несущей платы включили?
kolobochishe
Цитата(DpInRock @ Feb 14 2011, 16:27) *
Гружу, барин, а оно не грузится. Потому что проблема.

Случаем, от чего ее питаете? Нежто без несущей платы включили?


Ну запитать то не проблема. Паяльник есть, схема на модуль тоже есть. Прицепили еще терминал через уарт самодельный на FT2232 и кнопки SERVICE_N и RESET привесили. Ну и JTAG через переходник припаяли.
scorp2011
Как вариант, посмотрите листинг программы, где что в каких областях памяти слинковалось.
А не грузится это как? Скиньте сюда из окна JTAG что там выдаются за команды и какие ошибки, может на мысль наведет.
kolobochishe
Bad JTAG communication^ Write to IR: Expected 0x1, got 0xf (TAP Command : 2) @ Off 0x9

и еще одно после него

Could not read memory location 0x80002D94 when trying to clear soft RAM BP

Вот такое сообщение, если массив просто объявить глобально. А если глобально и добавить __no_init (в ИАРе работаю), то все работает.
Размер массива, который можно объявить без сообщения об ошибке - чуть меньше 10к элементов (40к байт).

В линкере диапазон памяти - SDRAM от 0x8000 0040 до 0x83FF FFFF

kolobochishe
В общем, похоже, проблема в таймингах. Где-то, что-то не так выставлено.
scorp2011
Цитата(kolobochishe @ Feb 15 2011, 08:49) *
Bad JTAG communication^ Write to IR: Expected 0x1, got 0xf (TAP Command : 2) @ Off 0x9

и еще одно после него

Could not read memory location 0x80002D94 when trying to clear soft RAM BP

Вот такое сообщение, если массив просто объявить глобально. А если глобально и добавить __no_init (в ИАРе работаю), то все работает.
Размер массива, который можно объявить без сообщения об ошибке - чуть меньше 10к элементов (40к байт).

В линкере диапазон памяти - SDRAM от 0x8000 0040 до 0x83FF FFFF

Если программа нормально работает с той областью памяти а JTAG нет, то сравните настройки EMC SDRAM контроллера в программе с настройками в скрипте, в скрипте чтото не то. Не забудьте про настройки клоков относящихся к EMC контроллеру
AlexandrY
Цитата(kolobochishe @ Feb 15 2011, 14:19) *
В общем, похоже, проблема в таймингах. Где-то, что-то не так выставлено.


Что, китайцы вообще никакого тестового софта к своим платам не дают?
Или там по китайски все как всегда? wink.gif
kolobochishe
Есть там софт. Для линукса и бутлоадеры S1L и u-boot.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.