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