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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Помогите разобраться с подключением внешней памяти к LPC
vesago
сообщение Apr 25 2006, 06:13
Сообщение #1


Тутэйшы
****

Группа: Свой
Сообщений: 708
Регистрация: 30-11-04
Пользователь №: 1 263



В моей системе к LPC2214 подключены две срам as7c34098a и две флешки am29lv320b. В данный момент через уарт пытаюсь писать/читать данные. В срам если не более 5 байт длина блока пишется читается нормально. Если больше, то левые данные. Из флешки читаются нули, хотя по идее должны FF. Первое подозрение на кривой код, но я его в симуляторе кейла проверил. Потом ошибки монтажа. Но как я упоминал в отношении срам - по несколько байт нормально обрабатывается. Впрочем еще проверю. Меня интересует какие значения задержек надо выставлять при конфигурации EMC и надо-ли пины настраивать на вход/выход. В пинселе я сконфигурировал как надо. Еще - надо ли что-то подтягивать к питанию. Срам у меня 12 нс, флешь 90 нс.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 25 2006, 06:21
Сообщение #2


Гуру
******

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



Цитата(vesago @ Apr 25 2006, 09:13) *
...

Сумбурно :-( Очень. На мой взгляд в документации и в AN все изложено вполне доступно.
За примерами железки и программ можете сходить на
http://olimex.com/dev/index.html


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
vesago
сообщение Apr 25 2006, 06:49
Сообщение #3


Тутэйшы
****

Группа: Свой
Сообщений: 708
Регистрация: 30-11-04
Пользователь №: 1 263



Я правильно вас понял, что есть апликейшн нот по данной тематике? Я вроде все скачивал, но оного не обнаружил у себя. Просто некоторые высказывались, что к работе с внешней памятью LPC без бубна лучьше не подходить.
Go to the top of the page
 
+Quote Post
doomer#gp
сообщение Apr 25 2006, 07:44
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 382
Регистрация: 10-03-05
Из: USA
Пользователь №: 3 234



Только что проверил. (Olimex -LPC-2214) Записал/прочитал 256K все ОК.
Вот мои настройки:

// Set Data bus functionality
PINSEL2 = 0x0F000924;

// Initialization of EMC
//FLASH 16bit; IDCY = F; WST1 = 4; RBLE = 1; WST2 = 6
BCFG0=0x1000348F;
// SRAM 32bit; IDCY = F; WST1 = 0; RBLE = 1; WST2 = 0
BCFG1=0x2000040F;

Стоят две K6R4016V1D, flash 26LV800BTC
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 25 2006, 07:57
Сообщение #5


Гуру
******

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



Цитата(vesago @ Apr 25 2006, 09:49) *
Я правильно вас понял, что есть апликейшн нот по данной тематике? Я вроде все скачивал, но оного не обнаружил у себя. Просто некоторые высказывались, что к работе с внешней памятью LPC без бубна лучьше не подходить.

AN10402 есть.
Бубен не нужен, ибо все достаточно ясно описано в документации.
Про "некоторых" ничего сказать не могу.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
vesago
сообщение Apr 25 2006, 09:19
Сообщение #6


Тутэйшы
****

Группа: Свой
Сообщений: 708
Регистрация: 30-11-04
Пользователь №: 1 263



Спасибо. Буду разбираться.
Go to the top of the page
 
+Quote Post
vesago
сообщение Apr 25 2006, 11:44
Сообщение #7


Тутэйшы
****

Группа: Свой
Сообщений: 708
Регистрация: 30-11-04
Пользователь №: 1 263



Вроде работает. Закралась досадная ошибочка в программе. По крайней мере срам работает как часы. Хотел еще спросить - применяете ли тесты памяти при старте или это лишнее? И если применяете то каков их принцип?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 25 2006, 18:11
Сообщение #8


Гуру
******

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



Цитата(vesago @ Apr 25 2006, 14:44) *
Вроде работает. Закралась досадная ошибочка в программе. По крайней мере срам работает как часы.

Ну вот, а то сразу "бубен" :-)
Цитата
Хотел еще спросить - применяете ли тесты памяти при старте или это лишнее? И если применяете то каков их принцип?

По привычке да. При POST только простейшие 0x5...5 и 0xA....A и 'адрес' в 'данные'.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
vesago
сообщение May 4 2006, 09:08
Сообщение #9


Тутэйшы
****

Группа: Свой
Сообщений: 708
Регистрация: 30-11-04
Пользователь №: 1 263



Люди, помогите разобраться с записью в AM29LV320.
Не могу в нее ничего записать. Перед созданием схемы посмотрел как у олимекса собрано. Единственное у меня две 16 битные флешки в 32 битном режиме. Поэтому трудно представить какие команды подавать надо. Читаю пишу с помощью родных дров амд. Может кто приведет пример кода.
Прикрепленные файлы
Прикрепленный файл  P_CAD_EDA____MEMORY_.pdf ( 34.96 килобайт ) Кол-во скачиваний: 58
 
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 4 2006, 09:28
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Пример кода:

