[riot-users] MCU recover mode

Dylan Laduranty dylanladuranty at gmail.com
Wed Dec 19 09:20:23 CET 2018


Hi Olivier,
I had the same issue with openOCD and SAM0 MCU in the past. But I was
always to recover my chips using JLinkExe tool from Segger. I just erased
the whole memory using JLinkExe to unbrick the device and re-run openocd
afterwards.You should probably take a look too.

Regards

Le mer. 19 déc. 2018 à 08:51, Olivier Fauchon <ofauchon2204 at gmail.com> a
écrit :

> Hi Bas,
>
> I use NXP Kinetis KW2xd MCU and OpenOCD + JLink with SWD, for flashing.
>
> I didn't know there were special procedures for unlocking devices.
>
> I'll try to use NXP official IDE flash these chips again.
>
> Thanks
>
> Olivier
>
>
>
>
>
> Le mer. 19 déc. 2018 à 08:17, Bas Stottelaar <basstottelaar at gmail.com> a
> écrit :
>
>> Hi Oliever,
>>
>> Which MCUs have you been playing with?
>>
>> 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.
>>
>> Your solution isn't new, but works great to solve/work-around the problem
>> ;-)
>>
>> Kind regards
>> Bas Stottelaar
>>
>>
>>
>> Op wo 19 dec. 2018 om 08:08 schreef Olivier Fauchon <
>> ofauchon2204 at gmail.com>:
>>
>>>
>>> Hi,
>>>
>>> I recently bricked a couple of MCUs playing with low power modes.
>>> I'm still not sure what happened, but enabling LPM on my board makes
>>> JTAG
>>> inoperant.
>>>
>>> I spent a lot of time trying to save these dead MCUs.
>>>
>>> To avoid this situation, I added some kind of recovery mode at boot :
>>>
>>>
>>> board.c
>>>
>>> void board_init(void)
>>> ...
>>>
>>>     // Safeguard: Infinite loop if board started with buttons pushed
>>>     gpio_init(BTN0_PIN, GPIO_IN_PU);
>>>     gpio_init(BTN1_PIN, GPIO_IN_PU);
>>>     if (!gpio_read(BTN0_PIN) ||  !gpio_read(BTN1_PIN) ) {
>>>         gpio_set(LED0_PIN);
>>>         gpio_set(LED1_PIN);
>>>         while(1){}
>>>     }
>>>
>>> Did I reinvent the wheel ?
>>> Do Riot have already mecanisms to delay boot , or other way to protect
>>> from bad images ?
>>>
>>> Thanks
>>> Olivier Fauchon
>>>
>>>
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> 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
>


-- 
Dylan Laduranty
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.riot-os.org/pipermail/users/attachments/20181219/5d6b1176/attachment-0001.html>


More information about the users mailing list