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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> STM32F4, Динамическое изменение частоты ядра, Можно ли так делать?
Integro
сообщение Jan 19 2015, 14:47
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 167
Регистрация: 25-12-09
Из: Минск
Пользователь №: 54 460



Всем привет,
Задача: добится минимального потребления, одна из идей смена частоты проца в засимости от режима работы.
Возможно ли это? Пробовал кто нибуть подобное? Если да, и это возможно, на какие грабли могу наступить? Детерминировано ли время настройки клоков? Я так понимаю придется дожидаться завершения всех транзакций передачи данных (I2C, SPI, DMA и тд) и перенастраивать переферию с учетом новых клоков?
Поправте меня если в чемто ошибаюсь.

P.S
Проц спать тоже будет, но и нужен режим когда нужно обеспечить какойто минимальный обмен.

Сообщение отредактировал Integro - Jan 19 2015, 15:08
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jan 19 2015, 17:03
Сообщение #2


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Можно. Есть же HSI генератор. Переключитесь на него, потом задайте новый режим PLL, дождитесь, когда установится, и переключитесь на PLL. Не забудьте про латентность флэш, но, так как она уже работала на высокой частоте, то и на низкой будет. Можно просто на HSI остаться. Там и низкоскоростной генератор есть, вроде. Все есть в руководсте.
Go to the top of the page
 
+Quote Post
Aner
сообщение Jan 19 2015, 17:56
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 4 869
Регистрация: 28-02-08
Из: СПБ
Пользователь №: 35 463



А вот и нельзя, так делать никогда. На мелких простеньких процах сойдёт но не с F4xx. Не стоит наступать на понятные грабли. Дожидаться завершения всех транзакций передачи данных (I2C, SPI, DMA и тд) и перенастраивать переферию с учетом новых клоков не детерминировано. А та облась памяти озу в F4xx, которая не доступна, что с ней? и еще кучка. Давно есть другой способ, нечего делать процу, остановили его и ждем. Тактовая нуль, жёр почти нуль, чёт дёрнулось, и мы уже на коне, не надо никого перенастраивать, искать и добавлять туда глюков ну и тд.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jan 19 2015, 18:27
Сообщение #4


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Aner @ Jan 19 2015, 20:56) *
Не стоит наступать на понятные грабли.

А когда процессор запускается, не страшно?
Go to the top of the page
 
+Quote Post
Aner
сообщение Jan 19 2015, 20:51
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 4 869
Регистрация: 28-02-08
Из: СПБ
Пользователь №: 35 463



QUOTE (ViKo @ Jan 19 2015, 22:27) *
А когда процессор запускается, не страшно?

Не страшно, в F4xx все выполняют команду - стоять, бояться. biggrin.gif
И чего по вашему может быть страшного в этом M-4F кортексе?
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jan 19 2015, 21:03
Сообщение #6


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Aner @ Jan 19 2015, 23:51) *
Не страшно, в F4xx все выполняют команду - стоять, бояться. biggrin.gif
И чего по вашему может быть страшного в этом M-4F кортексе?

Вот и я так думаю. А что же вы людей пугаете Кортексом?
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jan 19 2015, 21:29
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



не знаю как в этом конкретно, но в мануале на многие другие четко описана процедура как перехода на большой клок, так и возвращение обратно. Так что ничего там недерминированого нет. Надо просто сделать все аккуратненько по описанию и все...
другое дело там задержки не хилы на переходы и они не фиксированные, то есть с разлетом. Так что быстро частоту менять наверное не выйдет...

Кстати еще иногда для периферии можно выбрать источник клока, то есть ее можно всю оставить на большом клоке, а само ядро уронить на маленький, нет?
Go to the top of the page
 
+Quote Post
Aner
сообщение Jan 19 2015, 22:06
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 4 869
Регистрация: 28-02-08
Из: СПБ
Пользователь №: 35 463



F4xx для этих нельзя, да и не зачем. Есть развитый слип для этого, тот же стоп. Все остальное от лукавого. Думаю, что много лет назад создатели чипов обсуждали без нас эту недерминированность. Аккуратненько не получается, просто берете на себя целый ряд рисков с непонятным обслуживанием, доп буферированием и тд, непонятно для чего то занять кусок памяти, которой может и не быть. И что, вам без этого мало глюков и багов в программах? Анекдот про неглючную прогу знаете?

QUOTE (ViKo @ Jan 20 2015, 01:03) *
Вот и я так думаю. А что же вы людей пугаете Кортексом?

Чтоб матчасть хорошо знали без перевода.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jan 20 2015, 04:01
Сообщение #9


Гуру
******

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



Цитата(Integro @ Jan 19 2015, 20:47) *
Задача: добится минимального потребления, одна из идей смена частоты проца в засимости от режима работы.

"минимального" - нет такого числа. Сколько в мА нужно? Потом справляетесь с документацией и смотрите какой режим энергосбережения можно использовать
(учитывая режимы работы периферии, порядок входа и выхода из режима сбережения, какие функции должны продолжать выполняться в этом режиме и как в него входить и выходить).

Цитата(Aner @ Jan 20 2015, 04:06) *
F4xx для этих нельзя, да и не зачем. Есть развитый слип для этого, тот же стоп. Все остальное от лукавого.

Не надо людей в заблуждение вводить. Останов одного только ядра CPU (WFE/WFI) даёт очень маленькое снижение потребления.
Так как остальная периферия продолжает работать и тактироваться.

Я делал работу с переключением (снижением тактовой) в периоды простоя в одном проекте, где была куча параллельно работающих задач с периферией
(несколько SSP+DMA каналов, UART+DMA, ADC+DMA, DAC+DMA), uCOS на LPC1758.
Всё прекрасно работает. Но в изучение работы периферии и ядра надо погружаться подробно, чтобы такое реализовать.
С поверхностными знаниями и пользуясь библиотеками такое думаю не сделать.

После останова и выключения всей периферии, перевода всех пинов в GPIO и установку на них соотв. состояний, я переводил тактирование
МК на внутренний IRC-генератор, выключал PLL, далее - устанавливал максимальный делитель тактовой IRC (==256).
В таком состоянии у меня МК и находился (IRC=12МГц/256).
Какой либо из режимов глубого сна с отключением тактирования в проекте использовать было нельзя, так как кроме основного генератора, другого
никакого не было, а пробуждаться надо было по таймеру, а не по внешнему сигналу.
Но даже в таком режиме, так как тактовая составляла всего порядка 47кГц, а периферия вся выкл., то потребление МК было очень маленькое.

Для выхода из этого режима, проделывал всё в обратном порядке.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jan 20 2015, 06:08
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Исходя из описания видно, что можно значительно менять тактовые процессора и периферии. Но, как уже писали запуск кварца, запуск PLL это длительные события. Плюс ожидание завершения операций и обратная инициализация.
Очевидно, что такой режим работы применим в редких случаях, а не как стандартный. Всётаки лучше задействовать один из режимов сна с отключением ненужной периферии. Если это не устраивает, то лучше посмотреть на двух-ядерные процы. Например у NXP есть M4F+M0. Там можно усыплять к примеру M4F и работать с M0.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jan 20 2015, 07:06
Сообщение #11


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Ситуация "спит - проснулся - быстро сделал дело - уснул" понятна, популярно описывается, например, для MSP430.
А можно придумать ситуацию, где "медленно и методично выполняет свою работу" будет лучше?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 20 2015, 07:15
Сообщение #12


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(jcxz @ Jan 20 2015, 06:01) *
"минимального" - нет такого числа. Сколько в мА нужно?
Чем вызван такой интересный подход? Часто нужно как можно меньше. Чем меньше получится - тем лучше. Получится N mA - напишем в описании "время непрерывной работы K часов", получится X ma - напишем "Y часов". Чем больше часов сможем вписать - тем шире можно раздувать щеки перед потенциальными покупателями, особенно если у конкурентов это время меньше. И лучше сразу делать отрыв максимально возможным, потому что этот параметр может не являться основным и на его вылизывание в дальнейшем просто не дадут времени. И чем больше будет изначальный отрыв, тем дольше будет преимущество.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Aner
сообщение Jan 20 2015, 09:41
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 4 869
Регистрация: 28-02-08
Из: СПБ
Пользователь №: 35 463



QUOTE (jcxz @ Jan 20 2015, 08:01) *
Не надо людей в заблуждение вводить. Останов одного только ядра CPU (WFE/WFI) даёт очень маленькое снижение потребления.
Так как остальная периферия продолжает работать и тактироваться.

Я делал работу с переключением (снижением тактовой) в периоды простоя в одном проекте, где была куча параллельно работающих задач с периферией
(несколько SSP+DMA каналов, UART+DMA, ADC+DMA, DAC+DMA), uCOS на LPC1758.
Всё прекрасно работает. Но в изучение работы периферии и ядра надо погружаться подробно, чтобы такое реализовать.
С поверхностными знаниями и пользуясь библиотеками такое думаю не сделать.

Как это маленькое снижение потребления, еще какое большое. Думать то надо со 180Мгц в ноль. Сколько это по вашему маленькое? Еще какое большое. Ток когда нибудь тестором меряли? Похоже нет. По этому не нужно врать. Периферия как потребляла так и потребляет, все инжины маложрущие. Куча параллельно работающих задач с периферией и это как же так без либ? Короче смами себе противоречите.
Ну а сертификацию такая программа точно не пройдет.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jan 20 2015, 09:46
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Не обосновано грубо и ровно также не верно.
Сертификацию на что? На взрывозащиту? Гигиенический сертификат? По каким параметрам она не пройдет? Вот про сертификацию как раз лажа...
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jan 20 2015, 10:08
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Я что-то с сертификацией тоже не понял. О чём речь? Например у меня сертификация средств измерения. Я и не думал никого в известность ставить как там мой процессор работает. Спит он или нет, за сколько времени просыпается. Главное чтобы прибор соответствовал своему описанию и обеспечивал измерения с заданной точностью, а также вычисления с заданной регулярностью и так далее.
Go to the top of the page
 
+Quote Post

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

 


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


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