реклама на сайте
подробности

 
 
> LPC2214 External Memory Interface, Непонятная временная диаграмма
amw
сообщение Nov 18 2006, 09:51
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847



Собственно к LPC2214 подключен внешний чип (НЕ ПАМЯТЬ) по параллельной шине.
Используется EMC BANK0 в восмиразрядном режиме.

При выполнении нескольких последовательно идущих операций записи CS0 устанавливается в активный уровень и "под ним" идут несколько импульсов BLS0.
При выполнении операций чтения все нормально - на каждый импольс OE идет свой импульс CS.

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

Пример 1:

char C = 2;

*((char *)0x80000000) = C;
*((char *)0x80000001) = C + 1;
*((char *)0x80000002) = C + 2;
*((char *)0x80000003) = C + 3;

Приводит к появлению одного импульса CS и четырех импульсов BLS. Длительность CS перекрывает все импульсы BLS.


Пример 2:

char C = 2;
char X;

*((char *)0x80000000) = C;
X = *((char *)0x80000001) ;
*((char *)0x80000002) = C + 2;
X = *((char *)0x80000003);

Приводит к появлению двух импульсов CS. Под первым СНАЧАЛА импульс OE для адреса 0x80000001, ПОТОМ импульс BLS для адреса 0x80000000. Под вторым то-же самое для адресов 0x80000002 0x80000003.

Собственно адрес не имеет значение.

Пример 3:

*((char *)0x80000000) = C;
X = *((char *)0x80000000) ;

Или:

*((char *)0x800000E0) = C;
X = *((char *)0x80000008) ;

Приводит к тому-же результату, то есть СНАЧАЛА импульс OE, ПОТОМ импульс BLS.

И еще.
Обнаружил странную зависимость. Если перед и после оперции записи есть загрузка PC (ветвление, вызов подпрограмм) то все идет как по маслу, на каждый BLS выдается свой CS.

Прошерстил даташиты и ераты. Ничего по этому поводу не нашел.

Кто нибудь может хоть как-то покоментировать?


В догонку.

Проверить на другом CS не имею возможности ввиду занятых пинов другими функциями.

И вопрос:
Неужели это MAM такие фортели выкидывает?


--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть.
© Lewis Carroll. Alice's adventures in wonderland.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Alex03
сообщение Nov 22 2006, 08:47
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 359
Регистрация: 9-12-05
Пользователь №: 12 034



Цитата(zltigo @ Nov 21 2006, 21:55) *
Цитата(amw @ Nov 21 2006, 18:18) *

BCFG0 = 0;

Странно, очень странно видеть обнуленный. Сейчас не досуг разобраться, но странно. Вы уверены,
что "так надо"?


Для байтовой SRAM с минимальными ожиданиями - нормально.

Цитата(amw @ Nov 21 2006, 21:18) *
Цитата

Я эту проблему решаю вставкой nop между операциями записи. То же самое, AFAIR, и для чтения, т.к. при чтении контроллер шины может продержать СS и OE для нескольких последовательных адресов.


nop или другие команды не помогают. Помогает загрузка в PC sad.gif.


ИМХО NOP-ов надо не 1 а на всю операцию чтения/записи. Для BCFG0=0 у Вас и чтение и запись исполняются 3 или 4 CCLK-такта (см описание BCFG0.IDCY).
Т.е. нопов надо минимум 4 (ну или может 4-1=3, но врядли) а то и ещё больше. А команды переходов это частный случай этой задержки.
Это чтобы CS и OE возвращались.

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

PS А BCFG0.IDCY не пробовали увеличивать? Мож оно будет CS отпускать?
PPS Видимо филипс о многом умолчал вот тут:
Цитата
Figure 10 and Figure 11 are showing typical read and write accesses to external memory. However, variations can be noticed in some particular cases.
For example, when the first read access to the memory bank that has just been selected is performed, CS and OE lines may become low one XCLK cycle earlier than it is shown in Figure 10.
Likewise, in a sequence of several consecutive write accesses to SRAM, the last write access will look like those shown in Figure 11. On the other hand, leading write cycles in that case will have data valid one cycle longer. Also, isloated write access will be identical to the one in Figure 11.
Go to the top of the page
 
+Quote Post
amw
сообщение Nov 22 2006, 12:20
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847



Не ожидал такой полемики.

Может повторюсь, извините, но прояснить надо ситуацию, чтоб дискуссия не уходила в сторону.

ВСЕ СИГНАЛЫ ЕСТЬ И СООТВЕТСТВУЮТ РАЗРЯДНОСТИ И АДРЕСНОМУ ПРОСТРАНСТВУ. То есть пины адреса содержат правильный адрес, пины данных содержат правильные данные, сигналы выбора кристалла, разрешение выхода и выбора байта на правильных пинах. Там где и ожидалость.
Проблема в последовательности выдачи импульсов. Аппаратная проблема, как я понимаю.

Теперь по существу. BCFG=0 потому как задержки мне не нужны, плата разведена толково, быстродействие внешнего чипа соответствует. Ничего странного не вижу. Я бы еще уменьшил, да EMC не позволяет.

Количество нопов на временную диаграмму не влияет (до 64 включительно).

ldr r0, =0x80000000
mov r1, 5
str r1, [r0]
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
ldr r1, [r0]

дает ОДИН ИМПУЛЬС CS ПОД КОТОРЫМ СНАЧАЛА ИМПУЛЬС OE, А ПОТОМ ИМПУЛЬС BLS.

А вот такой код
ldr r0, =0x80000000
mov r1, 5
b dummy1
dummy1:
str r1, [r0]
b dummy2
dummy2:
ldr r2, [r0]

дает ДВА ИМПУЛЬСА CS. ПОД ПЕРВЫМ ИМПУЛЬС BLS, А ПОД ВТОРЫМ ИМПУЛЬС OE.

Загрузка в PC ДО операции записи предотвращает объединение операции записи с ПРЕДИДУЩЕЙ операцией чтения или записи.
Загрузка в PC ПОСЛЕ операции записи предотвращает объединение операции записи со СЛЕДУЮЩЕЙ операцией чтения или записи.


Сейчас выключу MAM и проверю.


--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть.
© Lewis Carroll. Alice's adventures in wonderland.
Go to the top of the page
 
+Quote Post
amw
сообщение Nov 22 2006, 12:47
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847



Цитата(amw @ Nov 22 2006, 13:20) *
Сейчас выключу MAM и проверю.


Проверил.

Выключил MAM. Просто закоментировал строки его включения.
Временная диаграмма стала ПРАВИЛЬНОЙ (с моей точки зрения).
На каждую операцию свой собственный CS.

А дальше чудеса!!!!!!!!!!!!!!!!!!!!
Убрал коментарии - то есть вернул программу в предидущее состояние.
Временная диаграмма ОСТАЛАСЬ ПРАВИЛЬНОЙ.

Подчеркиваю!!! Коментарий ставился на пустых строках перед и после строк настройки MAM. Потом просто убрал коментарий. В самих настройках MAM НИЧЕГО НЕ МЕНЯЛОСЬ.
Перепроверил это несколько раз.

Вот сижу тупо смотрю на осцилограф.

И что мне теперь делать после этого? Считать, что исправилось само собой? А если фаза луны поменяется? wacko.gif wacko.gif wacko.gif


--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть.
© Lewis Carroll. Alice's adventures in wonderland.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 16:53
Рейтинг@Mail.ru


Страница сгенерированна за 0.01406 секунд с 7
ELECTRONIX ©2004-2016