Код
void cmd_reset(void)
{
    *(volatile u_int *)(base_addr + 0x15554) = 0xaa00aa;    // Read/Reset sequence
    *(volatile u_int *)(base_addr + 0x0aaa8) = 0x550055;    //
    *(volatile u_int *)(base_addr + 0x15554) = 0xf000f0;    //
}

u_int cmd_write_word(u_int data)
{
    *(volatile u_int *)(base_addr + 0x15554) = 0xaa00aa;    // Program sequence
    *(volatile u_int *)(base_addr + 0x0aaa8) = 0x550055;    //
    *(volatile u_int *)(base_addr + 0x15554) = 0xa000a0;    //
    *(volatile u_int *)(base_addr + offset) = data;
    return cmd_data_poll(data);
}

u_int cmd_erase_flash(void)
{
    cmd_erase_seq();
    *(volatile u_int *)(base_addr + 0x15554) = 0x100010;
    offset = 0x00;
    return cmd_data_poll(0xff00ff);
}

void cmd_identify(void)
{
    *(volatile u_int *)(base_addr + 0x15554) = 0xaa00aa;    // Autoselect sequence
    *(volatile u_int *)(base_addr + 0x0aaa8) = 0x550055;    //
    *(volatile u_int *)(base_addr + 0x15554) = 0x900090;    //
    manuf_code  = *(volatile u_int *)(base_addr);
    device_code = *(volatile u_int *)(base_addr + 0x04);
}

u_int cmd_erase_sector(void)
{
    cmd_erase_seq();
    *(volatile u_int *)(base_addr + offset) = 0x300030;
    return cmd_data_poll(0xff00ff);
}

void cmd_erase_seq(void)
{
    *(volatile u_int *)(base_addr + 0x15554) = 0xaa00aa;    // Erase sequence
    *(volatile u_int *)(base_addr + 0x0aaa8) = 0x550055;    //
    *(volatile u_int *)(base_addr + 0x15554) = 0x800080;    //
    *(volatile u_int *)(base_addr + 0x15554) = 0xaa00aa;    //
    *(volatile u_int *)(base_addr + 0x0aaa8) = 0x550055;    //
}    

u_int cmd_data_poll(u_int data)
{
    u_int a;

    do
    {
        a = *(volatile u_int*)(base_addr + offset);
    } while(((data & 0x800080) != (a & 0x800080)) && ((a & 0x200020) != 0x200020));
    if((data & 0x800080) != (*(volatile u_int*)(base_addr + offset) & 0x800080)) return 0x01;
    return 0x00;
}
Go to the top of the page
 
+Quote Post
vesago
сообщение May 4 2006, 09:39
Сообщение #11


Тутэйшы
****

Группа: Свой
Сообщений: 708
Регистрация: 30-11-04
Пользователь №: 1 263



Большое спасибо! Сейчас попробую.
Go to the top of the page
 
+Quote Post
vesago
сообщение May 4 2006, 12:37
Сообщение #12


Тутэйшы
****

Группа: Свой
Сообщений: 708
Регистрация: 30-11-04
Пользователь №: 1 263



Попал я как кур во щи. Не пашут флешки хоть тресни. Чтобы я не делал - с них читается FF. Пробовал задействовать cmd_identify() тоже выдает 0xFF. Или сгорели или не правильно подключил сконфигурировал. Висят они на BCFG1. Проверьте если не затруднит - правильно ли я ее прописал. Ноги в пинселах тоже попрописывал.
Еще - надо ли для флешек заводить BLS?
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 4 2006, 16:39
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Вроде бы, все правильно прописано. BLS заводить не надо.
А на осциллографе что видно?
Go to the top of the page
 
+Quote Post
vesago
сообщение May 4 2006, 19:53
Сообщение #14


Тутэйшы
****

Группа: Свой
Сообщений: 708
Регистрация: 30-11-04
Пользователь №: 1 263



Завтра загоню в цикл чтение сигнатуры, посмотрю осциллоскопом сигналы. Сейчас прозвонил плату - все как надо. К тому же у меня кроме флешек на 0 банке срам. Та как часы работает. А использует те же адресные шины, данных и we. Флешь отличается тока сбросом и подтяжками на wp и byte. Сброс флеши у меня через транзисторный ключ, который управляется с P3.24. Может тут собака зарыта. Сей сигнал имеет альтернативную функцию - CS3. Может в момент обращения к памяти все левые цс-ы в высокий уровень заводятся? Я его в принципе на вывод с 0 установил, чтоб он не сбрасывал флешь через ключ.
Go to the top of the page
 
+Quote Post
vesago
сообщение May 5 2006, 09:55
Сообщение #15


Тутэйшы
****

Группа: Свой
Сообщений: 708
Регистрация: 30-11-04
Пользователь №: 1 263



Посмотрел осцилом - все нормально. В смысле на адресных ногах, на данных, на wr, oe, cs вижу импульсы, на ресете чистый высокий уровень. 2aaarrr - вышеприведенный код вами использовался в указанной мной конфигурации?
Go to the top of the page
 
+Quote Post

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

 


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


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