Перейти к содержанию
    

Приветствую!

Изучаю платку MYD-YA15XC-T на базе STM32MP151, 256MB DDR3, 256MB NAND.

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

 

Под линуксом в покое плата потребляет около 180ма, при этом процессор молотит постоянно на 650мгц. Не знаю, почему он в покое не сбрасывает частоту, надо бы попробовать сменить говернор на более экономичный.

 

Работает режим standby, в который плата входит командой:

echo mem > /sys/power/state

Потребления в нем практически нет - всего 3-4 ма, при этом выход в линукс из него быстрый - меньше секунды.

Как достигается столь низкое потребление? Разве 256MB DDR3 в режиме self refresh достаточно всего пары ма?

 

Но больше всего интересует, сколько кушать будет камень, когда ядро А7 спит, а ядро М4 работает на низкой частоте - кто нибудь может подсказать?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

17 часов назад, sonycman сказал:

Как достигается столь низкое потребление? Разве 256MB DDR3 в режиме self refresh достаточно всего пары ма?

А что тут необычного? Частота просто регенерации на порядки ниже рабочей...  В планшетах и телефонах работает аналогичный режим.

17 часов назад, sonycman сказал:

а ядро М4 работает на низкой частоте - кто нибудь может подсказать?

Будет примерно равно отдельному СТМ-овскому кортексу М4 на аналогичной частоте.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

18 hours ago, sonycman said:

ядро А7 спит, а ядро М4 работает на низкой частоте - кто нибудь может подсказать?

"Под линуксом в покое" оно и так спит большую часть времени.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Just now, mantech said:

А что тут необычного? Частота просто регенерации на порядки ниже рабочей...  В планшетах и телефонах работает аналогичный режим.

Не знал, что добились настолько эпичного снижения потребления. Впечатлило :good:

Just now, mantech said:

Будет примерно равно отдельному СТМ-овскому кортексу М4 на аналогичной частоте.

В идеале так и хотелось бы, но, думаю, так круто не получится.

В standby отключается питание ядер, поэтому такой шикарный эффект.

Но если М4 будет работать, то это будет другой режим низкого потребления, что-то типа Stop для A7...

Just now, aaarrr said:

"Под линуксом в покое" оно и так спит большую часть времени.

Ну 180ма это не мало, сон такой себе получается.

К примеру, IMX6ULL в такой ситуации потребляет 120ма всего (но там частота до 200МГц снижена).

 

Вот и думаю, что будет эффективнее по потреблению - IMX6ULL плюс дополнительный мелкий контроллер для реал тайм + стандбай, или STM32MP151, где уже есть М4...

 

Хотя плата с 6ULL не даёт такого эффективного standby - там не реализовано отключение питания, и после mem > /sys/power/state оно кушает 50ма.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

21 hours ago, sonycman said:

Работает режим standby, в который плата входит командой:

echo mem > /sys/power/state

А как потом обратно из этого режима выйти ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, sonycman сказал:

Вот и думаю, что будет эффективнее по потреблению - IMX6ULL плюс дополнительный мелкий контроллер для реал тайм + стандбай, или STM32MP151, где уже есть М4...

Ну как бы сравнивать 2 ядра А7 + 1 слабое М4 с одним на все про все, как-то некорректно немного...

2 часа назад, sonycman сказал:

Хотя плата с 6ULL не даёт такого эффективного standby

Кстати не в курсе, сколь этот камень потребляет по линии часов при откл. питании? Та же контора неск. лет ранее измыслила убогий блок часов в IMX6S, который жрал аж  до 100 мкА доходило...

Изменено пользователем mantech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 hours ago, dimka76 said:

А как потом обратно из этого режима выйти ?

По умолчанию пробуждение настроено на кнопку ON/OFF.

Можно выбирать другие источники - тот же UART или RTC и т.п.  Сам пока не успел поиграться.

1 hour ago, mantech said:

Ну как бы сравнивать 2 ядра А7 + 1 слабое М4 с одним на все про все, как-то некорректно немного...

Кстати не в курсе, сколь этот камень потребляет по линии часов при откл. питании? Та же контора неск. лет ранее измыслила убогий блок часов в IMX6S, который жрал аж  до 100 мкА доходило...

 

Так в 151 только одно ядро А7.

По даташиту по линии Vbat заявлено от пары мка при отключенных backup sram/retention sram, только rtc.

 

