Firmware Release v1.20.1

  • Thank you @oligauc!

    This fixed the issue with lora.nvram_erase(). Also, I was having troubles deleting the flash from the pycom firmware upgrade software (it will time out if I select that option, working fine if I just upgrade the FW).

    I have observed that having pybytes active and doing my own LoRa OTTA (saving on nvram after joining the network) caused that the join flag was deleted and never connected again. I have disabled the pybytes in the pybytes_config.jsonfile adding {"pybytes_autostart": false} and that fixed the issue.

    I have been running the program on v1.20.1.r1 without pybytes and haven't had any Guru Meditation errors for a while. I'll keep trying...

  • @oligauc I tried another device, a LoPy now, and that one was completely messy. After setting a Lora parameter wrong, I could not change that any more. Only erasing flash and re-installing the firmware made it working again. Besides that, below is a nice picture showing how a message with DR=0 looks in the waterfall diagram.

  • @oligauc I just verified that, after a clean erase & upload. Then only one frequency is used. There may have been a modified set-up. I purchased a SDR recently, which allows to see the frequencies used. It's interesting to see all the different activities in the 868 band.

  • @oligauc I think i did that in my code, which is the abp_node example. I'll repeat it.

  • @robert-hh We carried out some tests with the abp node / RAK gateway in the EU region. If you add 3 channels with the same frequency and remove the others, it will send at 1 frequency.

    If you do not add / remove channels manually, then the node uses frequency hopping.

  • @berni Using a terminal / command prompt, please can you go to the pycom firmware updater folder (e.g "C:\Program Files (x86)\Pycom\Pycom Firmware Update" in windows) and type the following command:

    pycom-fwtool-cli.exe -p "your com port" erase_all

    After erasing please re-flash your device.

    Please let us know how it goes, Thanks

  • @berni @iwahdan Setting the frequency and/or removing channels is a topic which anyhow does not seem to work. I have to look at it. Even when I set in the sample code the device to use a single frequency only, it transmits at the three default frequencies. That was different once.

  • Hello @berni , Thanks for reporting that issue, we will work on reproducing it, meanwhile regarding the exception you get when downgrading to rc13 , this should be due to the new formatting mechanism of NVS introduced in IDF_v3.2 (1.20.1) , so when you downgrade the FW to previous version of IDF, NVS might not be initialise successfully, to solve this issue you can erase the device and flash the Firmware again.


  • After upgrading to 1.20.1, I started having crashes when setting up the frequencies for the Nano-Gateway code:

    Guru Meditation Error: Core  1 panic'ed (Cache disabled but cached memory region accessed)
    Guru Meditation Error: Core  1 panic'ed (IllegalInstruction). Exception was unhandled.
    Memory dump at 0x40201f50: bad00bad bad00bad bad00bad
    Guru Meditation Error: Core  1 panic'ed (IllegalInstruction). Exception was unhandled.
    Memory dump at 0x40201f50: bad00bad bad00bad bad00bad
    Guru Meditation Error: Core  1 panic'ed (IllegalInstruction). Exception was unhandled.

    This happens somehow randomly, after a few cycles of deep sleep/transmission, but even the Watchdog timer becomes useless.

    Then I downgraded to 1.20.rc13. Now, the code doesn't work and stops in this line:

    >>> from network import LoRa
    >>> lora = LoRa(mode=LoRa.LORAWAN)
    >>> lora.nvram_erase()
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    OSError: the requested operation failed
    >>> lora.nvram_save()
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    OSError: the requested operation failed

    Is there any way to go back to 1.20.rc13 and have these function working again? I suspect there must be some low level changes on the LoRa radio.

  • One software is after the repeated firmware update with the checked option erase filesystem now running. The second one outputs still the same error.

  • Please update the links for all Pycom devices in :
    to include the version 1.20.1 for manual firmware download.

  • @Clemens That wifi_on_boot() issue is a different topic and has been fixed with today's build for the Dev branch. AFIK it is not yet in the 'official' version.
    Edit: It looks like there is a lag in the Pycom update. The updater does not show V1.20.1, and the download page for firmware packages is also not updated.

  • @robert-hh said in Firmware Release v1.20.1:

    pycom.wifi_on_boot(True, True)

    >>> pycom.wifi_on_boot()
    >>> pycom.wifi_on_boot(True, True)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    OSError: the requested operation failed

  • @Clemens I had a similar problem too on one Lopy4 device - Wifi was not available. Erasing the flash and reloading the firmware solved it.

  • I have some devices with firmware 1.20.0.rc13 before and now 1.20.1. Unfortunately the old software is not running with the new firmware and I got e.g.

    File "", line 11, in <module>
    File "", line 124, in <module>
    File "/flash/lib/", line 19, in Create
    File "/flash/lib/", line 161, in Start
    OSError: Network card not available


    File "/flash/lib/terkin/network/", line 110, in start_services
    File "/flash/lib/terkin/network/", line 131, in start_httpserver
    File "/flash/lib/terkin/api/", line 70, in start
    File "/flash/dist-packages/", line 219, in Start
    OSError: Network card not available

    and my former working OTA-Code is stopping also

      File "", line 44, in <module>
      File "/flash/lib/", line 176, in connect
    NameError: name 'SSID' isn't defined

  • @cmisztur I compared the related functions in machine.idle() and utime.sleep_ms() for both v1.20.0.rc13 and v1.20.1. They are identical, and just call taskYIELD() (idle) resp. vTaskDelay() (sleep_ms). So the change must be cause by moving from esp_idf v3.1 to esp_if v3.2.

  • @cmisztur That finding with idle is strange. Comparing the Pycom variant with the shows no difference in the machine.idle() implementation. But the version works. That's how the function looks in both variants:

    STATIC mp_obj_t machine_idle(void) {
        return mp_const_none;

  • @cmisztur I build the image myself, and as part of that, i can call:

    make BOARD=xxPy flash

    There are also the pyupgrade tools, you can download from the pycom web site.

  • @robert-hh said in Firmware Release v1.20.1:

    @cmisztur Sorry, I never looked at pybytes.

    How are you flashing 1.20.1?

  • Breaking change for me from 1.20.0.rc13 to 1.20.1 is usage of machine.idle().
    Below, line 7 is never reached.

    import utime
    import _thread
    def t():
        print('thread start')
        print('thread run')
    _thread.start_new_thread(t, ())
    while 1:

Log in to reply

Pycom on Twitter