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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> LPC1778 инициализация emc для sram, Не дергается нога WE. Не могу понять почему...
yanvasiij
сообщение Sep 12 2014, 13:03
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 321
Регистрация: 23-12-11
Из: Уфа
Пользователь №: 69 041



Вообщем вот схема подключения памяти.

Инициализация такая:
CODE

void SDRAMInit( void )
{
volatile uint32_t i;
volatile unsigned long Dummy;

LPC_IOCON->P3_0 = 0x21;
LPC_IOCON->P3_1 = 0x21;
LPC_IOCON->P3_2 = 0x21;
LPC_IOCON->P3_3 = 0x21;
LPC_IOCON->P3_4 = 0x21;
LPC_IOCON->P3_5 = 0x21;
LPC_IOCON->P3_6 = 0x21;
LPC_IOCON->P3_7 = 0x21;

LPC_IOCON->P4_0 = 0x21;
LPC_IOCON->P4_1 = 0x21;
LPC_IOCON->P4_2 = 0x21;
LPC_IOCON->P4_3 = 0x21;
LPC_IOCON->P4_4 = 0x21;
LPC_IOCON->P4_5 = 0x21;
LPC_IOCON->P4_6 = 0x21;
LPC_IOCON->P4_7 = 0x21;
LPC_IOCON->P4_8 = 0x21;
LPC_IOCON->P4_9 = 0x21;
LPC_IOCON->P4_10 = 0x21;
LPC_IOCON->P4_11 = 0x21;
LPC_IOCON->P4_12 = 0x21;
LPC_IOCON->P4_13 = 0x21;
LPC_IOCON->P4_14 = 0x21;
LPC_IOCON->P4_15 = 0x21;
LPC_IOCON->P5_0 = 0x21;

LPC_IOCON->P4_24 = 0x21;
LPC_IOCON->P4_25 = 0x21;

LPC_IOCON->P4_31 = 0x00;
LPC_GPIO4->DIR |= (1<<31);
LPC_GPIO4->SET |= (1<<31);
LPC_IOCON->P4_30 = 0x21;
// EMC_Init();
// Init SDRAM controller
LPC_SC->PCONP |= 0x00000800;
/*Init SDRAM controller*/
/*Set data read delay*/
LPC_SC->EMCDLYCTL |= (8<<0);
LPC_SC->EMCDLYCTL |=(8<<8);

LPC_SC->EMCDLYCTL |= (8<<16);

LPC_EMC->Control = 0x01;
LPC_EMC->Config = 0x00;
LPC_EMC->StaticExtendedWait = 0x00;
LPC_EMC->StaticConfig0 = 0x00;
LPC_EMC->StaticWaitWen0 = 0x01;
LPC_EMC->StaticWaitOen0 = 0x01;
LPC_EMC->StaticWaitRd0 = 0x01;
LPC_EMC->StaticWaitWr0 = 0x01;
}



Скаттер файл для кейла такой:
Код
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************

LR_IROM1 0x00000000 0x00080000  {   ; load region size_region
  ER_IROM1 0x00000000 0x00080000  { ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  RW_IRAM1 0x10000000 0x00010000  { ; RW data
   .ANY (+RW +ZI)
  }
  
  RW_IRAM2 0x20000000 0x00007FFF  { ; RW data
.ANY (+RW +ZI)
  }
  
  RW_RAM1 0x80000000 UNINIT 0x02000000  { ; RW data
  ;rsramTesr.o (.data)
   sramTesr.o (.bss)
  
  }
}


В файле sramTesr.cpp всего одна строчка:
Код
unsigned char sramData[50];


В mаin.cpp делаю следующее:
Код
u8 hello[] = "Hello!\r";
extern unsigned char sramData[50];

int main (void)
{
    SystemInit();

...
    /**< init sram */
    SRAMInit ();
    /** waiting after init */
       ...
    
    /** ложу данные  в sram*/
    for (u8 i = 0; i < 8; i++)
    {
        sramData[i] = hello[i];
    }

    /**  достаю данные из срама */
    for (u8 i=0; i<8; i++)
    {
        while (uart.readyToSend() == 0);
        uart.sendChar (sramData[i]); /** Отправляю в uart и смотрю что вышло. Данные не совпадают */
    }

    while(1)
    {
    }
}


Данные не пишутся в SRAM по не ясной для меня причине. Чип селект дергается, OE при чтении дергается, но вот WE почему то не дергается, хотя по идее должен. Что я делаю не так?

Спасибо!
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Sep 12 2014, 13:24
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



а что заставит ваш срам разместиться в срамеsm.gif

unsigned char sramData[50]; - где привязка к области памяти?

может чтобы наверняка
int *sramData = 0x80000000;


Go to the top of the page
 
+Quote Post
toweroff
сообщение Sep 12 2014, 20:40
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(Golikov A. @ Sep 12 2014, 17:24) *
а что заставит ваш срам разместиться в срамеsm.gif

скаттер-файл
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Sep 12 2014, 20:47
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



RW_RAM1 0x80000000 UNINIT 0x02000000 { ; RW data
;rsramTesr.o (.data)
sramTesr.o (.bss)

}

а что-то типа

.ANY (+RW +ZI) Не?
Go to the top of the page
 
+Quote Post
toweroff
сообщение Sep 12 2014, 21:07
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



По идее, это как раз заставит расположить данные модуля sramTesr.o в области 0x80000000 - 0x82000000
Желательно бы ТС приложить map-файл, было бы сразу понятно, почему сигнал /WR не генерится - или настройки EMC какие-то не те, или все-таки данные лежат не в области EMC static
Go to the top of the page
 
+Quote Post
yanvasiij
сообщение Sep 15 2014, 04:12
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 321
Регистрация: 23-12-11
Из: Уфа
Пользователь №: 69 041



Прикладываю map-файл и небольшую выдержку из него:
Код
    .bss                                     0x80000000   Section       50  sramtesr.o(.bss)


При обращении к sramData дергается чип-селект (при чтении еще дергается OE). Мне казалось что с размещением данных проблем нет...
Go to the top of the page
 
+Quote Post
toweroff
сообщение Sep 15 2014, 13:29
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Установите бит 7 (PB) в Static Memory Configuration registers, будет и /WR дергаться. Старые грабли wink.gif
Go to the top of the page
 
+Quote Post
yanvasiij
сообщение Sep 16 2014, 04:24
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 321
Регистрация: 23-12-11
Из: Уфа
Пользователь №: 69 041



Цитата(toweroff @ Sep 15 2014, 19:29) *
Установите бит 7 (PB) в Static Memory Configuration registers, будет и /WR дергаться. Старые грабли wink.gif


Помогло! Спасибо Вам большое!
Go to the top of the page
 
+Quote Post
yanvasiij
сообщение Sep 16 2014, 11:03
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 321
Регистрация: 23-12-11
Из: Уфа
Пользователь №: 69 041



А вот такой вопрос еще: можно ли скаттером теперь поместить EMAC_LPC177x_8x.c в сраму. А этот драйвер много памяти ест, я хочу его вместе со стеком туда утащить. Просто когда я так делаю, программа перестает пинговаться
Код
LR_IROM1 0x00000000 0x00080000  {   ; load region size_region
  ER_IROM1 0x00000000 0x00080000  { ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  RW_IRAM1 0x10000000 0x00010000  { ; RW data
   .ANY (+RW +ZI)
  }
  
  RW_IRAM2 0x20000000 0x00007FFF  { ; RW data
    

  }
  
  RW_RAM1 0x80000000 UNINIT 0x0000FFFF  { ; RW data
{
    EMAC_LPC177x_8x.o (.bss)
  }
  
   RW_RAM2 0x81000000 UNINIT 0x0000FFFF  { ; RW data
    
  }
}


Я просто так делал с SDRAM - там все прекрасно работало. А тут вот беда...
Go to the top of the page
 
+Quote Post
toweroff
сообщение Sep 16 2014, 20:27
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Ну так добавить в SRAM обласьт еще к (.bss) и просто EMAC_LPC177x_8x.o
Go to the top of the page
 
+Quote Post
yanvasiij
сообщение Sep 17 2014, 04:30
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 321
Регистрация: 23-12-11
Из: Уфа
Пользователь №: 69 041



Цитата(toweroff @ Sep 17 2014, 02:27) *
Ну так добавить в SRAM обласьт еще к (.bss) и просто EMAC_LPC177x_8x.o


Что то не совсем понимаю как. Попробовал вот так:
Код
  RW_RAM1 0x80000000 UNINIT 0x0000FFFF  {; RW data
{
    EMAC_LPC177x_8x.o (.bss)
  }

Но это не помогло.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Sep 17 2014, 08:38
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(yanvasiij @ Sep 17 2014, 08:30) *
Что то не совсем понимаю как. Попробовал вот так:
Код
  RW_RAM1 0x80000000 UNINIT 0x0000FFFF  {; RW data
{
    EMAC_LPC177x_8x.o (.bss)
  }

Но это не помогло.


Код
  RW_RAM1 0x80000000 UNINIT 0x0000FFFF  {; RW data
{
    EMAC_LPC177x_8x.o
    EMAC_LPC177x_8x.o (.bss)
  }

Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Sep 17 2014, 09:54
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



EMAC_LPC177x_8x.o - а это случаем не разместит весь код в сраме?
Тогда надо еще загрузчик делать, который из флэши его в срам перебросит.

Go to the top of the page
 
+Quote Post
toweroff
сообщение Sep 17 2014, 10:37
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Судя по скаттеру, он там присутствует.
Go to the top of the page
 
+Quote Post
Mihey_K
сообщение Sep 18 2014, 13:46
Сообщение #15


Частый гость
**

Группа: Участник
Сообщений: 156
Регистрация: 27-09-06
Из: Irkutsk
Пользователь №: 20 747



Что-то нескладное получается - у LPC1778 адресация внешней SDRAM памяти начинается с 0xA0000000, а вы почему-то оперируете адресом 0x80000000. С адреса 0x80000000 управляется внешняя шина данных и адреса и используется для задания адресации NAND-flash. При записи в 0x80000000 данные и адрес просто выдаются на порты с нужными стробами для записи в NAND. А для SDRAM используются отдельные CS - EMC_DYCSx и адрес 0xA0000000 (для первого банка - EMC_DYCS0), 0xA1000000 (для второго банка - EMC_DYCS1) и т.д..

Сообщение отредактировал Mihey_K - Sep 18 2014, 14:06


--------------------
Блог о разработке на CC430, SIM900, GPS, ARM и не только...
Go to the top of the page
 
+Quote Post

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

 


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


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