Telit LE910C4 not acquiring GPS

I recently purchased another LTE modem kit (I now have 3) and it came with the newer, better, Telit LE910C4 modem. The other two kits i have came with the Telit LE910C1. I followed the exact same steps i did with my other two devices. The GPS is working perfectly for the other two, but not this one.

Details:

AT+CGMR
MOF.660010

OK

AT$GPSP?
$GPSP: 1

OK

AT$GPSACP
$GPSACP: ,,,,,1,,,,,,

OK

I have followed the steps to configure the GPS as per both This Tutorial and with the slight tweak for QOS as outlined in This Thread

I have tried multiple GPS antennas. I currently have the device high and with a clear view of the sky. I have waited days to allow it to acquire signal. The other two devices acquired signal almost instantly.

It is important to note that while following the steps in your tutorial and in the telit manual, after the reset of the NVM history buffer, when i execute AT$GPSACP, I always get back ,1,. I never get a blank response.

The ironic thing is that this happens to be the device i’m going to install at a customers site. And it happens to be the one with the new modem version and problems. That’s how it goes it seems.

Any help is greatly appreciated.

As a sanity check, i left the device very high by a window since i made this post. The AT$GPSACP is still returning as it does above.

Same exact issue here.

I can set other GPS enabled devices next the the ME910C1 and they all link up within 40 seconds.

The ME910C1 has been running for over an hour and still no signal.
I tried different Antennas, unplugging the entire system for 20 minutes, higher AMP Power supplies… it never connects.

Currently I am using the Sixfab supplied Pulse W3906 antenna using the Cable marked “GPS” to the port closest to the edge on the Telit Module.(as per photos here)

I have it sitting on a wood table, away from all buildings or any magnetic objects with a clear, unobstructed view of the sky.

It is not seeing anything, as shown

AT#REBOOT
OK
(wait until re-connect to COM2)

AT$GPSRST
OK

AT$GPSNVRAM=15,0
OK

AT$GPSACP
$GPSACP:                                                                                            
                                                                                                 
OK                                                                                                  

AT$GPSP=1
OK
AT$GPSNMUN=3,1,0,1,0,1,0
CONNECT                                                                                             

$GPGSA,A,1,,,,,,,,,,,,,,,,*32                                                                       
$GPGGA,,,,,,0,,,,,,,,*66                                                                            
$GPRMC,,V,,,,,,,,,,N,V*29

$GPGSA,A,1,,,,,,,,,,,,,,,,*32                                                                       
$GPGGA,,,,,,0,,,,,,,,*66                                                                            
$GPRMC,,V,,,,,,,,,,N,V*29

$GPGSA,A,1,,,,,,,,,,,,,,,,*32                                                                       
$GPGGA,,,,,,0,,,,,,,,*66                                                                            
$GPRMC,,V,,,,,,,,,,N,V*29

$GPGSA,A,1,,,,,,,,,,,,,,,,*32                                                                       
$GPGGA,,,,,,0,,,,,,,,*66                                                                            
$GPRMC,,V,,,,,,,,,,N,V*29

(this sequence repeats for hours and it never sees anything)

1 Like

OK, now I’m really confused. I figured out the problem.

I swapped the two cables on my ME910C1 and plugged the one on the Pulse W3906 antenna marked “GPS” into the connector marked “M” (in the center of the board) and the one marked “LTE” into the port marked “G” (near the edge of the board) and the GPS synced up in under 20 seconds.

I figured it must be something wrong with the u.FL connector so I tested the antenna with a VOM and it was not getting any signal from the center post on the GPS cable. I cut it off, put on a new one and it now works fine.

I just got mine from the post office today and it worked pretty much first try (it is working inside my house while close to a window):

pardon the tangle of cables…

I found it a little bit tricky to get the antenna connectors set correctly.

So now I am getting results like this:

AT$GPSP=0
OK
AT$GPSP=1
OK
AT$GPSACP
$GPSACP: 230647.000,4800.0000N,12000.0000W,2.2,872.7,3,321.6,0.0,0.0,040821,04,2

OK

#STN: 01,00
AT$GPSP=0
OK

#STN: 01,00

Syncs up in about five minutes from power off. So right now I am writing some better python code to automate all that…

Interesting. Which steps did you use to enable the GPS for your device? Did you follow the tutorial exactly?

Also, here is a rough example of the python code i’m using to GetCurrentCoordinates(). It has some logic to hunt around for the correct port because i have multiple USB devices connected. Sometimes the correct port is ttyUSB1, sometimes USB2, etc. This does the trick when i have signal. Also, i hacked out some of my logging code, so this example might have a small bug / error in it.

import serial
import time

def find_port():
    for p in serial.tools.list_ports.comports():
        if 'LOCATION=1-1.4:1.4' in p.hwid:
            port = p.device
            return port
			
	# Fallback, default port on my machine
    return '/dev/ttyUSB2'

def __connect():
    current_port = find_port()
    connection = serial.Serial(
        port=current_port,
        baudrate = 115200,
        timeout=1)
    try:
        if connection.isOpen() == False:
            connection.open()

        # Clear Buffer
        connection.flushInput()
        connection.flushOutput()
    except serial.SerialException as e:
            # Log the error 
			# Do something about it 
    else:
        return connection

