Сергей Борщ 134 15 декабря, 2019 Опубликовано 15 декабря, 2019 · Жалоба Алгоритм примерно следующий: 5 секунд находимся в Stop, просыпаемся по будильнику RTC разгоняем тактовую до максимально возможных 32 МГц через PLL от HCI Заряжаем I2C на опрос датчика. I2C работает с ПДП (DMA) по прерываниям, после отработки транзакции выставляется флаг. В основном цикле в цикле ожидаем выставления флага. Цикл состоит из проверки флага, WFI, проверки таймера таймаута. делаем немного вычислений повторяем п.3-5 для второго датчика переходим к п.1 код цикла ожидания: while(!Non_empty) { ON(TEST2); __WFI(); OFF(TEST2); if(TIM6->SR & TIM_SR_UIF) // no need to stop timer because of one-pulse mode return false; } TIM6->CR1 = 0; return true; диаграмма работы п.3-6: Каналы 0,1 - работа по I2C, канал 2 в высоком уровне во время отработки обработчика прерывания I2C, канал 3 в высоком уровне во время выполнения WFI (выход TEST2). Как видно, вся работа занимает 1.22 мс каждые 5 секунд, причем примерно 1.07 мс из этого времени ядро спит (Sleep mode). Усредненное потребление платы 28 мкА (плата питается через микроамперметр, на входе платы стоит большой конденсатор, стрелка колеблется 27-28 мкА). Чудо происходит, если закомментировать __WFI - усредненное потребление падает до 11 мкА. Ядро при этом молотит - сигнал на выходе TEST2 исправно скачет 0-1-0-1. Errat-у перечитал, там ничего подобного не описано. Отладчик отключен. Что я мог еще не учесть? Пункты 1-2 выполняются средствами куба (тяжелое наследство), но вроде бы влиять не должны. Увеличивал паузу в п.1 до 10 сек - без WFI среднее потребление падает до 7 мкА, с WFI - до 22 мкА. P.S. вообще-то сначала п.3-6 тоже выполнялись кубовым кодом, без ПДП, прерываний и WFI, но после того, как куб забыл в какой-то момент вычитать регистр приема, выдал ошибку превышения timeout и все данные пошли сдвинутые на один байт, было решено заменить весь кубовый I2C на свой. Заодно ожидалось уменьшение потребления за счет использования WFI, но потребление неожиданно возросло. День поиска вывел на инструкцию WFI. Еще один потраченный день не принес решения. Прошу помощи коллективного разума. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DASM 0 15 декабря, 2019 Опубликовано 15 декабря, 2019 · Жалоба 2 minutes ago, Сергей Борщ said: разума. Только без обид - ноги на выход в спячке сконфигурировать все не забыл? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 134 15 декабря, 2019 Опубликовано 15 декабря, 2019 · Жалоба Только что, DASM сказал: Только без обид - ноги на выход в спячке сконфигурировать все не забыл? Это влияет на отработку WFI? Нет, ноги согласно рекомендациям того же ST пока что настроены в режим аналогового входа и это цель дальнейших исследований. И вроде как в глубоком сне (Stop) с потреблением все хорошо. Проблемы с неглубокими (Sleep) кратковременными засыпаниями ядра Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DASM 0 15 декабря, 2019 Опубликовано 15 декабря, 2019 · Жалоба Just now, Сергей Борщ said: Это влияет на отработку WFI? Нет, ноги согласно рекомендациям того же ST пока что настроены в режим аналогового входа и это цель дальнейших исследований. И вроде как в глубоком сне (Stop) с потреблением все хорошо. Проблемы с неглубокими (Sleep) кратковременными засыпаниями ядра Это влияет на пожиралово тока в спячке, когда висячие ногие в третьем состоянии. И там то ли шмитты входные срабатывают периодически, то ли что еще.. Если руку например к плате поднести и потребление еще больше возрастет - то однозначно в этом дело, очень характерный симптом Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 15 декабря, 2019 Опубликовано 15 декабря, 2019 · Жалоба 23 minutes ago, DASM said: Это влияет на пожиралово тока в спячке А не в спячке вдруг не влияет? :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DASM 0 15 декабря, 2019 Опубликовано 15 декабря, 2019 · Жалоба 2 minutes ago, aaarrr said: А не в спячке вдруг не влияет? :) не в спячке не шибко заметно )) кушает себе 2А, вентилятор крутится, тишь да благодать.. И кстати я тоже Idle в М0 не победил, удовлетворился просто deep sleep. Там отличий в моем проце было только хранение всей ОЗУ или только части регистров, оказалось проще обойтись меньшим злом. (большее - долгие переговоры с китайцами, их процик) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 134 15 декабря, 2019 Опубликовано 15 декабря, 2019 · Жалоба 32 минуты назад, DASM сказал: Если руку например к плате поднести и потребление еще больше возрастет - то однозначно в этом дело, очень характерный симптом Не, на руку не реагирует. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 15 декабря, 2019 Опубликовано 15 декабря, 2019 · Жалоба 11 minutes ago, DASM said: не в спячке не шибко заметно )) кушает себе 2А, вентилятор крутится, тишь да благодать.. Так тут он без спячки жрет меньше, чем с ней. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DASM 0 15 декабря, 2019 Опубликовано 15 декабря, 2019 · Жалоба 4 minutes ago, aaarrr said: Так тут он без спячки жрет меньше, чем с ней. а, не шибко внимательно прочел. Ну на всякий не мешает ноги проверить все равно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 134 15 декабря, 2019 Опубликовано 15 декабря, 2019 · Жалоба Для успокоения проинициализировал явно все ноги. То же яйцо, только в профиль - потребление не поменялось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 15 15 декабря, 2019 Опубликовано 15 декабря, 2019 · Жалоба А если на пробу отключить STOP? (У меня подозрение, что из-за попыток спячки контроллер не полностью переключается в стоп). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 16 декабря, 2019 Опубликовано 16 декабря, 2019 · Жалоба Посмотреть бы осциллограмму потребления, падение напряжения на малом резисторе. Вдруг всё не так, как намеряно стрелочным амперметром? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 176 16 декабря, 2019 Опубликовано 16 декабря, 2019 · Жалоба Режим Stop? Бит SLEEPDEEP в регистрах CPU установлен? Хотя, вроде как, при Stop невозможно выходить из спячки по событиям RTC. Или Sleep? Как-то в кучу всего накидали, а это разные режимы... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 134 16 декабря, 2019 Опубликовано 16 декабря, 2019 · Жалоба 12 часов назад, Arlleex сказал: Режим Stop? Бит SLEEPDEEP в регистрах CPU установлен? Хотя, вроде как, при Stop невозможно выходить из спячки по событиям RTC. 5 секунд в режиме stop, sleepdeep установлен, выход из stop возможен по EXTI и по событиям RTC, который заведен на EXTI. В этом режиме с потреблением все красиво. Далее просыпаемся и работаем с I2C, во время ожидания прерываний от I2C переходим в sleep, sleepdeep сброшен. И вот в это время потребление больше, чем когда вместо перехода в sleep тупо в цикле опрашиваем переменную. 12 часов назад, Arlleex сказал: Как-то в кучу всего накидали, а это разные режимы... Старался описать максимально подробно, чтобы было больше информации к размышлению. Может вы невнимательно прочитали? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Integro 0 16 декабря, 2019 Опубликовано 16 декабря, 2019 · Жалоба 16 hours ago, Сергей Борщ said: без WFI среднее потребление падает до 7 мкА, с WFI - до 22 мкА Это потребление только MCU или всей схемы с датчиками? Без WFI и пин TEST2 не дергается? Там случайно нет каких подтяжек которые могут чтото потреблять? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться