Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32 внешняя SRAM
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
zksystem
Посоветуйте недорогую память объемом 512Кбайт - 1Mбайт, которую можно подключить к STM32 посредством FSMC.

Цитата(zksystem @ Feb 25 2009, 15:05) *
Посоветуйте недорогую память объемом 512Кбайт - 1Mбайт, которую можно подключить к STM32 посредством FSMC.



Извиняюсь, плохо смотрел, в девките STM3210E-EVAL оказывается есть в схеме - IS61WV51216BLL-10MLI 512к x 16
MikePic
Вот только стоит IS61WV51216BLL-10MLI как чугунный мост angry.gif 256К x 16 от Гнусмаса на порядок дешевле
shytsko.v
Доброго времени суток, форумчане. Прошу помощи в таком вот вопросе. Имею набор разработчика Open407I-C, в нем есть модуль SRAM с микросхемой IS62WV12816BLL.
Решил освоить STemWin, заодно и подцепить SRAM. И сразу столкнулся с проблемой, три месяца пытаюсь решить ее - не выходит.
Суть такая: при записи во внешнюю SRAM записывется не только та ячейка, которую хочу записать, но и другая ячека с адресом + 0x100 или -0x100 от записываемого адреса (+ или - зависит от бита 8 адреса).
Напримет (использую банк 3, базовый адрес 0x68000000):
пишу по адресу 0x68000000, тем же значением записывается и 0x68000100
пишу по адресу 0x68000100, тем же значением записывается и 0x68000000
Пробовал выставлять максимальные тайминги и снижать частоту контроллера вплоть до 16МГц, не помогает.
Заказал другой модуль, на микросхеме IS62WV51216BLL, ведет себя аналогично.

Мой код инициализации
Код
  hsram3.Instance = FSMC_NORSRAM_DEVICE;
  hsram3.Extended = FSMC_NORSRAM_EXTENDED_DEVICE;
  hsram3.Init.NSBank = FSMC_NORSRAM_BANK3;
  hsram3.Init.DataAddressMux = FSMC_DATA_ADDRESS_MUX_DISABLE;
  hsram3.Init.MemoryType = FSMC_MEMORY_TYPE_SRAM;
  hsram3.Init.MemoryDataWidth = FSMC_NORSRAM_MEM_BUS_WIDTH_16;
  hsram3.Init.BurstAccessMode = FSMC_BURST_ACCESS_MODE_DISABLE;
  hsram3.Init.WaitSignalPolarity = FSMC_WAIT_SIGNAL_POLARITY_LOW;
  hsram3.Init.WrapMode = FSMC_WRAP_MODE_DISABLE;
  hsram3.Init.WaitSignalActive = FSMC_WAIT_TIMING_BEFORE_WS;
  hsram3.Init.WriteOperation = FSMC_WRITE_OPERATION_ENABLE;
  hsram3.Init.WaitSignal = FSMC_WAIT_SIGNAL_DISABLE;
  hsram3.Init.ExtendedMode = FSMC_EXTENDED_MODE_DISABLE;
  hsram3.Init.AsynchronousWait = FSMC_ASYNCHRONOUS_WAIT_DISABLE;
  hsram3.Init.WriteBurst = FSMC_WRITE_BURST_DISABLE;
  /* Timing */
  Timing.AddressSetupTime = 15;
  Timing.AddressHoldTime = 15;
  Timing.DataSetupTime = 255;
  Timing.BusTurnAroundDuration = 15;
  Timing.CLKDivision = 16;
  Timing.DataLatency = 17;
  Timing.AccessMode = FSMC_ACCESS_MODE_A;

  HAL_SRAM_Init(&hsram3, &Timing, NULL);


Картинки
После записи по адресу 0x68000000
Нажмите для просмотра прикрепленного файла

После записи по адресу 0x68000100
Нажмите для просмотра прикрепленного файла

За ответы заранее спасибо
ViKo
А что, если на плате A8 (или A7?, там сдвиг адреса есть) постоянно закорочен на землю или питание? Чисто ошибка разводки.
shytsko.v
Цитата(ViKo @ Feb 17 2015, 23:01) *
А что, если на плате A8 (или A7?, там сдвиг адреса есть) постоянно закорочен на землю или питание? Чисто ошибка разводки.

Спосибо. Так и есть, A7 закорочен на питание. Рядом с пином PF13 (A7) находится пин питания и между ними сопелька.
А ведь была такая мысль. Но подумал, если пин закорочен на землю или питание, на нем будет постоянно 0 или 1 и писаться будет в одну ячейку, пусть и не правильную. Выходит, что уровень на этом пине плавает в течение цикла записи, поэтому и пишет в две ячейки. А ведь нужно было всего-то мультиметром туда тыкнуть
ViKo
Цитата(shytsko.v @ Feb 18 2015, 01:57) *
Но подумал, если пин закорочен на землю или питание, на нем будет постоянно 0 или 1 и писаться будет в одну ячейку, пусть и не правильную. Выходит, что уровень на этом пине плавает в течение цикла записи, поэтому и пишет в две ячейки.

Нет, пишется всегда в 0x100, и читается всегда из 0x100. Хотите писать в 0x000, а читаете все равно из 0x100.
Что, на обеих платах по одинаковой сопле? blink.gif
shytsko.v
Цитата(ViKo @ Feb 17 2015, 23:31) *
Нет, пишется всегда в 0x100, и читается всегда из 0x100. Хотите писать в 0x000, а читаете все равно из 0x100.
Что, на обеих платах по одинаковой сопле? blink.gif


Ну да, логично. Сопля на контроллере была. Теперь все работает заечательно. Спасибо
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.