Jump to content

    
Sign in to follow this  
Сергей Борщ

STM32L082 в спячке ест больше, чем на всем скаку

Recommended Posts

Алгоритм примерно следующий:

  1. 5 секунд находимся в Stop, просыпаемся по будильнику RTC
  2. разгоняем тактовую до максимально возможных 32 МГц через PLL от HCI
  3. Заряжаем I2C на опрос датчика. I2C работает с ПДП (DMA) по прерываниям, после отработки транзакции выставляется флаг.
  4. В основном цикле в цикле ожидаем выставления флага. Цикл состоит из проверки флага, WFI, проверки таймера таймаута.
  5. делаем немного вычислений
  6. повторяем п.3-5 для второго датчика
  7. переходим к п.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:

image.thumb.png.909239f92d4207aaa3290da3d13d52ec.png

Каналы 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. Еще один потраченный день не принес решения. Прошу помощи коллективного разума.

Share this post


Link to post
Share on other sites
Только что, DASM сказал:

Только без обид - ноги на выход в спячке сконфигурировать все не забыл?

Это влияет на отработку WFI? Нет, ноги согласно рекомендациям того же ST пока что настроены в режим аналогового входа и это цель дальнейших исследований. И вроде как в глубоком сне (Stop) с потреблением все хорошо. Проблемы с неглубокими (Sleep) кратковременными засыпаниями ядра 

Share this post


Link to post
Share on other sites
Just now, Сергей Борщ said:

Это влияет на отработку WFI? Нет, ноги согласно рекомендациям того же ST пока что настроены в режим аналогового входа и это цель дальнейших исследований. И вроде как в глубоком сне (Stop) с потреблением все хорошо. Проблемы с неглубокими (Sleep) кратковременными засыпаниями ядра 

Это влияет на пожиралово тока в спячке, когда висячие ногие в третьем состоянии. И там то ли шмитты входные срабатывают периодически, то ли что еще..  Если руку например к плате поднести и потребление еще больше возрастет  - то однозначно в этом дело, очень характерный симптом

Share this post


Link to post
Share on other sites
2 minutes ago, aaarrr said:

А не в спячке вдруг не влияет? :)

не в спячке не шибко заметно )) кушает себе 2А, вентилятор крутится, тишь да благодать..

И кстати я тоже Idle в М0 не победил, удовлетворился просто deep sleep. Там отличий в моем проце было только хранение всей ОЗУ или только части регистров, оказалось проще обойтись меньшим злом. (большее - долгие переговоры с китайцами, их процик)

Share this post


Link to post
Share on other sites
32 минуты назад, DASM сказал:

Если руку например к плате поднести и потребление еще больше возрастет  - то однозначно в этом дело, очень характерный симптом

Не, на руку не реагирует.

Share this post


Link to post
Share on other sites
11 minutes ago, DASM said:

не в спячке не шибко заметно )) кушает себе 2А, вентилятор крутится, тишь да благодать..

Так тут он без спячки жрет меньше, чем с ней.

Share this post


Link to post
Share on other sites
4 minutes ago, aaarrr said:

Так тут он без спячки жрет меньше, чем с ней.

а, не шибко внимательно прочел. Ну на всякий не мешает ноги проверить все равно. 

Share this post


Link to post
Share on other sites

Для успокоения проинициализировал явно все ноги. То же яйцо, только в профиль - потребление не поменялось.

Share this post


Link to post
Share on other sites

Посмотреть бы осциллограмму потребления, падение напряжения на малом резисторе. Вдруг всё не так, как намеряно стрелочным амперметром?

Share this post


Link to post
Share on other sites

Режим Stop? Бит SLEEPDEEP в регистрах CPU установлен?

Хотя, вроде как, при Stop невозможно выходить из спячки по событиям RTC.

Или Sleep? Как-то в кучу всего накидали, а это разные режимы...

Share this post


Link to post
Share on other sites
12 часов назад, Arlleex сказал:

Режим Stop? Бит SLEEPDEEP в регистрах CPU установлен?

Хотя, вроде как, при Stop невозможно выходить из спячки по событиям RTC.

5 секунд в режиме stop, sleepdeep установлен, выход из stop возможен по EXTI и по событиям RTC, который заведен на EXTI. В этом режиме с потреблением все красиво.

Далее просыпаемся и работаем с I2C, во время ожидания прерываний от I2C переходим в sleep, sleepdeep сброшен. И вот в это время потребление больше, чем когда вместо перехода в sleep тупо в цикле опрашиваем переменную.

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

Как-то в кучу всего накидали, а это разные режимы...

Старался описать максимально подробно, чтобы было больше информации к размышлению. Может вы невнимательно прочитали?

Share this post


Link to post
Share on other sites
16 hours ago, Сергей Борщ said:

без WFI среднее потребление падает до 7 мкА, с WFI - до 22 мкА

Это потребление только MCU или всей схемы с датчиками?


Без WFI и пин TEST2 не дергается? Там случайно нет каких подтяжек которые могут чтото потреблять?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this