А на IMX6 говорят, что да, батарейку выносит быстро, лучше ставить внешний чип.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Таки два.

STM32MP151 microprocessors are based on the flexible architecture of a single Arm® Cortex®-A7 core running up to 800 MHz and Cortex®-M4 at 209 MHz.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По даташиту... я не заметил при его чтении, что backup sram потребляет в сто раз больше, чем rtc... а зря. батарейку 1220 выедает за месяц...полтора 

Это в 157, в этом он не отличается.

Изменено пользователем GenaSPB

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В сети так и не нашёл замеров потребления когда A7->CStop, M4->Run.

Но в AN5284 ST приводят сравнительные замеры подобной ситуации, получается экономия около 70ма.

То есть, если в моём случае 170ма - линукс в idle, то один М4 (А7 в стопе) будет жрать около 100ма...

 

Надо пробовать на практике.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 часов назад, GenaSPB сказал:

я не заметил при его чтении, что backup sram потребляет в сто раз больше, чем rtc... а зря.

Ну видимо косячников, как в случае с IMX6, и у стмовцев хватает...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 minutes ago, mantech said:

Ну видимо косячников, как в случае с IMX6, и у стмовцев хватает...

Просто расчет был не на хилую батарейку типа CR1220, а на питание от "толстой" АКБ.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 часа назад, aaarrr сказал:

Просто расчет был не на хилую батарейку типа CR1220, а на питание от "толстой" АКБ.

Да хоть какая толстая, если это узел микропотребления, то он и должен быть таким, а тут просто наплевали попросту...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробовал режимы энергосбережения STOP вместе со вторым ядром (СМ4).

Получилось около 55 ма, когда А7 спит, а М4 работает на 64МГц. Если М4 тоже усыпить в стоп - кушают 35 ма.

При этом пробуждение у М4 весьма быстрое, что радует.

 

В общем-то получилось, как и говорил mantech, а я не верил тогда... :good2:

 

Странно, что в стандартном линуксе от ST никто даже не заморачивается снижением частоты А7, тот всегда молотит на максимуме.

Добавил в дерево опцию для снижения частоты до 325МГц (с 650), вроде стал снижать. Хотя толку мало, конечно.

Ниже не снижает, на 216МГц не хочет работать, видимо что-то не даёт, но не понятно, что. В дебри лезть не стоит, думаю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В RCC MP1 есть специальный делитель в клоковом дереве... который позволяет практически одним битом переключаться между прямым или делённым тактовым сигналом MPU части.
RCC_MPCKDIVR_MPUDIV
RCC_MPCKSELR_MPUSRC

// MPU frequency
// mpuss_ck
unsigned long stm32mp1_get_mpuss_freq(void)
{
	//	0x0: The MPUDIV is disabled; i.e. no clock generated
	//	0x1: The mpuss_ck is equal to pll1_p_ck divided by 2 (default after reset)
	//	0x2: The mpuss_ck is equal to pll1_p_ck divided by 4
	//	0x3: The mpuss_ck is equal to pll1_p_ck divided by 8
	//	others: The mpuss_ck is equal to pll1_p_ck divided by 16

	const uint_fast32_t mpudiv = 1uL << ((RCC->MPCKDIVR & RCC_MPCKDIVR_MPUDIV_Msk) >> RCC_MPCKDIVR_MPUDIV_Pos);

	//	0x0: HSI selected as MPU sub-system clock (hsi_ck) (default after reset)
	//	0x1: HSE selected as MPU sub-system clock (hse_ck)
	//	0x2: PLL1 selected as MPU sub-system clock (pll1_p_ck)
	//	0x3: PLL1 via MPUDIV is selected as MPU sub-system clock (pll1_p_ck / (2 ^ MPUDIV)).
	switch ((RCC->MPCKSELR & RCC_MPCKSELR_MPUSRC_Msk) >> RCC_MPCKSELR_MPUSRC_Pos)
	{
	default:
	case 0x00:
		return stm32mp1_get_hsi_freq();
	case 0x01:
		return stm32mp1_get_hse_freq();
	case 0x02:
		return stm32mp1_get_pll1_p_freq();
	case 0x03:
		return stm32mp1_get_pll1_p_freq() / mpudiv;
	}
}

 

Изменено пользователем GenaSPB

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...