def readString(gpsPort):    
    while 1:
        while gpsPort.read().decode("utf-8") != '$': # Wait for the begging of the string
            pass # Do nothing
        line = gpsPort.readline().decode("utf-8") # Read the entire string
        if 'GPGGA,,,,,,0,,,,,,,,*66' in line: 
            continue
        return line
		
def getLatLng(latString,lngString):
    lat = latString[:2].lstrip('0') + "." + "%.7s" % str(float(latString[2:])*1.0/60.0).lstrip("0.")
    lng = lngString[:3].lstrip('0') + "." + "%.7s" % str(float(lngString[3:])*1.0/60.0).lstrip("0.")
    return lat,lng

def checksum(line):
    checkString = line.partition("*")
    checksum = 0
    for c in checkString[0]:
        checksum ^= ord(c)
    try: # Just to make sure
        inputChecksum = int(checkString[2].rstrip(), 16)
    except:
        print("Error in string")
        return False

    if checksum == inputChecksum:
        return True
    else:
        print(hex(checksum), "!=", hex(inputChecksum))
        return False

def GetCurrentCoordinates():
    try:
        start = time.time()
        gpsPort = __connect()
		
		# Search for coordinates for 10 seconds before timing out
        while time.time() - start < 10:
            line = readString(gpsPort)
            lines = line.split(",")
            if checksum(line):
                if lines[0][2:] == "GGA":
                    lat, lng = getLatLng(lines[2],lines[4])
					
					# Hack to put - before W 
                    if 'W' in lines[5]:
                        lng = f'-{lng}'
                    return {"Lat":f"{lat}{lines[3]}", "Long":f"{lng}{lines[5]}" }
    except Exception as e:
        # Do something with the exception
        return None
	else:
		return None

I didn’t exactly follow the tutorial. I actually grabbed the manual and looked at the GPS commands.

I took the following steps:

  1. Send a ‘\r’.
  2. Send a naked ‘AT\r’ and wait for an ‘OK\r\n’ – repeat until you see ‘OK\r\n’ or timeout.
  3. Send ‘AT$GPSP?\r’ and grab the power state and wait again for ‘OK\r\n’
  4. If power state is zero, send ‘AT$GPSP=1\r’ and wait for ‘OK\r\n’
  5. Send ‘AT$GPSACP\r’ and grab current position and wait for ‘OK\r\n’
  6. If “fix” value of current position is not ‘3’, pause ten seconds and try previous step again.
  7. Send ‘AT$GPSP=0\r’ and wait for ‘OK\r\n’

I find using the ancient cu command to manage the serial connection works well and is better for this application than minicom since it can be completely set up from the command line and doesn’t try to process escape sequences in the communications channel. You can install it on your pi with sudo apt-get install cu.

The python pexpect package is excellent for controlling the data stream from the modem and for breaking out relevant parts of the output you wish to save. You can install it with pip install pexpect.

This approach seems pretty robust and gives Good Enough results for my application so far.

On my system I am able to send AT commands to /dev/ttyUSB2 and /dev/ttyUSB3. I have no idea why just those ports. It seems pretty consistent across reboots.

I get output like so from my script (this is from a freshly booted up pi set close to a window indoors):

[gps] Trying to send 'AT', try #1
[gps] Saw OK
[gps] Getting GPS power state with AT$GPSP?
[gps] results:  b'0'
[gps] GPS power state is 0
[gps] Saw OK
[gps] Sending AT$GPSP=1 to power on GPS
[gps] Saw OK
[gps] Sending AT$GPSACP to get current position
[gps] results:  b',,,,,1,,,,,,'
[gps] Saw OK
Try #1, got 1
[gps] Sending AT$GPSACP to get current position
[gps] results:  b',,,,,1,,,,,,'
[gps] Saw OK
Try #2, got 1
[gps] Sending AT$GPSACP to get current position
[gps] results:  b',,,,,1,,,,,,'
[gps] Saw OK
Try #3, got 1
[gps] Sending AT$GPSACP to get current position
[gps] results:  b',,,,,1,,,,,,'
[gps] Saw OK
Try #4, got 1
[gps] Sending AT$GPSACP to get current position
[gps] results:  b',,,,,1,,,,,,'
[gps] Saw OK
Try #5, got 1
[gps] Sending AT$GPSACP to get current position
[gps] results:  b',,,,,1,,,,,,'
[gps] Saw OK
...
Try #12, got 1
[gps] Sending AT$GPSACP to get current position
[gps] results:  b',,,,,1,,,,,,'
[gps] Saw OK
Try #13, got 1
[gps] Sending AT$GPSACP to get current position
[gps] results:  b'135132.000,48zz.zzzzN,120zz.zzzzW,5.3,294.6,3,0.0,2.2,1.2,050821,04,01'
[gps] Saw OK
[gps] ***RESULTS***: 48.zzz,-120.zzz
[gps] Sending AT$GPSP=0 to power off GPS
[gps] Saw OK

I’ll share the script too if you like.

Follow Up: I can’t find the AT command manual I downloaded yesterday, the filename was Telit_LE910Cx_AT_Commands_Reference_Guide_r8.pdf. If someone could please post the link I’d be grateful.