New firmware release version v1.9.0.b1



  • A new firmware release is out. The version is v1.9.0.b1. The Github sources have been updated as well. Here's the change log:

    • esp32: Disable the brown-out monitor. Some user report issues with this at 3.0V. To be investigated.
    • esp32: Add getfree() function to the os module. Returns the free space (in KiB) in the drive.
    • esp32: Improve NVS API error handling and add methods to erase.
    • esp32: Fix issue with corrupted file listing over FTP. Improve FTP time reporting.
    • esp32: Add proper support for 16-bit I2C memory addresses. See the new API here: https://docs.pycom.io/chapter/firmwareapi/pycom/machine/I2C.html
    • esp32: Fix but around WPA-ENT where client cert and key buffers were inverted.
    • esp32: Enable method micropython.kbd_intr(). Thanks to @robert-hh.
    • esp32: Add code for the second parameter of DAC.tone(). Thanks to @robert-hh
    • esp32: Avoid crash when a timer alarm is cancelled just before it expires.
    • py: Pull in ustruct module from the MicroPython upstream. Resolves issue #63.
    • py: Port back changes from upstream to solve issue #55 (int.from_bytes(b'\xFF\x00','big') returns incorrect result)

    I also want to take the opportunity to announce that the next release will bring full dual core support and also will enabled the usage of the 4MByte of external RAM for MicroPython code in the OEM modules. We gave been waiting for a major update of the Espressif IDF in order to bring these features in.

    Cheers,
    Daniel



  • @daniel Right! - thx a lot ;)



  • @affoltep from what you say it looks like the P2 pin of the L01 is not properly soldered and it's making permanent contact to GND (for the updating process this is simply OK). Please check your solder joints and make sure that you don't have unwanted shorts.

    Cheers,
    Daniel



  • I just soldered a L01 on the OEM reference board and have done a LoPy firmware upgrade to v1.9.0.b1. The upgrade process worked without any error, but now I get most of time the following message:

    rst:0x01 (POWERON_RESET), boot:0x2 (DOWNLOAD_BOOT(UART0/UART1/SDIO_REI_FEO_V2))
    waiting for download 
    

    Most of time it is like that and for time to time the L01 boots up correctly and the LED is blinking blue.

    Is there a problem with the firmware problem known for the L01 or might it be a hardware (soldering) problem?



  • So is my understanding correct, does full dual core support allow access to the ULP Co-processor while the main core sleeps? For example can I

    • use the UPL coprocessor to count how many times a sensor is triggered?
    • turn on the main processor once a day to process the data gathered from the ULP and then send a Sigfog/Lora message?

    This would solve all my power consumption problems!!!

    Edit: From reading the ESP32 data sheet I think I should be able to get this capability "light Sleep" 0.8mA for this functionality?



  • @daniel Hello Daniel, thanks for the update. I looked at os.getfree() and found, that it reports a wrong size at SD cards. The reason: numerical overflow of the 32 bit variable free:_space. The following code variant avoids that, using an unit64_t for the intermediate value:

    STATIC mp_obj_t os_getfree(mp_obj_t path_in) {
        const char *path = mp_obj_str_get_str(path_in);
        FATFS *fs;
        DWORD nclst;
    
        FRESULT res = f_getfree(path, &nclst, &fs);
        if (FR_OK != res) {
            mp_raise_OSError(fresult_to_errno_table[res]);
        }
    
        uint64_t free_space = ((uint64_t)fs->csize * nclst)
    #if _MAX_SS != _MIN_SS
        * fs->ssize;
    #else
        * _MIN_SS;
    #endif
    
        return mp_obj_new_int_from_ull(free_space / 1024);
    }
    STATIC MP_DEFINE_CONST_FUN_OBJ_1(os_getfree_obj, os_getfree);
    

    Edit: Although this is somewhat overkill. If we assume here, that the sector size is 512, we could also write:

    STATIC mp_obj_t os_getfree(mp_obj_t path_in) {
        const char *path = mp_obj_str_get_str(path_in);
        FATFS *fs;
        DWORD nclst;
    
        FRESULT res = f_getfree(path, &nclst, &fs);
        if (FR_OK != res) {
            mp_raise_OSError(fresult_to_errno_table[res]);
        }
        // assume sector size is 512 bytes
        return MP_OBJ_NEW_SMALL_INT((fs->csize * nclst) /2);
    }
    STATIC MP_DEFINE_CONST_FUN_OBJ_1(os_getfree_obj, os_getfree);
    

Log in to reply
 

Pycom on Twitter