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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> LPC4088+NOR Flash, Проблемы со статической памятью на CS1
Polaris
сообщение Aug 11 2013, 20:58
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 266
Регистрация: 8-12-05
Пользователь №: 11 964



Доброго всем времени суток!

Поднимаю постепенно проект на 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, но сейчас ничего не могу изменить.

Заранее спасибо!
Go to the top of the page
 
+Quote Post
toweroff
сообщение Aug 12 2013, 09:04
Сообщение #2


Гуру
******

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



Покажите на схеме, как подключена NOR

Очень вероятно, что с адресацией проблема

Go to the top of the page
 
+Quote Post
Polaris
сообщение Aug 12 2013, 10:02
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 266
Регистрация: 8-12-05
Пользователь №: 11 964



Цитата(toweroff @ Aug 12 2013, 11:04) *
Покажите на схеме, как подключена NOR

Очень вероятно, что с адресацией проблема


А что конкретно с адресацией? Вроде бы в ручном режиме идентификатор читается успешно, ноги практически все прозвонил - проблем не нашел. Или Вы не про железо?
Go to the top of the page
 
+Quote Post
toweroff
сообщение Aug 12 2013, 12:02
Сообщение #4


Гуру
******

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



В 16-битном варианте не используется A-1 (=DQ15) и A0 подключается к A1 EMC
Проверьте схемотехнику, возможно просто банально ошиблись с разводкой
Go to the top of the page
 
+Quote Post
Polaris
сообщение Aug 12 2013, 12:45
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 266
Регистрация: 8-12-05
Пользователь №: 11 964



Цитата(toweroff @ Aug 12 2013, 14:02) *
В 16-битном варианте не используется A-1 (=DQ15) и A0 подключается к A1 EMC
Проверьте схемотехнику, возможно просто банально ошиблись с разводкой

Это вроде бы как раз в байтовом режиме, а у нас вордовый, DQ15 - вывод шины данных. Плюс шифт в SCS я отключил. Схемотехника верна, если бы она не была верна - думаю, что не читался бы идентификатор чипа в режиме ручного управления выводами. Или я что-то не понимаю?
Go to the top of the page
 
+Quote Post
toweroff
сообщение Aug 12 2013, 13:10
Сообщение #6


Гуру
******

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



Цитата(Polaris @ Aug 12 2013, 16:45) *
Это вроде бы как раз в байтовом режиме, а у нас вордовый, DQ15 - вывод шины данных. Плюс шифт в SCS я отключил. Схемотехника верна, если бы она не была верна - думаю, что не читался бы идентификатор чипа в режиме ручного управления выводами. Или я что-то не понимаю?


так о том и речь sm.gif руками делаете все правильно, а EMC не может. A0 NOR точно приходит на A1 EMC?


посмотрите осциллографом все управляющие сигналы, что там вообще происходит...

Go to the top of the page
 
+Quote Post
Polaris
сообщение Aug 12 2013, 13:35
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 266
Регистрация: 8-12-05
Пользователь №: 11 964



Цитата(toweroff @ Aug 12 2013, 15:10) *
так о том и речь sm.gif руками делаете все правильно, а EMC не может. A0 NOR точно приходит на A1 EMC?


посмотрите осциллографом все управляющие сигналы, что там вообще происходит...


Нет, не приходит. Все соединено строго один к одному: A0 LPC -> A0 NOR, A1 LPC -> A1 NOR, ... , A24 LPC -> A24 NOR. Все, теперь понял sad.gif Разработчик накосячил с соединением...

Спасибо огромное за решение! Так бы и ходил-бродил вокруг да около sm.gif
Go to the top of the page
 
+Quote Post
Polaris
сообщение Aug 12 2013, 14:40
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 266
Регистрация: 8-12-05
Пользователь №: 11 964



Цитата(toweroff @ Aug 12 2013, 15:10) *
так о том и речь sm.gif руками делаете все правильно, а EMC не может. A0 NOR точно приходит на A1 EMC?


посмотрите осциллографом все управляющие сигналы, что там вообще происходит...


Хотя нет, знаете, я поспешил. Смещение для 16 бит можно скомпенсировать в SCS, там все настроено верно, так что вопрос остается открытым!
Go to the top of the page
 
+Quote Post
toweroff
сообщение Aug 12 2013, 15:26
Сообщение #9


Гуру
******

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



Цитата(Polaris @ Aug 12 2013, 18:40) *
Хотя нет, знаете, я поспешил. Смещение для 16 бит можно скомпенсировать в SCS, там все настроено верно, так что вопрос остается открытым!

Возможно, я что-то упустил... Но! Когда этот бит EMCSC в 0, адрес сдвигается на 1 бит. Таким образом, в A0 будет A1

