Перейти к содержанию
    

LPC2378 и контроллер внешней SRAM памяти

Пробую запустить 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 ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Ревизия В уже давно продается везде.

Изменено пользователем Vitaliy_ARM

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На чипе написано

LPС2378FBD144

SH3719.1 11

ZS00742BY

 

Я так подозреваю, что это и есть ревизия B ?

У Вас работает LPC2378 с внешней SRAM или FLASH ?

Можете привести правильный код инициализации?

Спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Работаю с 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 регистры по даташиту и должно завестись.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Похоже, что Вы стартовали с кода в 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 :-( А вот с этим чипом большой вопрос.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я так подозреваю, что это и есть ревизия B ?

Как-бы да, но для полной уверенности у него еще идентификатор должен считываться:

0x1700FD25

а не

0x0703FF25

или

0x0703F925

У Вас работает LPC2378 с внешней SRAM или FLASH ?

Работаю только с LPC2468 там 8bit SRAM работает.

Инициализацию делал тупо по datasheet и никаой оригинальности нет:

      
      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.

 

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

  PINSEL9  = 0x00010000;
}

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

Изменено пользователем zltigo

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проблема решена :yeah:

 

Я использовал

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 банка.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Изменено пользователем Vitaliy_ARM

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

EMC_CTRL = 0x00000001;

PCONP |= 0x00000800; /* Turn On EMC PCLK */

.....

Грабли :(, если PCONP EMC дейсвительно не активизирован то EMC_CTRL = 0x00000001, естественно не отработает и останется состояние по POR - с отзеркаленным CS0. Очень прикольно :(

Правда, по POR EMC активирован, но вообще:

    PCONP  |= 0x00000800;        /* Turn On EMC PCLK */
    EMC_CTRL = 0x00000001;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...