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

 
 
> Изменение частоты SDRAM.
jcxz
сообщение Jun 21 2016, 12:59
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Проект на LPC1788 + SDRAM. Необходимо в ходе работы изменить тактовую частоту CPU.
Так как SDRAM тактируется от клока CPU (с делителем /1 или /2), то и частота SDRAM поменяется. А значит - необходимо заново проинитить контроллер SDRAM (EMC). Но нужно это сделать не потеряв содержимого SDRAM.
А в даташите указано, что значения регистров управления EMC можно изменять только если EMC disabled или находится в idle.
Правильно ли я понимаю, что для этого достаточно обеспечить чтобы:
1) дождаться статуса "EMC is idle" в регистре EMC.STATUS;
2) установить бит "Low-power mode" в регистре EMC.CONTROL;
3) перестроить частоту CPU (PLL и т.п.) обспечив, чтобы в течение этого времени не было выборок кода или данных из SDRAM или прочих обращений к ней;
4) переинитить EMC для нового значения клока;
5) сбросить бит "Low-power mode" в регистре EMC.CONTROL.
Будет-ли производиться refresh памяти в течение пунктов 1...5?
Или может у кого-то есть правильная процедура переиницализации EMC для LPC17xx без потери данных в SDRAM?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
scifi
сообщение Jun 21 2016, 13:22
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Вроде бы считается, что DRAM гарантированно хранит данные 64 мс без рефреша. Поэтому можно принудительно сделать рефреш во всех рядах. 64 мс должно хватить на изменение любых настроек. Потом снова принудительный рефреш, а дальше уже штатный режим.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 21 2016, 13:38
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(scifi @ Jun 21 2016, 19:22) *
Поэтому можно принудительно сделать рефреш во всех рядах. 64 мс должно хватить на изменение любых настроек. Потом снова принудительный рефреш, а дальше уже штатный режим.

Вот. А как это сделать принудительный рефреш? Вижу - среди команд SDRAM есть команда "AUTO REFRESH or SELF REFRESH (Enter self refresh mode)". Это оно?
И как её использовать? Как я понимаю SDRAM делает рефреш последовательно для каждой строки (в моём чипе их 8192) - дать 8192 раз эту команду? Или дать её и подождать какое-то время?
В регистре статуса есть бит "Self-refresh acknowledge", но как его использовать? Даташит молчит. sad.gif

PS: Наверное можно дождаться idle-состояния EMC, установить регистр периода рефреша на минимальное значение, подождать 8192 этих периодов, перенастроить частоту, переинитить EMC, опять подождать 8192 минимальных периодов рефреша, установить нормальный период рефреша.
Тогда максимальное время на перестройку частоты составит == 64мс - 8192*мин_период_рефреша_строки*2. Может быть так?
Go to the top of the page
 
+Quote Post
scifi
сообщение Jun 21 2016, 20:22
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(jcxz @ Jun 21 2016, 16:38) *
Вот. А как это сделать принудительный рефреш? Вижу - среди команд SDRAM есть команда "AUTO REFRESH or SELF REFRESH (Enter self refresh mode)". Это оно?

Даташит на SDRAM читать не пробовали? Он говорит, что это Auto Refresh. Исполнить 8192 раз - и все ряды будут свежие.
Go to the top of the page
 
+Quote Post



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

 


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


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