Доброго всем времени суток!
Поднимаю постепенно проект на LPC4088, теперь столкнулся с проблемой реализации работы с NOR-Flash в связке с LPC4088. NOR - MX29GL512, это полный аналог S29GL512. На EMC висит кроме того еще SDRAM, она работает без вопросов, на данный момент я ее отключил, чтобы добиться хоть какой-то работоспособности флэшки. Со стороны железа все в полном порядке. После безуспешных попыток поднять статическую память на EMC написал функции чтения-записи тупо ногодрыганьем - ID памяти читается без ошибок.
Вод код инициализации:
Код
config.CSn = 1;
config.AddressMirror = 0;
config.ByteLane = 0;
config.DataWidth = 16;
config.ExtendedWait = 0;
config.PageMode = 0;
config.WaitWEn = 0x1f;//0x3;
config.WaitOEn = 0x1f;//0x3;
config.WaitWr = 0x1f;//0xA;
config.WaitPage = 0x1f;//0x8;
config.WaitRd = 0x1f;//0x5;
config.WaitTurn = 0x1f;//0x7;
StaticMem_Init(&config);
// pause
TIM_ConfigStruct.PrescaleOption = TIM_PRESCALE_USVAL;
TIM_ConfigStruct.PrescaleValue = 1;
TIM_Init(LPC_TIM0, TIM_TIMER_MODE,&TIM_ConfigStruct);
TIM_Waitms(1000);
Задержки выставил максимальные, чтобы никаких вопросов не было.
В соответствии со своим соединением изменил lpc_emc.c:
Код
for(i = 0; i < 32; i++)
{
if (i<=15)
PINSEL_ConfigPin(3,i,1);
if ((i<=25)||(i==31))
PINSEL_ConfigPin(4,i,1);
}
PINSEL_ConfigPin(5,0,1);
Отдадчик показывает по адресам с 0x90000000 всякий бред, чаще всего 0xff. ID чипа памяти тоже, естественно, не читается, только 0xff:
Код
#define M16(adr) (*((volatile unsigned short *) (adr)))
M16(MX29_BASE_ADDRESS + 0x555) = 0xAA;
M16(MX29_BASE_ADDRESS + 0x2AA) = 0x55;
M16(MX29_BASE_ADDRESS + 0x555) = 0x90;
SST_id1 = M16(MX29_BASE_ADDRESS + 0x00);
Поиск подобных проблем в инете дал следующий результат:
http://www.lpcware.com/content/forum/lpc17...flash-s29gl128pПроблема совершенно аналогична, только на lpc1788.
Может быть, кто-то сталкивался именно с проблемой использования EMC и CS1? Я уже во что угодно готов поверить после того, как пару дней назад обнаружил, что на LPC4088 второй порт USB ничего не пишет и не читает, если буфер обмена не расположен в памяти USB, про которую в даташите вообще ничего толком не сказано. Причем вроде бы подобная проблема была на LPC2478 и только на чтение, но, видимо, ошибки у них при использовании режимов работы чуть отличающихся от стандартных не проверяет никто. Если я не прав в этом - ткните меня, пожалуйста, в документацию, где про это написано.
Очень рассчитываю на чей-то опыт в данном вопросе, не хотелось бы работать с внешней памятью ручками. Не очень, правда, понимаю, зачем разработчик платы выбрал именно CS1, но сейчас ничего не могу изменить.
Заранее спасибо!