<div dir="ltr"><div dir="ltr">Hi Oliever,</div><div dir="ltr"><br></div><div>Which MCUs have you been playing with?</div><div><br></div><div>This is a common 'problem' that can occur when you indeed enable LPM (or other things like disable debug pins etc). Therefore, most MCUs have certain procedures to keep the MCU halted after a reset, before any code is executed and the MCU gets unreachable. IIRC, ARM Cortex provides a vector-catch operation to halt the MCU after reset. Some IDEs (like Simplicity Studio for EFM32 MCUs) have a special unlock operation. </div><div><br></div><div>Your solution isn't new, but works great to solve/work-around the problem ;-)</div><div dir="ltr"><br clear="all"><div><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div>Kind regards</div><div><span style="font-size:12.8000001907349px">Bas Stottelaar</span><br></div><div><br></div></div></div></div></div><br></div><br><div class="gmail_quote"><div dir="ltr">Op wo 19 dec. 2018 om 08:08 schreef Olivier Fauchon <<a href="mailto:ofauchon2204@gmail.com">ofauchon2204@gmail.com</a>>:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><br></div><div dir="ltr">Hi, </div><div dir="ltr"><br></div><div dir="ltr">I recently bricked a couple of MCUs playing with low power modes.</div><div dir="ltr">I'm still not sure what happened, but enabling LPM on my board makes JTAG </div><div>inoperant. </div><div><br></div><div>I spent a lot of time trying to save these dead MCUs.</div><div><br></div><div>To avoid this situation, I added some kind of recovery mode at boot : </div><div dir="ltr"><br></div><div dir="ltr"><br><div>board.c </div><div><br></div><div>void board_init(void) </div><div>...</div><div><br></div><div><div>    // Safeguard: Infinite loop if board started with buttons pushed</div><div>    gpio_init(BTN0_PIN, GPIO_IN_PU);<br></div><div>    gpio_init(BTN1_PIN, GPIO_IN_PU);</div><div>    if (!gpio_read(BTN0_PIN) ||  !gpio_read(BTN1_PIN) ) {</div><div>        gpio_set(LED0_PIN);</div><div>        gpio_set(LED1_PIN);</div><div>        while(1){}</div><div>    }</div></div><div><br></div><div>Did I reinvent the wheel ?</div><div>Do Riot have already mecanisms to delay boot , or other way to protect from bad images ? </div><div><br></div><div>Thanks</div><div>Olivier Fauchon</div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div></div></div></div></div>
_______________________________________________<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></div>