Guru Meditation Error right after go_to_sleep()



  • Hi all!
    I have a pretty bad error. Without deepsleep, my project runs seemlessly on my LoPy. With the build in deepsleep from the machine module, it runs also seemlessly. With the DeepSleep-Shield and the deepsleep lib (latest FW, latest lib), I get right after my ds.go_to_sleep(20) instruction an Guru Meditation Error: Core 1 panic'ed (IntegerDivisionByZero)
    Anyone else with something like this?

    Cheers,
    Thomas



  • @seb

    Yep! That fixed it.

    Thanks!

    Cheers,
    Thomas



  • @thosch42 said in Guru Meditation Error right after go_to_sleep():

    from deepsleep import DeepSleep
    import deepsleep
    from machine import UART

    ds = DeepSleep()

    get the wake reason and the value of the pins during wake up

    wake_s = ds.get_wake_status()
    print(wake_s)

    if wake_s['wake'] == deepsleep.PIN_WAKE:
    print("Pin wake up")
    elif wake_s['wake'] == deepsleep.TIMER_WAKE:
    print("Timer wake up")
    else: # deepsleep.POWER_ON_WAKE:
    print("Power ON reset")

    uart = UART(1, baudrate=9600, pins=('P3', 'P4'))
    uart.deinit()

    ds.go_to_sleep(20)

    Hi,

    With the UART code I was able to reproduce this bug, The deepsleep shield uses UART1 to communicate between the shield and the LoPy. Making two instances of UART 1 is likely the cause of the issue here. Since you are using a LoPy and not a GPy or FiPy I would recommend using UART2 instead, this made the issue go away for me.



  • Hi!
    It seems to stick together with the UART1. os.uname() tells:

    (sysname='LoPy', nodename='LoPy', release='1.16.0.b1', version='v1.8.6-849-055728a on 2018-02-13', machine='LoPy with ESP32', lorawan='1.0.0')
    

    Here is my minimum example, that shows the error. Just with a naked Lopy, with Deepsleep-Shield on a Expansionboard V2.1A.

    from deepsleep import DeepSleep
    import deepsleep
    from machine import UART
    
    ds = DeepSleep()
    
    # get the wake reason and the value of the pins during wake up
    wake_s = ds.get_wake_status()
    print(wake_s)
    
    if wake_s['wake'] == deepsleep.PIN_WAKE:
        print("Pin wake up")
    elif wake_s['wake'] == deepsleep.TIMER_WAKE:
        print("Timer wake up")
    else:  # deepsleep.POWER_ON_WAKE:
        print("Power ON reset")
    
    uart = UART(1, baudrate=9600, pins=('P3', 'P4'))
    uart.deinit()
    
    ds.go_to_sleep(20)
    

    This give me imidiately after go_to_sleep

    Guru Meditation Error: Core  1 panic'ed (IntegerDivideByZero)
    . Exception was unhandled.
    Register dump:
    PC      : 0x400e1612  PS      : 0x00060230  A0      : 0x800e16d2  A1      : 0x3ffd8c20
    A2      : 0x3ffc1a5c  A3      : 0x00a7d8c0  A4      : 0x00000000  A5      : 0x0000007f
    A6      : 0x3ffd8db8  A7      : 0x3ffd8e20  A8      : 0x00000000  A9      : 0x3ffd8d50
    A10     : 0x00000000  A11     : 0x00000002  A12     : 0x00000000  A13     : 0x3ffd8e50
    A14     : 0x00000001  A15     : 0x000006ea  SAR     : 0x00000006  EXCCAUSE: 0x00000006
    EXCVADDR: 0x00000000  LBEG    : 0x400ea3f0  LEND    : 0x400ea41c  LCOUNT  : 0x00000eb0
    
    Backtrace: 0x400e1612:0x3ffd8c20 0x400e16cf:0x3ffd8c50 0x400e174d:0x3ffd8c70 0x401b62d9:0x3ffd8c90 0x400f90ec:0x3ffd8cc0 0x400f9159:0x3ffd8cf0 0x400f40aa:0x3ffd8d20 0x400f0a41:0x3ffd8d50 0x400f0aa9:0x3ffd8d70 0x400fbe55:0x3ffd8d90 0x400f4134:0x3ffd8e30 0x400f0a41:0x3ffd8ec0 0x400f0aa9:0x3ffd8ee0 0x400fbe55:0x3ffd8f00 0x400f4134:0x3ffd8fa0 0x400f0a41:0x3ffd9020 0x400f0aa9:0x3ffd9040 0x400fbe55:0x3ffd9060 0x400f4134:0x3ffd9100 0x400f0a41:0x3ffd9140 0x400f0aa9:0x3ffd9160 0x400fbe55:0x3ffd9180 0x400f4134:0x3ffd9220 0x400f0a41:0x3ffd9260 0x400f0aa9:0x3ffd9280 0x400fbe55:0x3ffd92a0 0x400f4134:0x3ffd9340 0x400f0a41:0x3ffd93e0 0x400f0aa9:0x3ffd9400 0x400fbe55:0x3ffd9420 0x400f4134:0x3ffd94c0 0x400f0a41:0x3ffd9550 0x400f0a6e:0x3ffd9570 0x400dde0f:0x3ffd9590 0x400de0e0:0x3ffd9630 0x400dcf73:0x3ffd9650
    

    Can someone reproduce this?

    Cheers,
    Thomas



  • @thosch42 said in Guru Meditation Error right after go_to_sleep():

    ds.go_to_sleep(20)

    Hi,

    I was not able to replicate this using a LoPy on firmware 1.16.0.b1. Could you please share your exact code along with the output for the following:

    import os
    print(os.uname())
    


Pycom on Twitter