|
LPC2214 External Memory Interface, Непонятная временная диаграмма |
|
|
|
Nov 18 2006, 09:51
|
Знающий
   
Группа: Свой
Сообщений: 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.
|
|
|
|
|
 |
Ответов
|
Nov 22 2006, 08:47
|
Местный
  
Группа: Свой
Сообщений: 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  . ИМХО NOP-ов надо не 1 а на всю операцию чтения/записи. Для BCFG0=0 у Вас и чтение и запись исполняются 3 или 4 CCLK-такта (см описание BCFG0.IDCY). Т.е. нопов надо минимум 4 (ну или может 4-1=3, но врядли) а то и ещё больше. А команды переходов это частный случай этой задержки. Это чтобы CS и OE возвращались. А для того чтобы запись-чтение не переупорядочивались в чтение-запись возможно и одного такта задержки хватит, но это уже зависит от реализации отложенной записи, если это она, если нет то вообще не понятно!  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.
|
|
|
|
|
Nov 22 2006, 12:20
|
Знающий
   
Группа: Свой
Сообщений: 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.
|
|
|
|
|
Nov 22 2006, 12:47
|
Знающий
   
Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847

|
Цитата(amw @ Nov 22 2006, 13:20)  Сейчас выключу MAM и проверю. Проверил. Выключил MAM. Просто закоментировал строки его включения. Временная диаграмма стала ПРАВИЛЬНОЙ (с моей точки зрения). На каждую операцию свой собственный CS. А дальше чудеса!!!!!!!!!!!!!!!!!!!! Убрал коментарии - то есть вернул программу в предидущее состояние. Временная диаграмма ОСТАЛАСЬ ПРАВИЛЬНОЙ. Подчеркиваю!!! Коментарий ставился на пустых строках перед и после строк настройки MAM. Потом просто убрал коментарий. В самих настройках MAM НИЧЕГО НЕ МЕНЯЛОСЬ. Перепроверил это несколько раз. Вот сижу тупо смотрю на осцилограф. И что мне теперь делать после этого? Считать, что исправилось само собой? А если фаза луны поменяется?
--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть. © Lewis Carroll. Alice's adventures in wonderland.
|
|
|
|
Сообщений в этой теме
amw LPC2214 External Memory Interface Nov 18 2006, 09:51 zltigo Цитата(amw @ Nov 18 2006, 11:51) Неужели ... Nov 18 2006, 19:24 radist наблюдал этот эффект. много волос на себе порвал, ... Nov 19 2006, 21:18 zltigo Цитата(radist @ Nov 19 2006, 23:18) Я пер... Nov 19 2006, 21:27 Alex03 А компилятор ничего лишнего не оптимизирует?
Да и... Nov 20 2006, 08:45 makc Я эту проблему решаю вставкой nop между операциями... Nov 20 2006, 08:51 radist ЦитатаДругих (кроме еще больших, нежели описано) ... Nov 20 2006, 15:43 amw Выходит не я единственный такой везучий .
ЦитатаА... Nov 21 2006, 19:18 zltigo Цитата(amw @ Nov 21 2006, 18:18) BCFG0 = ... Nov 21 2006, 19:55   amw Цитата(amw @ Nov 22 2006, 13:47) Цитата(a... Nov 22 2006, 13:51
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|