|
|
  |
Проверка SDRAM (ну и вообще памяти) |
|
|
|
Feb 14 2011, 10:00
|

Местный
  
Группа: Участник
Сообщений: 240
Регистрация: 14-04-10
Из: Россия, г.Челябинск
Пользователь №: 56 634

|
Здравствуйте! Есть проблема: программы с объявленным массивом более 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. Но проверка проходит. Такое ощущение что по верхним адресам расположено что-то еще.
|
|
|
|
|
Feb 14 2011, 10:35
|

Местный
  
Группа: Участник
Сообщений: 240
Регистрация: 14-04-10
Из: Россия, г.Челябинск
Пользователь №: 56 634

|
Цитата(DpInRock @ Feb 14 2011, 15:24)  Гордыня - это когда вместо проверки программы начинаешь проверять оборудование. Смертный грех.
Начните лучше сначала. Наверно плохо я объяснил. Есть пример для платы PHYTEC3250. У меня же mini3250. Взял пример POWERPAC'овский от PHYTEC. Пример LED_BLINK работает. Но как добавляешь к нему чего побольше, начинаются проблемы. Притом что линковка проходит нормально. Тайминги проверил. На первый взгляд все нормально. Цитата(MaslovVG @ Feb 14 2011, 15:26)  При тестировании памяти желательно сначала записывать весь тестируемый массив, и лишь затем проверять его правильность. Я предпочитаю писать псевдрслучайную М последовательность. Это позволяет обнаружить не только ошибки в ячейках но и ошибки дешифрации адресов и адресной шины (обрывы залипания на 0 или 1 отдельных битов как данных так и адресов). спасибо  а поконкретнее, как сгенерировать эту последовательность?
|
|
|
|
|
Feb 14 2011, 10:52
|
Профессионал
    
Группа: Свой
Сообщений: 1 210
Регистрация: 24-01-05
Из: Россия Волгодонск
Пользователь №: 2 134

|
Цитата(kolobochishe @ Feb 14 2011, 13:35)  спасибо  а поконкретнее, как сгенерировать эту последовательность? Берете XOR Двух старших битов значения переменной сдвгаете его влево на Бит вдвигая на младший бит значение от XOR P:= D15#D14 D0:= P D1:= D0 D2:= D1 ..... D15:=D14 Подробнее читайте генерация псевдослучайных чисел
|
|
|
|
|
Feb 14 2011, 20:15
|
Участник

Группа: Участник
Сообщений: 72
Регистрация: 29-01-11
Пользователь №: 62 559

|
Как вариант, посмотрите листинг программы, где что в каких областях памяти слинковалось. А не грузится это как? Скиньте сюда из окна JTAG что там выдаются за команды и какие ошибки, может на мысль наведет.
|
|
|
|
|
Feb 15 2011, 19:21
|
Участник

Группа: Участник
Сообщений: 72
Регистрация: 29-01-11
Пользователь №: 62 559

|
Цитата(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 контроллеру
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|