И теперь посмотрите, что получается: A0 в EMC не используется, но вы-то его активно пользуете! Таким образом, дополнительная часть адреса также должна быть сдвинута!


Код
M16(MX29_BASE_ADDRESS + (0x555<<1)) = 0xAA;
M16(MX29_BASE_ADDRESS + (0x2AA<<1)) = 0x55;
M16(MX29_BASE_ADDRESS + (0x555<<1)) = 0x90;
Go to the top of the page
 
+Quote Post
Polaris
сообщение Aug 12 2013, 16:55
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 266
Регистрация: 8-12-05
Пользователь №: 11 964



Цитата(toweroff @ Aug 12 2013, 17:26) *
Возможно, я что-то упустил... Но! Когда этот бит EMCSC в 0, адрес сдвигается на 1 бит. Таким образом, в A0 будет A1

И теперь посмотрите, что получается: A0 в EMC не используется, но вы-то его активно пользуете! Таким образом, дополнительная часть адреса также должна быть сдвинута!


Код
M16(MX29_BASE_ADDRESS + (0x555<<1)) = 0xAA;
M16(MX29_BASE_ADDRESS + (0x2AA<<1)) = 0x55;
M16(MX29_BASE_ADDRESS + (0x555<<1)) = 0x90;


Нет, к сожалению sad.gif Я уже взвел этот бит сдвига, ничего это не изменило в общей картине.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Aug 12 2013, 17:39
Сообщение #11


Гуру
******

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



Цитата(Polaris @ Aug 12 2013, 20:55) *
Нет, к сожалению sad.gif Я уже взвел этот бит сдвига, ничего это не изменило в общей картине.

он, в этой ситуации, наоборот должен быть в 0. А все адреса (0x555, 0x2AA) нужно сдвинуть на 1 бит влево, чтобы, после выставления на шину в виде (An-A0)=>(A(n-1)-A1), они все-таки выставились для NOR как надо
Go to the top of the page
 
+Quote Post
Polaris
сообщение Aug 12 2013, 17:48
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 266
Регистрация: 8-12-05
Пользователь №: 11 964



Цитата(toweroff @ Aug 12 2013, 19:39) *
он, в этой ситуации, наоборот должен быть в 0. А все адреса (0x555, 0x2AA) нужно сдвинуть на 1 бит влево, чтобы, после выставления на шину в виде (An-A0)=>(A(n-1)-A1), они все-таки выставились для NOR как надо


Да нет, вроде бы. Когда смещения на шине нет, то нужно как раз взводить бит, чтобы A0 на EMC соответствовал A0 микросхемы памяти.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Aug 12 2013, 18:39
Сообщение #13


Гуру
******

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



Цитата(Polaris @ Aug 12 2013, 21:48) *
Да нет, вроде бы. Когда смещения на шине нет, то нужно как раз взводить бит, чтобы A0 на EMC соответствовал A0 микросхемы памяти.

ога, и как это Вы собираетесь обратиться по адресу 0x555, если к 16-битной шине EMC будет обращаться только по четным адресам и A0 вообще не используется?
И учтите, что адрес 0x555 - это адрес для NOR. А теперь почитайте, как работает EMC и что вообще реально будет на шине
Go to the top of the page
 
+Quote Post
Polaris
сообщение Aug 12 2013, 19:28
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 266
Регистрация: 8-12-05
Пользователь №: 11 964



Цитата(toweroff @ Aug 12 2013, 20:39) *
ога, и как это Вы собираетесь обратиться по адресу 0x555, если к 16-битной шине EMC будет обращаться только по четным адресам и A0 вообще не используется?
И учтите, что адрес 0x555 - это адрес для NOR. А теперь почитайте, как работает EMC и что вообще реально будет на шине

Ага, понял, то есть, как раз без отсутствия смещения нужно смещать адрес. Уже запутался со всем этим. Но вряд ли это поможет, потому что пробовал уже всевозможные комбинации, в том числе и сдвигал адрес на бит влево.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Aug 12 2013, 19:39
Сообщение #15


Гуру
******

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



Цитата(Polaris @ Aug 12 2013, 23:28) *
Но вряд ли это поможет, потому что пробовал уже всевозможные комбинации, в том числе и сдвигал адрес на бит влево.

1. EMCSC в 0. Это даст нам выставление на пинах EMC (An..A0) адреса в виде (An+1..A1). Если бит будет в 1, то нужный пин A0 не будет работать!
2. К baseaddr прибавляем нужный адрес, сдвинутый на 1 разряд влево
должно работать
Go to the top of the page
 
+Quote Post

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

 


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


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