LTE driver appears to be stopped?



  • Hello everyone,

    I'm currently trying to connect to an LTE CAT M1 network.
    However, I'm seeing some things that I think aren't quite correct, and I'm not sure what to do.

    Here is the code I'm using to attempt to connect:

    from network import LTE
    import pycom
    import machine
    import time
    
    lte = LTE()
    
    def pretty(cmd):
        print(cmd)
        response = lte.send_at_cmd(cmd).split('\r\n')
        for line in response:
            if line != '':
                print(line)
    
    print("Test")
    pycom.heartbeat(False)
    pycom.rgbled(0xFF0000)
    
    if not lte.isattached():
        lte.attach()
        while (not lte.isattached()):
            print("Attaching to LTE... ")
            pycom.rgbled(0xFF0000)
            pretty('AT!="showphy"')
            time.sleep(5)
            pycom.rgbled(0x000000)
            pretty('AT!="fsm"')
            time.sleep(5)
    
    if not lte.isconnected():
        lte.connect()
        while not (lte.isconnected()):
            print("Connecting...")
            time.sleep(1)
    
    pycom.rgbled(0x00FF00)
    time.sleep(0.5)
    pycom.rgbled(0x000000)
    

    It doesn't even get past the attaching phase.
    This is the output of the FSM AT command:

    SYSTEM FSM
    ==========
        +--------------------------+--------------------+
        |            FSM           |        STATE       |
        +--------------------------+--------------------+
        | RRC TOP FSM              |STOPPED             |
        | RRC SEARCH FSM           |NULL                |
        | RRC ACTIVE FSM           |NULL                |
        | PMM PLMN FSM             |NULL                |
        | EMM MAIN FSM             |NULL                |
        | EMM AUTH FSM             |NULL                |
        | EMM CONN FSM             |NULL                |
        | EMM TAU FSM              |NULL                |
        | EMM TEST FSM             |NULL                |
        | ESM BEARER FSM           |BEARER_NULL         |
        | SMS MT FSM               |IDLE                |
        | SMS MO FSM               |IDLE                |
        | HP MAIN FSM              |NULL                |
        | HP USIM FSM              |NULL                |
        | HP SMS MO FSM            |IDLE                |
        | HP SMS MT FSM            |IDLE                |
        | HP CAT FSM               |NULL                |
        +--------------------------+--------------------+
    

    Here is the output of the 'showphy' AT command:

    DL SYNCHRO STATISTICS
    =====================
        Synchro state                         : OFF
        PPU SIB1 ACQ watchdog                 : 0
        Frequency Hypothesis RF  (Hz)         : 0
        RSRP (dBm)                            : 0.00
        RSRQ  (dB)                            : 0.00
        Channel estimation state (Cell-spec.) : LOW CINR
        Channel estimation state (UE-spec.)   : LOW CINR
        Channel estimation state (MBSFN)      : LOW CINR
        Channel estimation CINR               : 0.00
        Channel length                        : SHORT
      AGC
        AGC RX gain (dB)                      : 0.00
        RX PSD BO (dBFs)                      : 0.00
        RX PSD (dBm)                          : 0.00
        Noise level RS (dBm)                  : 0.00
        Digital gain (dB)                     : 0.00
        CINR RS (dB)                          : 0.00
      NARROWBANDS
        Last DL NB                            : 0
        Last UL NB                            : 0
      AFC
        Frequency offset RF  (Hz)             : 0
        Frequency offset BB  (Hz)             : 0
      PBCH
        MIB received quantity                 : 0
        MIB timeout quantity                  : 0
    OK
    

    I should note I have entered AT commands in the past before taking a simpler approach, such as "AT!=clearscanconfig". Is this command persistant after resetting the device?

    I've also updated the LTE driver as described in https://docs.pycom.io/tutorials/lte/firmware.html



  • @recurracy If you mean Expansion board - yes, RTS and CTS jumpers must be removed for modem communication.

    https://docs.pycom.io/gettingstarted/connection/fipy.html
    When using the expansion board with a FiPy, you will need to remove the CTS and RTS jumpers as these interfere with communication with the cellular modem.



  • I managed to get it working. Thank you for your responses, @tlanier.

    Is it true the RTS and CTS jumpers on the Pymakr board can make a difference in the modem functioning? I had connected them before, a colleague suggested taking them off.

    Here is the initialization code:

    print("init lte")
    lte.init()
    print("reset lte")
    lte.reset()
    pretty('AT^RESET')
    time.sleep(5)
    pretty('AT+CFUN=0')
    pretty('AT!="clearscanconfig"')
    pretty('AT!="addscanfreq band=20 dl-earfcn=6400"')
    pretty('AT+CGDCONT=1, "IP", "ltem.internet.m2m"')
    pretty('AT+CFUN=1')
    pretty('AT+CEREG?')
    pretty('AT+COPS=?')
    


  • @recurracy

    Have you added an APN to the attach method call?

    apnx = "10569.mcs" # apn based on SIM card used
    lte.attach(apn=apnx)



  • Sadly, that didn't seem to change anything. I'm not sure why, but the synchro state continues to be OFF, and all other values remain 0, as if nothing has been initialized:

    DL SYNCHRO STATISTICS
    =====================
        Synchro state                         : OFF
        PPU SIB1 ACQ watchdog                 : 0
        Frequency Hypothesis RF  (Hz)         : 0
        RSRP (dBm)                            : 0.00
        RSRQ  (dB)                            : 0.00
        Channel estimation state (Cell-spec.) : LOW CINR
        Channel estimation state (UE-spec.)   : LOW CINR
        Channel estimation state (MBSFN)      : LOW CINR
        Channel estimation CINR               : 0.00
        Channel length                        : SHORT
      AGC
        AGC RX gain (dB)                      : 0.00
        RX PSD BO (dBFs)                      : 0.00
        RX PSD (dBm)                          : 0.00
        Noise level RS (dBm)                  : 0.00
        Digital gain (dB)                     : 0.00
        CINR RS (dB)                          : 0.00
      NARROWBANDS
        Last DL NB                            : 0
        Last UL NB                            : 0
      AFC
        Frequency offset RF  (Hz)             : 0
        Frequency offset BB  (Hz)             : 0
      PBCH
        MIB received quantity                 : 0
        MIB timeout quantity                  : 0
    
    OK
    

    Furthermore, 'AT+COPS=?' returns an ERROR. Which I find weird considering that I did upgrade the modem firmware. I'm not sure what is going on here.



  • This example may help.

    import pycom
    import socket
    import ssl
    import sys
    import time
    from network import LTE
    from utime import sleep_ms
    
    BLACK = 0x000000
    WHITE = 0xFFFFFF
    RED = 0xFF0000
    GREEN = 0x00FF00
    BLUE = 0x0000FF
    YELLOW = 0xFFFF00
    
    lte = None
    
    # send AT command to modem and return response as list
    def at(cmd):
        global lte
        print("modem command: {}".format(cmd))
        r = lte.send_at_cmd(cmd).split('\r\n')
        r = list(filter(None, r))
        print("response={}".format(r))
        return r
    
    # blink LED
    def blink(rgb, n):
        for i in range(n):
            pycom.rgbled(rgb)
            time.sleep(0.25)
            pycom.rgbled(BLACK)
            time.sleep(0.1)
    
    # run test
    def run():
        global lte
    
        print("GPy CAT M1 Test - V0.6 - 2/26/19")
    
        try:
            print("disable MicroPython control of LED")
            pycom.heartbeat(False)
            pycom.rgbled(WHITE)
    
            print("instantiate LTE object")
            lte = LTE()
    
            print("reset modem...")
            lte.reset()
    
            # resolves issue of iccid() not working after reset()
            LTE.reconnect_uart()
    
            lte.init()
            sleep_ms(1500)      # 750 works
    
            iccid = lte.iccid()
            carrier = iccid[0:5]
            print("iccid = {0}".format(iccid))
    
            imei = lte.imei()
            print("imei = {0}".format(imei))
    
            apnx = "10569.mcs"   # apn based on SIM card used
            lte.attach(apn=apnx)
    
            while not lte.isattached():
                print("waiting for attach...")
                blink(RED, 1)
    
            print("connect: start a data session and obtain an IP address")
            lte.connect()
    
            while not lte.isconnected():
                print("waiting for connection...")
                blink(GREEN, 1)
    
            print("connected!!!")
            pycom.rgbled(BLUE)
    
            print("read first 16 bytes of www.google.com site")
            s = socket.socket()
    
            # must be called only if connecting to secure site
            s = ssl.wrap_socket(s)
    
            print("get www.google.com address")
            addr = socket.getaddrinfo('www.google.com', 443)
            print(addr)
            print("connect to {}".format(addr[0][-1]))
            s.connect(addr[0][-1])
            print("GET 16 bytes from google")
            s.send(b"GET / HTTP/1.0\r\n\r\n")
            print(s.recv(16))   # receive 16 bytes
            print("close socket")
            s.close()
    
            lte.disconnect()
    
            pycom.rgbled(BLACK)
            print("end of test")
    
        except Exception as ex:
            sys.print_exception(ex)
    

Log in to reply
 

Pycom on Twitter