[riot-users] Cortex Kinetis KW2xD Low Power Modes

Olivier Fauchon ofauchon2204 at gmail.com
Tue Nov 13 16:47:19 CET 2018


Hi Joakim,

I have been busy designing my own board (based on phywave module)
https://github.com/ofauchon/oflmotes/blob/master/mote-devboard/kw2xd/circuit/v1/devboard_kw2xd_v1.0_board.png

Now I'm back to RIOT-OS tests.
I can see your Low Power  contributions:

[1]: https://github.com/RIOT-OS/RIOT/pull/7897
[2]: https://github.com/RIOT-OS/RIOT/pull/8930
[3]: https://github.com/RIOT-OS/RIOT/pull/8933
[4]: https://github.com/RIOT-OS/RIOT/pull/8814

... had been merged to Master. That's great!

Can you confirm me Kinetis Low Power Modes are fully supported in
Riot/master ?

Should I switch my board from PIT to LPTMR to enable these low power modes
?

Thanks

Olivier Fauchon.






Le lun. 21 mai 2018 à 14:51, Joakim Nohlgård <joakim.nohlgard at eistec.se> a
écrit :

> Hi Olivier,
> Thanks for the offer of helping! Could you write a short review on
> each of the PRs that you have used/tested to let others know what the
> state is and whether anything is not working as intended?
> A review from a non-maintainer can not be used to approve and merge
> PRs, but it does give an indication to the people with the proper
> access that a PR is ready or if it needs more work.
>
> Also, if you have a FRDM-KW41Z board, the PR
> https://github.com/RIOT-OS/RIOT/pull/9147 needs a review, and is a
> fairly small fix.
>
> Best regards,
> Joakim
>
> On Mon, May 21, 2018 at 9:09 AM, Olivier Fauchon <ofauchon2204 at gmail.com>
> wrote:
> > Hi Joakim,
> >
> > You were right...
> >
> >  Low power mode were blocked by PIT timers (PM_BLOCK at init)
> > So I switched my board to LPTMR (board/pba-d-01-kw2x).
> >
> > With this change I could reduce power consumption from 10 mA  to ~1mA,
> > and xtimers were still working
> >
> > Note I rebased your  pr/kinetis-pm branch  to upstream/RIOT/master to
> work
> > on latest code.
> >
> > As soon as I cleanup  my work, I'll send a PR for LPTMR on
> "pba-d-01-kw2x".
> >
> > And I'll review your other  "timer refactoring" PRs ASAP.
> >
> > Feel free to ask if you need more testing and help so your PRs get
> merged.
> >
> > Thanks.
> > Olivier
> >
> >
> >
> >
> >
> >
> >
> > Le sam. 19 mai 2018 à 22:51, Joakim Nohlgård <joakim.nohlgard at eistec.se>
> a
> > écrit :
> >>
> >> My guess is that your board uses xtimer with the PIT timer hardware, try
> >> using the LPTMR instead. See the frdm-kw41z configuration for an example
> >> config (board.h, periph_conf.h). I think Mulle has a config example as
> well
> >> but it is disabled by default.
> >> You might find the timer refactoring PRs helpful [1], [2], [3] (any help
> >> with testing and reviewing is welcome!)
> >> You might also have the UART RX blocking power modes if you don't
> >> configure the llwu pin in the UART config. Clocking mode will affect the
> >> reliability of the UART in low power mode, some clock modes take too
> long to
> >> recover from sleep mode so you will miss the first few characters on
> RX. Use
> >> FEI if unsure.
> >>
> >> Best regards,
> >> Joakim
> >>
> >> [1]: https://github.com/RIOT-OS/RIOT/pull/8933
> >> [2]: https://github.com/RIOT-OS/RIOT/pull/8814
> >> [3]: https://github.com/RIOT-OS/RIOT/pull/8830
> >>
> >> /Joakim
> >>
> >> On Sat, May 19, 2018, 22:24 Olivier Fauchon <ofauchon2204 at gmail.com>
> >> wrote:
> >>>
> >>> Joakim, Matthew,
> >>>
> >>> Thanks for your help.
> >>>
> >>> @Joakim: I cloned your repository, I checkout the pr/kinetis-pm branch
> >>> and rebase from master
> >>> Then I turned ENABLE_LEDS 1 in pm.c to facilitate debugging.
> >>>
> >>> I build a sample application with a very simple main() loop:
> >>>
> >>> while (1){
> >>>    printf("*** pause 5s ***\n");
> >>>    xtimer_sleep(5);
> >>> }
> >>>
> >>> With this setup, I could run the above code, but the MCU is  idling in
> >>> KINETIS_PM_WAIT mode
> >>> (Lowest power saving ?).
> >>>
> >>> Maybe I missed something in my Makefiles  or includes (llwu, pm_layered
> >>> ?) to enable the advanced power saving modes ?
> >>>
> >>> Are there changes to make on the board I use (pba-d-01-kw2x) too  ?
> >>>
> >>> Do you have a test application I can use as a reference implementation
> ?
> >>>
> >>> Thanks
> >>>
> >>> Olivier Fauchon
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>> 2018-05-16 20:07 GMT+02:00 Joakim Nohlgård <joakim.nohlgard at eistec.se
> >:
> >>>>
> >>>> Hi Olivier,
> >>>> Welcome to RIOT!
> >>>> There is a pull request to integrate stop modes for the Kinetis CPUs
> >>>> [1]. There's no VLPR or VLPW yet, but STOP, VLPS, and LLS are
> working. It
> >>>> does need a rebase though.
> >>>> We could use some help reviewing this and some other related Kinetis
> >>>> pull requests [2], [3], [4] if you would like to help with this. Feel
> free
> >>>> to open new PRs for any other improvements you may have.
> >>>>
> >>>> [1]: https://github.com/RIOT-OS/RIOT/pull/7897
> >>>> [2]: https://github.com/RIOT-OS/RIOT/pull/8930
> >>>> [3]: https://github.com/RIOT-OS/RIOT/pull/8933
> >>>> [4]: https://github.com/RIOT-OS/RIOT/pull/8814
> >>>>
> >>>> Best regards,
> >>>> Joakim
> >>>>
> >>>> On Wed, May 16, 2018, 09:01 Matthew Blue <
> matthew.blue.neuro at gmail.com>
> >>>> wrote:
> >>>>>
> >>>>> Hi Olivier,
> >>>>>
> >>>>> Unfortunately, it seems that low power management hasn't gotten a lot
> >>>>> of love for most platforms yet. The basic API is in place though, if
> >>>>> you
> >>>>> wish to implement it on your platform.
> >>>>>
> >>>>> Relevant files:
> >>>>> sys/include/pm_layered.h
> >>>>> sys/pm_layered/pm.c
> >>>>> drivers/include/periph/pm.h
> >>>>> drivers/periph_common/pm.c
> >>>>>
> >>>>> The PR that introduced power management:
> >>>>> https://github.com/RIOT-OS/RIOT/pull/6160
> >>>>>
> >>>>> This command will let you find a few areas where the API has been
> used:
> >>>>> grep -r -e 'pm_[un]*block' -e pm_set
> >>>>>
> >>>>> In general I think the idea is to number the power modes such that
> you:
> >>>>> * Start by giving your lowest power mode 0
> >>>>> * Then find the next lowest power mode that supports features that
> are
> >>>>>   a superset of the features supported by 0, and make that mode 1
> >>>>> * Repeat until you run out of power modes.
> >>>>>
> >>>>> You then write a function pm_set in cpu/*/periph/pm.c that implements
> >>>>> switching the power modes. And also you set up anything that can't
> run
> >>>>> in a certain power mode to pm_block that mode, and then to pm_unblock
> >>>>> when it stops running. I think the kernel then handles the rest.
> >>>>>
> >>>>> There may be some details I missed, because I am not super-familiar
> >>>>> with the system, but this should give you a good start.
> >>>>>
> >>>>> Good luck!
> >>>>> Matthew Blue
> >>>>>
> >>>>>
> >>>>> On Wed, 16 May 2018 08:06:45 +0200
> >>>>> Olivier Fauchon <ofauchon2204 at gmail.com> wrote:
> >>>>>
> >>>>> > Hello,
> >>>>> >
> >>>>> > I'm using RIOT with KW2xD Kinetis MCU for Wireless sensors.
> >>>>> >
> >>>>> > I could observe that the board's current is 10mA when idle which is
> >>>>> > too high for long battery
> >>>>> > operation.
> >>>>> >
> >>>>> > The application note :
> >>>>> > http://cache.freescale.com/files/32bit/doc/app_note/AN4503.pdf),
> >>>>> > says there are Very Low Power Run / Wait / Stop modes.
> >>>>> >
> >>>>> > There are at lease these functions to integrate in RIOT Kernel.
> >>>>> >
> >>>>> > void enter_vlpr(void); => Enter low power run mode
> >>>>> > void exit_vlpr(void);  => Go back in regular power run mode
> >>>>> > void enter_vlps(void); => Go to low power sleep
> >>>>> >
> >>>>> > What is the correct way to integrate this low power mode in Riot
> >>>>> > Power
> >>>>> > management?
> >>>>> > Are there existing implementation for these low power modes for
> other
> >>>>> > MCUs to take in example ?
> >>>>> >
> >>>>> > Thanks
> >>>>> >
> >>>>> > Olivier
> >>>>>
> >>>>> _______________________________________________
> >>>>> users mailing list
> >>>>> users at riot-os.org
> >>>>> https://lists.riot-os.org/mailman/listinfo/users
> >>>>
> >>>>
> >>>> _______________________________________________
> >>>> users mailing list
> >>>> users at riot-os.org
> >>>> https://lists.riot-os.org/mailman/listinfo/users
> >>>>
> >>>
> >>> _______________________________________________
> >>> users mailing list
> >>> users at riot-os.org
> >>> https://lists.riot-os.org/mailman/listinfo/users
> >>
> >> _______________________________________________
> >> users mailing list
> >> users at riot-os.org
> >> https://lists.riot-os.org/mailman/listinfo/users
> >
> >
> > _______________________________________________
> > users mailing list
> > users at riot-os.org
> > https://lists.riot-os.org/mailman/listinfo/users
> >
> _______________________________________________
> users mailing list
> users at riot-os.org
> https://lists.riot-os.org/mailman/listinfo/users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.riot-os.org/pipermail/users/attachments/20181113/7ce76cc2/attachment-0001.html>


More information about the users mailing list