vesago 0 25 апреля, 2006 Опубликовано 25 апреля, 2006 · Жалоба В моей системе к LPC2214 подключены две срам as7c34098a и две флешки am29lv320b. В данный момент через уарт пытаюсь писать/читать данные. В срам если не более 5 байт длина блока пишется читается нормально. Если больше, то левые данные. Из флешки читаются нули, хотя по идее должны FF. Первое подозрение на кривой код, но я его в симуляторе кейла проверил. Потом ошибки монтажа. Но как я упоминал в отношении срам - по несколько байт нормально обрабатывается. Впрочем еще проверю. Меня интересует какие значения задержек надо выставлять при конфигурации EMC и надо-ли пины настраивать на вход/выход. В пинселе я сконфигурировал как надо. Еще - надо ли что-то подтягивать к питанию. Срам у меня 12 нс, флешь 90 нс. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 25 апреля, 2006 Опубликовано 25 апреля, 2006 · Жалоба ... Сумбурно :-( Очень. На мой взгляд в документации и в AN все изложено вполне доступно. За примерами железки и программ можете сходить на http://olimex.com/dev/index.html Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vesago 0 25 апреля, 2006 Опубликовано 25 апреля, 2006 · Жалоба Я правильно вас понял, что есть апликейшн нот по данной тематике? Я вроде все скачивал, но оного не обнаружил у себя. Просто некоторые высказывались, что к работе с внешней памятью LPC без бубна лучьше не подходить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doomer#gp 0 25 апреля, 2006 Опубликовано 25 апреля, 2006 · Жалоба Только что проверил. (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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 25 апреля, 2006 Опубликовано 25 апреля, 2006 · Жалоба Я правильно вас понял, что есть апликейшн нот по данной тематике? Я вроде все скачивал, но оного не обнаружил у себя. Просто некоторые высказывались, что к работе с внешней памятью LPC без бубна лучьше не подходить. AN10402 есть. Бубен не нужен, ибо все достаточно ясно описано в документации. Про "некоторых" ничего сказать не могу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vesago 0 25 апреля, 2006 Опубликовано 25 апреля, 2006 · Жалоба Спасибо. Буду разбираться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vesago 0 25 апреля, 2006 Опубликовано 25 апреля, 2006 · Жалоба Вроде работает. Закралась досадная ошибочка в программе. По крайней мере срам работает как часы. Хотел еще спросить - применяете ли тесты памяти при старте или это лишнее? И если применяете то каков их принцип? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 25 апреля, 2006 Опубликовано 25 апреля, 2006 · Жалоба Вроде работает. Закралась досадная ошибочка в программе. По крайней мере срам работает как часы. Ну вот, а то сразу "бубен" :-) Хотел еще спросить - применяете ли тесты памяти при старте или это лишнее? И если применяете то каков их принцип? По привычке да. При POST только простейшие 0x5...5 и 0xA....A и 'адрес' в 'данные'. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vesago 0 4 мая, 2006 Опубликовано 4 мая, 2006 · Жалоба Люди, помогите разобраться с записью в AM29LV320. Не могу в нее ничего записать. Перед созданием схемы посмотрел как у олимекса собрано. Единственное у меня две 16 битные флешки в 32 битном режиме. Поэтому трудно представить какие команды подавать надо. Читаю пишу с помощью родных дров амд. Может кто приведет пример кода. P_CAD_EDA____MEMORY_.pdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 4 мая, 2006 Опубликовано 4 мая, 2006 · Жалоба Пример кода: 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; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vesago 0 4 мая, 2006 Опубликовано 4 мая, 2006 · Жалоба Большое спасибо! Сейчас попробую. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vesago 0 4 мая, 2006 Опубликовано 4 мая, 2006 · Жалоба Попал я как кур во щи. Не пашут флешки хоть тресни. Чтобы я не делал - с них читается FF. Пробовал задействовать cmd_identify() тоже выдает 0xFF. Или сгорели или не правильно подключил сконфигурировал. Висят они на BCFG1. Проверьте если не затруднит - правильно ли я ее прописал. Ноги в пинселах тоже попрописывал. Еще - надо ли для флешек заводить BLS? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 4 мая, 2006 Опубликовано 4 мая, 2006 · Жалоба Вроде бы, все правильно прописано. BLS заводить не надо. А на осциллографе что видно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vesago 0 4 мая, 2006 Опубликовано 4 мая, 2006 · Жалоба Завтра загоню в цикл чтение сигнатуры, посмотрю осциллоскопом сигналы. Сейчас прозвонил плату - все как надо. К тому же у меня кроме флешек на 0 банке срам. Та как часы работает. А использует те же адресные шины, данных и we. Флешь отличается тока сбросом и подтяжками на wp и byte. Сброс флеши у меня через транзисторный ключ, который управляется с P3.24. Может тут собака зарыта. Сей сигнал имеет альтернативную функцию - CS3. Может в момент обращения к памяти все левые цс-ы в высокий уровень заводятся? Я его в принципе на вывод с 0 установил, чтоб он не сбрасывал флешь через ключ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vesago 0 5 мая, 2006 Опубликовано 5 мая, 2006 · Жалоба Посмотрел осцилом - все нормально. В смысле на адресных ногах, на данных, на wr, oe, cs вижу импульсы, на ресете чистый высокий уровень. 2aaarrr - вышеприведенный код вами использовался в указанной мной конфигурации? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться