New Release Candidate v1.20.0.rc13



  • Hello everyone, There is a new Firmware release candidate v1.20.0.rc13 released today the new release includes the following:

    Improvments

    • LoRaWan refactoring and bug Fixing
    • Updated Pybytes lib
    • Updated sqnsupgrade
    • Update Make Environment for IDF version check and checkout
    • modpycom: Added API to get Internal and External Free RAM size
    • PYFW-356 support for sending bytes in lte.send_at_cmd()

    Bug Fix

    • Fix PYFW-359: When building SW with "BTYPE=debug" littleFS assertion fails with crash
    • PYFW-348 updated rx buff size max size exception message
    • PYFW-354: LittleFS causing random crash

    You can download the source code here or you can flash it directly via the Firmware Updater tool as the latest development firmware.


  • Banned

    This post is deleted!


  • @iwahdan said in New Release Candidate v1.20.0.rc13:

    @Thosch42 said in New Release Candidate v1.20.0.rc13:

    Network card not available

    Hello @Thosch42 , are you using Wifi or LTE?

    Hi!
    I'm working with a Lopy1 (L01), so there's no LTE. I use Wifi.



  • We think we've found the problem which was in our code and had nothing to do with the version of the OS. It turns out that we have logic in our timer interrupt routine which does sanity checks on the running code and if anything does not seem right, the code will reboot the system. In one particular test the code reboots if an application dependent event does not occur in 14 hours. When the timer interrupt routine called the reset routine it did not cancel the timer interrupts. This was causing a problem since the reset routine had some long running code in it which should not have been run in an interrupt routine. We will run more long running tests to insure the problem is resolved.



  • We left 25 GPy's running v1.20.0.rc13 over the labor day holiday. 6 of the 25 units locked up at random times during the weekend. The watchdog did not work and reset the locked up units. The units did recover after a hard reset.

    We are going to reprogram the units to v1.20.0.rc9 and do the same test. We had not seen this problem before with units using rc9.



  • @Thosch42 said in New Release Candidate v1.20.0.rc13:

    Network card not available

    Hello @Thosch42 , are you using Wifi or LTE?



  • To get a quick solution for my problem with urequsts.py, allways ending in a OSError: Network card not available, I switched to a MQTT solution. BUT, mqtt.connect() ends also in this OSError.

    I switched firmware back to rc12 and everything works as expected.

    It seems, something went wrong with the usocket lib.

    Cheers,
    Thomas



  • Using Release Candidate v1.20.0.rc9 and rc13 the following observations have been made.

    We have found that GPy units in low cell signal situations sometimes have connectivity issues which can be improved by not using the Pycom lte.isattached() function call. The isattached() result sometimes disagrees with the result that is obtained by doing the AT+CEREG? modem command. We have had better results using the modem command directly (see check_registration() below). A return value of 1 or 5 means the modem is registered with the tower and a connection can be attempted. We've also added logic that resets the modem and does an attach if the modem reports 2,0 (not registered, not searching) for more than 60 secs.

    We have also seen situations where the modem would return a signal strength of 99 for long periods until the modem was reset. Then the signal strength reading would return to normal.

    With over 50 units in the field working, we had noticed that units were not connecting sometimes in low signal situations (~2 to 9 signal strength) as reliably as our previous 4G model design. This led us to do more testing which included turning off our building's cell booster, putting the GPy based design in a metal box, and wrapping the antenna with aluminum foil, all to reduce signal and simulate low signal situations.

    The mentioned changes has made significant improvement to the connectivity of the unit in low signal situations.

    # modem.py
    import globals as g
    import machine
    from network import LTE
    import sys
    import util
    from util import log
    from utime import sleep_ms
    
    lte = LTE()
    
    #####################################################################
    #                     Send AT Command To Modem
    #####################################################################
    def at(cmd):
        global lte
    
        log("modem command: {}".format(cmd))
        util.wait()   # synchronize long running modem commands with time interrupt to help latency issues
        r = lte.send_at_cmd(cmd).split('\r\n')
        sleep_ms(0)
        r = list(filter(None, r))
        log("response: {}".format(r))
        sleep_ms(0)
        
        return r
    
    #####################################################################
    #                       Check Registration
    #####################################################################
    def check_registration():
        # return 0-5, 99-unknown
        # response: ['+CEREG: 2,4', 'OK']
        # response: ['+CEREG: 2,1,"2C29","0B54400F",7', 'OK']
        # 2,0 - not registered, not searching
        # 2,1 - registered, home network
        # 2,2 - not registered, searching
        # 2,3 - registration denied
        # 2,4 - unknown (out of coverage)
        # 2,5 - registered, roaming
    
        try:
            while True:
                r = at('AT+CEREG?')
                if len(r) == 0:
                    break
    
                s = r[0]
                a = s.split(",")
    
                if (a[0] != "+CEREG: 2"):
                    break
                
                reg = int(a[1])
                return reg
    
        except Exception as ex:
            sys.print_exception(ex)
    
        # unknown registration
        return 99
    
    #####################################################################
    #                       Get Signal Strength
    #####################################################################
    def signal_strength():
        # 0-31, 99-unknown
        # response: ['+CSQ: 18,99', 'OK'] where 18 is signal strength
        try:
            while True:
                r = at('AT+CSQ')
                if len(r) == 0:
                    break
    
                s = r[0]
                if (s[0:5] != "+CSQ:"):
                    break
                
                a = s.split(":")
                b = a[1].split(",")
                cell_signal = int(b[0])
    
                g.oStatus.cell_signal = cell_signal
                return cell_signal
    
        except Exception as ex:
            sys.print_exception(ex)
    
        # unknown signal strength
        g.oStatus.cell_signal = 99
        return 99
    


  • Please update the links for LoPy and LoPy4 in :
    https://docs.pycom.io/advance/downgrade/
    to include the version 1.20.0.rc13 for manual firmware download. The other boards have the new version.



  • @iwahdan Thanks a lot. May I ask you to please documents the new functions? And may spend a few more words to bug you fixed or changed?


Log in to reply
 

Pycom on Twitter