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

 
 
 
Reply to this topicStart new topic
> LPC2378 и контроллер внешней SRAM памяти, Не работает OE выход
MiniMax
сообщение Feb 15 2008, 10:58
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 12-09-07
Пользователь №: 30 498



Пробую запустить EMC контроллер на LPC2378.
Внешняя SRAM память CY7C1049CV33-15VXC ( 512K x 8).

Про ERRATA насчет EMC знаю
EMC.1: Write operation cannot be performed on the external memory bus
Introduction: The External Memory Controller supports asynchronous static memory device support including
RAM, ROM, and Flash, with or without asynchronous page mode.
Problem: Write operation is not operational.
Workarounds: Using all the EMC pins as GPIO pins, the write operation can be simulated in software.

Попробовал симулировать EMC контроллер программным путем используя IO's.
Все работает отлично. Память пишется и читается. Т.е. проблем с аппаратной частью нет.

Но по некоторым сведениям в новых версиях LPC2378 контроллер внешней памяти должен работать.
Это инициализированные регистры EMC
EMC_CTRL=0x1
EMC_STA_CFG0=0x100
EMC_STA_WAITWEN0(MAX 0x0F)=0xF
EMC_STA_WAITOEN0(MAX 0x0F)=0xF
EMC_STA_WAITRD0(MAX 0x1F)=0x1F
EMC_STA_WAITPAGE0(MAX 0x1F)=0x1F
EMC_STA_WAITWR0(MAX 0x1F)=0x1F
EMC_STA_WAITTURN0(MAX 0x3F)=0xF

При операции записи вижу осциллографом, что СS и WR выводы работают как им и положено.
При операции чтения вижу осциллографом, что СS работает. Но OE не работает. Висит там 2.2V постоянно.
Шина данных и адресов похоже, что работает также.

PINSEL9 иницализирован

// Control Bus
// OE
PINSEL9 &=(~((1UL<<16)|(1UL<<17)));
PINSEL9 |=(1UL<<17);
// WE
PINSEL9 &=(~((1UL<<18)|(1UL<<19)));
PINSEL9 |=(1UL<<19);
// CS0
PINSEL9 &=(~((1UL<<28)|(1UL<<29)));
PINSEL9 |=(1UL<<28);


Интересная вещь. Запись похоже, что работает.
А чтение не работает. Т.е. все наоборот, если мы сравним с ERRATA SHEET :-)

В чем могут быть проблемы с OE ?
Go to the top of the page
 
+Quote Post
Vitaliy_ARM
сообщение Feb 15 2008, 14:20
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246



Поставьте чип с ревизией B или A. Там таких проблем нет.
Ревизия В уже давно продается везде.

Сообщение отредактировал Vitaliy_ARM - Feb 15 2008, 14:22


--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
Go to the top of the page
 
+Quote Post
MiniMax
сообщение Feb 15 2008, 14:36
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 12-09-07
Пользователь №: 30 498



На чипе написано
LPС2378FBD144
SH3719.1 11
ZS00742BY

Я так подозреваю, что это и есть ревизия B ?
У Вас работает LPC2378 с внешней SRAM или FLASH ?
Можете привести правильный код инициализации?
Спасибо
Go to the top of the page
 
+Quote Post
Vitaliy_ARM
сообщение Feb 15 2008, 14:53
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246



Работаю с LPC2468. Инициализация вот:

Код
//------------------------------------------------------------------------------
//* Инициализация контроллера SRAM
void SramInit(void)
{  
  DWORD dummy = dummy;
  //*************************************************************************
  //* Инициализация EMC and SRAM
  //*************************************************************************
  //  SCS     |= 0x00000002;    /* Reset EMC */
  EMC_CTRL = 0x00000003;        /* Enable Address mirror*/
  PCONP   |= 0x00000800;        /* Turn On EMC PCLK */
  // Конфигурация портов ввода/вывода
  // P3.0 - P3.7 => D0 - D7
  // P4.0 - P4.15 => A0 - A15
  // P4.24 = ~OE
  // P4.25 = ~WE
  // P4.30 = CS0
  // P4.31 = CS1
  //* шина данных подключена полностью
  PINSEL6  = 0x55555555;
  PINSEL7  = 0x55555555;
  //* шина адреса 12 разрадная  
  PINSEL8  = 0x00555555;
  PINSEL9  = 0x00010000;
  
  EMC_CONFIG        = 0;    // Litle indian
  // Шина 32 бит
  // POR включен
  // Чип селект по высокому уровню
  // Extended wait disabled
  // Write bufer disabled
  // Write not protected
  EMC_STA_CFG0      = (1<<6)|(1<<3)|(1<<1); // Async page mode enabled (page length four).
  delayMs(100);
  EMC_STA_WAITWEN0  = 0;
  EMC_STA_WAITOEN0  = 0;
  EMC_STA_WAITRD0   = 0;
  EMC_STA_WAITPAGE0 = 0;
  EMC_STA_WAITWR0   = 0;
  EMC_STA_WAITTURN0 = 0xF;
  delayMs(100);    
  // Шина 32 бит
  // POR включен
  // Чип селект по высокому уровню
  // Extended wait disabled
  // Write bufer disabled
  // Write not protected
  EMC_STA_CFG1        = (1<<6)|(1<<3)|(1<<1);
  delayMs(100);
  EMC_STA_WAITWEN1  = 0;  
  EMC_STA_WAITOEN1  = 0;
  EMC_STA_WAITRD1   = 0;
  EMC_STA_WAITPAGE1 = 0;
  EMC_STA_WAITWR1   = 0;
  EMC_STA_WAITTURN1 = 0xF;
  delayMs(100);
  return;
}


Откорректируйте для 8 битной шины PINSEL и EMC_STA_CFG регистры по даташиту и должно завестись.


--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
Go to the top of the page
 
+Quote Post
MiniMax
сообщение Feb 15 2008, 15:01
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 12-09-07
Пользователь №: 30 498



Похоже, что Вы стартовали с кода в Keil примерах
http://www.standardics.nxp.com/support/doc...4xx.uvision.zip
Это EXTMEM example.
Но по поводу этого примера они говорят в README файле: "( LPC24xx only, tested on Embedded Artists LPC24xx OEM board)"
И у Вас как раз LPC2468. Не сомневаюсь , что это работает на LPC2468.
Но у меня LPC2378 :-( А вот с этим чипом большой вопрос.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Feb 15 2008, 19:15
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (MiniMax @ Feb 15 2008, 17:36) *
Я так подозреваю, что это и есть ревизия B ?

Как-бы да, но для полной уверенности у него еще идентификатор должен считываться:
0x1700FD25
а не
0x0703FF25
или
0x0703F925
QUOTE
У Вас работает LPC2378 с внешней SRAM или FLASH ?

Работаю только с LPC2468 там 8bit SRAM работает.
Инициализацию делал тупо по datasheet и никаой оригинальности нет:
CODE
      
      PCONP  |= 0x00000800;           // Turn On Power EMC PCLK
                EMCCONTROL = EMCCONTROL_ENABLE;     // EMC Enable


      PINSEL6 = 0x00005555;        // 8bit Bus Configuration
      PINSEL8 = 0x55555555;       //
              PINSEL9 = 0x10110015;             // CS0, BLS0 aka WE, OE, A18-16

      EMCSTATICCNFG0             = EMCSTATICCNFG_MW8|EMCSTATICCNFG_BUFFER_ENABLE;
      EMCSTATICWAITWEN0          = 0;
      EMCSTATICWAITOEN0          = 0;
      EMCSTATICWAITRD0           = 1;
    EMCSTATICWAITPG0         = 0;
      EMCSTATICWAITWR0           = 0;
      EMCSTATICWAITTURN0         = 0;
      EMCSTATICEXTENDEDWAIT     = 0;

Кстати, в приведенном Вами Кейловском наборе имеют место быть какие-то шаманские задержи, это я чего-то в datasheet просмотрел? Или обычный бред?
Естественно, что BUFFER можно и выключить, а EXTENDED_WAIT включить, эффект будет, но на факт
появления OE, естественно сие не влияет.
Работоспособность LPC2378/7 очень интересует - подумываю над тем, что у меня первой в жизнь должна пойти именно она а не LPC2468.

QUOTE (Vitaliy_ARM @ Feb 15 2008, 17:53) *
Работаю с LPC2468. Инициализация вот:
CODE
  PINSEL9  = 0x00010000;
}

Работаете??? А как это без CS и прочего удалось-то!!!!

Сообщение отредактировал zltigo - Jul 25 2010, 07:33


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
MiniMax
сообщение Feb 15 2008, 21:44
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 12-09-07
Пользователь №: 30 498



Проблема решена yeah.gif

Я использовал
UM10211 LPC2364/6/8/78 User manual
Rev. 01
6 October 2006 User manual


10 минут назад загрузил
http://www.standardics.nxp.com/support/doc...ual.lpc23xx.pdf

UM10211 LPC23xx User manual
Rev. 01.08
31 January 2008 User manual


И что же я вижу ? Описания не соответствуют.
В новом мануал говорится, что для OE pin надо записать "01" в PINSEL9, а не "10".

Короче говоря вот работающий финальный код инициализации EMC для LPC2378

EMC_CTRL = 0x00000001;
PCONP |= 0x00000800; /* Turn On EMC PCLK */
// Configure EMC pins
// Data Bus
PINSEL6 &= ~(0xFFFF);
PINSEL6 |= 0x5555;
// Address Bus
PINSEL8 = 0x55555555;
// Control Bus
// OE
PINSEL9 &=(~((1UL<<16)|(1UL<<17)));
PINSEL9 |=(1UL<<16);
// WE
PINSEL9 &=(~((1UL<<18)|(1UL<<19)));
PINSEL9 |=(1UL<<18);
// CS0
PINSEL9 &=(~((1UL<<28)|(1UL<<29)));
PINSEL9 |=(1UL<<28);


EMC_STA_CFG0 = 0x80;
EMC_STA_WAITWEN0 = 0x2;
EMC_STA_WAITOEN0 = 0x2;
EMC_STA_WAITRD0 = 0x1f;
EMC_STA_WAITPAGE0 = 0x1f;
EMC_STA_WAITWR0 = 0x1f;
EMC_STA_WAITTURN0 = 0x0f;

Работает и чтение и запись в пределах 64K банка.
Go to the top of the page
 
+Quote Post
Vitaliy_ARM
сообщение Feb 16 2008, 08:00
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246



Цитата(zltigo @ Feb 15 2008, 22:15) *
Работаете??? А как это без CS и прочего удалось-то!!!!


Просто у меня не память висит, а CPLD. Я его не использую совсем. У меня плисина генерирует внешнее прерывание, когда она уже подготовила данные. Пардон, этот кусок кода был взят из тестовой программы для проверки работоспособности CPLD.

Сообщение отредактировал Vitaliy_ARM - Feb 16 2008, 08:35


--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
Go to the top of the page
 
+Quote Post
Filip Filipov
сообщение May 26 2008, 09:16
Сообщение #9





Группа: Новичок
Сообщений: 2
Регистрация: 22-05-08
Пользователь №: 37 734



@MiniMax
Hi, i send you private message

I want to learn that how can i use the CY7C1049CV33-15VXC with LPC2468
i must write data to it very fast, i don't know

My Connections :
P4.24 / OE = OE
P4.25 / WE = WE
P4.30 / CS0= CE
P4.[0-18] / A0-A18 = Address of SRAM
P3.[0-7] / D0-D7 = Data of SRAM

Can you help me anyone?

Поздрави
Filip Filipov
Go to the top of the page
 
+Quote Post
MiniMax
сообщение May 26 2008, 10:58
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 12-09-07
Пользователь №: 30 498



Цитата(Filip Filipov @ May 26 2008, 13:16) *
I want to learn that how can i use the CY7C1049CV33-15VXC with LPC2468
i must write data to it very fast, i don't know
Filip Filipov


Hi Philip,
Unfortunately I have never used an LPC2468 on my side.
On my board an LPC2378 is installed which is slightly different.
It seemed a guy with nickname "zltigo" worked with that uC ( LPC2468).
Please contact him

Best regards,
MiniMax
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 26 2008, 21:09
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Filip Filipov @ May 26 2008, 11:16) *
Hi, i send you private message

I have got your personal message. As you haven’t asked any direct questions I don’t understand clearly how I can help you. One of the examples of initialization was mentioned some posts before. You should do your work yourself. If you have any precise questions you may try to ask.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Filip Filipov
сообщение Jun 4 2008, 09:58
Сообщение #12





Группа: Новичок
Сообщений: 2
Регистрация: 22-05-08
Пользователь №: 37 734



Цитата(zltigo @ May 27 2008, 00:09) *
I have got your personal message. As you haven’t asked any direct questions I don’t understand clearly how I can help you. One of the examples of initialization was mentioned some posts before. You should do your work yourself. If you have any precise questions you may try to ask.

Hi,
i don't know that how i can write into the SRAM and read?
i am using Keil and LPC2468, the SRAM is CY7C1049CV33-15VXC

I want to know how i can use this sram.

Best regards.

is this a direct question?
Go to the top of the page
 
+Quote Post
AVR
сообщение Jun 7 2008, 09:13
Сообщение #13


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Вероятно интурист хочет знать как работать с памятью после того как инициализация уже выполнена, т.е. как записать и считать, по какому адресу и т.д. ... smile.gif


--------------------
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 10 2008, 15:49
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(MiniMax @ Feb 15 2008, 23:44) *
Короче говоря вот работающий финальный код инициализации EMC для LPC2378
EMC_CTRL = 0x00000001;
PCONP |= 0x00000800; /* Turn On EMC PCLK */
.....

Грабли sad.gif, если PCONP EMC дейсвительно не активизирован то EMC_CTRL = 0x00000001, естественно не отработает и останется состояние по POR - с отзеркаленным CS0. Очень прикольно sad.gif
Правда, по POR EMC активирован, но вообще:
Код
    PCONP  |= 0x00000800;        /* Turn On EMC PCLK */
    EMC_CTRL = 0x00000001;


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

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

 


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


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