EC25-A eSIM AT+CGACT=1,1 ERROR and QMI 'generic-no-service'

Hello. I have several Globalgig eSIMs that are activated successfully. I want to uses these with several Quectel EC25-As and part of a new product.

I am running this firmware version on the EC25-As:
EC25AFAR05A07M4G_01.001.01.001

The APN for this service is ‘mbb.mobi-data.com’. I have read quite a few blog posts about how to get this to work such as https://1ot.com/resources/blog/at-commands-set-quectel-ec25-e-up-for-esim.

No matter what I do, after enabling BIP mode, as well as roaming, I always get ERROR when I attempt to activate the PDP context with this command:
CGACT=1,1

How can I get this to work? Thank you.

Here are my attempts:

Attempt #1

AT+CFUN=0: “Power Modem on”

AT+CFUN=1: “Power Moem off”

AT+QGMR: “Get version”

AT+QCFG=“roamservice”,1: “Disable roaming”

AT+CMEE=2: “Enable verbose debugging”

AT+CREG=1: “Enable network registration”

AT+QCFG=“bip/auth”,1: “Enable BIP mode”

AT+CGDCONT=1,“IP”,“”: “Set APN”

AT+CGATT?: “Get GPRS service status”

AT+QCFG=“roamservice”: “Get roaming status”

AT+CGACT=1,1: “Activate PDP context”

AT+CGDCONT?: “Get PDP context”

AT+QCFG=“roamservice”,2: “Enable roaming”

AT+CREG?:“Get registration status”


Running command: b’AT+CFUN=0\r’ | Power Modem on

Response: AT+CFUN=0

OK


Running command: b’AT+CFUN=1\r’ | Power Moem off

Response: AT+CFUN=1

OK


Running command: b’AT+QGMR\r’ | Get version

Response: AT+QGMR

EC25AFAR05A07M4G_01.001.01.001

OK


Running command: b’AT+QCFG=“roamservice”,1\r’ | Disable roaming

Response: AT+QCFG=“roamservice”,1

OK


Running command: b’AT+CMEE=2\r’ | Enable verbose debugging

Response: AT+CMEE=2

OK


Running command: b’AT+CREG=1\r’ | Enable network registration

Response: AT+CREG=1

OK


Running command: b’AT+QCFG=“bip/auth”,1\r’ | Enable BIP mode

Response: AT+QCFG=“bip/auth”,1

OK


Running command: b’AT+CGDCONT=1,“IP”,“”\r’ | Set APN

Response: AT+CGDCONT=1,“IP”,“”

OK


Running command: b’AT+CGATT?\r’ | Get GPRS service status

Response: AT+CGATT?

+CGATT: 0

OK


Running command: b’AT+QCFG=“roamservice”\r’ | Get roaming status

Response: AT+QCFG=“roamservice”

+QCFG: “roamservice”,1

OK


Running command: b’AT+CGACT=1,1\r’ | Activate PDP context

Response: AT+CGACT=1,1

ERROR


Running command: b’AT+CGDCONT?\r’ | Get PDP context

Response: AT+CGDCONT?

+CGDCONT: 1,“IP”,“”,“0.0.0.0”,0,0,0,0

+CGDCONT: 2,“IPV4V6”,“ims”,“0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0”,0,0,0,0

+CGDCONT: 3,“IPV4V6”,“SOS”,“0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0”,0,0,0,1

OK


Running command: b’AT+QCFG=“roamservice”,2\r’ | Enable roaming

Response: AT+QCFG=“roamservice”,2

OK


Running command: b’AT+CREG?\r’ | Get registration status

Response: AT+CREG?

+CREG: 1,2

OK

Attempt #2

AT+CFUN=0 Power Modem on

AT+CFUN=1 Power Moem off

AT+QGMR Get version

AT+QCFG=“roamservice”,1 Disable roaming

AT+CMEE=2 Enable verbose debugging

AT+CREG=1 Enable network registration

AT+QCFG=“bip/auth”,1 Enable BIP mode

AT+CGDCONT=1,“IP”,“” Set APN

AT+QCFG=“roamservice”,2 Enable roaming

AT+CGACT=1,1 Activate PDP context

AT+CGDCONT? Get PDP context

AT+CREG? Get registration status


Running command: b’AT+CFUN=0\r’ | Power Modem on

Response: AT+CFUN=0

OK


Running command: b’AT+CFUN=1\r’ | Power Moem off

Response: AT+CFUN=1

OK


Running command: b’AT+QGMR\r’ | Get version

Response: AT+QGMR

EC25AFAR05A07M4G_01.001.01.001

OK


Running command: b’AT+QCFG=“roamservice”,1\r’ | Disable roaming

Response: AT+QCFG=“roamservice”,1

OK


Running command: b’AT+CMEE=2\r’ | Enable verbose debugging

Response: AT+CMEE=2

OK


Running command: b’AT+CREG=1\r’ | Enable network registration

Response: AT+CREG=1

OK


Running command: b’AT+QCFG=“bip/auth”,1\r’ | Enable BIP mode

Response: AT+QCFG=“bip/auth”,1

OK


Running command: b’AT+CGDCONT=1,“IP”,“”\r’ | Set APN

Response: AT+CGDCONT=1,“IP”,“”

OK


Running command: b’AT+QCFG=“roamservice”,2\r’ | Enable roaming

Response: AT+QCFG=“roamservice”,2

OK


Running command: b’AT+CGACT=1,1\r’ | Activate PDP context

Response: AT+CGACT=1,1

ERROR


Running command: b’AT+CGDCONT?\r’ | Get PDP context

Response: AT+CGDCONT?

+CGDCONT: 1,“IP”,“”,“0.0.0.0”,0,0,0,0

+CGDCONT: 2,“IPV4V6”,“ims”,“0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0”,0,0,0,0

+CGDCONT: 3,“IPV4V6”,“SOS”,“0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0”,0,0,0,1

OK


Running command: b’AT+CREG?\r’ | Get registration status

Response: AT+CREG?

+CREG: 1,2

OK

Attempt #3

AT+QGMR Get version

AT+QSTK=0 Disable toolkit

AT+QESIM=“list” Check eSIM

AT+QCFG=“roamservice”,2 Enable roaming

AT+CGDCONT=1,“IP”,“mbb.mobi-data.com” Set APN

AT+QCFG=“bip/auth”,1 Enable BIP

AT+QCFG=“nwscanmode”,3,1 Enable LTE only

AT+QENG=“servingcell” Enable BIP

AT+CGACT=1,1 Activate PDP context

AT+QCFG=“roamservice” Get roaming status

AT+CGDCONT? Get PDP context

AT+CREG? Get registration status


Running command: b’AT+QGMR\r’ | Get version

Response: AT+QGMR

EC25AFAR05A07M4G_01.001.01.001

OK


Running command: b’AT+QSTK=0\r’ | Disable toolkit

Response: AT+QSTK=0

OK


Running command: b’AT+QESIM=“list”\r’ | Check eSIM

Response: AT+QESIM=“list”

ERROR


Running command: b’AT+QCFG=“roamservice”,2\r’ | Enable roaming

Response: AT+QCFG=“roamservice”,2

OK


Running command: b’AT+CGDCONT=1,“IP”,“mbb.mobi-data.com”\r’ | Set APN

Response: AT+CGDCONT=1,“IP”,“mbb.mobi-data.com

OK


Running command: b’AT+QCFG=“bip/auth”,1\r’ | Enable BIP

Response: AT+QCFG=“bip/auth”,1

OK


Running command: b’AT+QCFG=“nwscanmode”,3,1\r’ | Enable LTE only

Response: AT+QCFG=“nwscanmode”,3,1

OK


Running command: b’AT+QENG=“servingcell”\r’ | Enable BIP

Response: AT+QENG=“servingcell”

+QENG: “servingcell”,“SEARCH”

OK


Running command: b’AT+CGACT=1,1\r’ | Activate PDP context

Response: AT+CGACT=1,1

ERROR


Running command: b’AT+QCFG=“roamservice”\r’ | Get roaming status

Response: AT+QCFG=“roamservice”

+QCFG: “roamservice”,2

OK


Running command: b’AT+CGDCONT?\r’ | Get PDP context

Response: AT+CGDCONT?

+CGDCONT: 1,“IP”,“mbb.mobi-data.com”,“0.0.0.0”,0,0,0,0

+CGDCONT: 2,“IPV4V6”,“ims”,“0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0”,0,0,0,0

+CGDCONT: 3,“IPV4V6”,“SOS”,“0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0”,0,0,0,1

OK


Running command: b’AT+CREG?\r’ | Get registration status

Response: AT+CREG?

+CREG: 1,2

OK

Attempt #4

AT&F0 Reset to factory defaults
AT+CFUN=0 Shutdown Modem
AT+CFUN=1 Startup Modem
AT+CGMI Return the modem’s manufacturer
AT+CGMM Return the modem’s model number
AT+CGSN Return the modem’s serial number
AT+CPIN? Confirm the modem’s SIM is ready
AT+CMEE=2 Enable verbose debugging
AT+CGDCONT=1,“IP”,“mbb.mobi-data.com” Define PDP context
AT+QCFG=“bip/auth”,1 Enable BIP mode
AT+COPS=0 Enable automatic network searching
AT+QCFG=“roamservice”,2,1 Enable roaming
AT+CGACT=1,1 Activate PDP context
AT+QCFG=“roamservice” Get roaming status
AT+CGDCONT? Get PDP context
AT+CEREG? Get registration status

2024-01-22 01:52:08,664:INFO:Running modem command: b’AT&F0\r’ | Reset to factory defaults
2024-01-22 01:52:28,681:INFO:Modem response: AT&F0
OK

2024-01-22 01:52:28,681:INFO:Running modem command: b’AT+CFUN=0\r’ | Shutdown Modem
2024-01-22 01:52:48,699:INFO:Modem response: AT+CFUN=0
OK

2024-01-22 01:52:48,700:INFO:Running modem command: b’AT+CFUN=1\r’ | Startup Modem
2024-01-22 01:53:08,721:INFO:Modem response: AT+CFUN=1
OK

2024-01-22 01:53:08,722:INFO:Running modem command: b’AT+CGMI\r’ | Return the modem’s manufacturer
2024-01-22 01:53:28,743:INFO:Modem response: AT+CGMI
Quectel

OK

2024-01-22 01:53:28,743:INFO:Running modem command: b’AT+CGMM\r’ | Return the modem’s model number
2024-01-22 01:53:48,755:INFO:Modem response: AT+CGMM
EC25

OK

2024-01-22 01:53:48,756:INFO:Running modem command: b’AT+CGSN\r’ | Return the modem’s serial number
2024-01-22 01:54:08,775:INFO:Modem response: AT+CGSN
860858060814522

OK

2024-01-22 01:54:08,776:INFO:Running modem command: b’AT+CPIN?\r’ | Confirm the modem’s SIM is ready
2024-01-22 01:54:28,789:INFO:Modem response: AT+CPIN?
+CPIN: READY

OK

2024-01-22 01:54:28,789:INFO:Running modem command: b’AT+CMEE=2\r’ | Enable verbose debugging
2024-01-22 01:54:48,811:INFO:Modem response: AT+CMEE=2
OK

2024-01-22 01:54:48,811:INFO:Running modem command: b’AT+CGDCONT=1,“IP”,“mbb.mobi-data.com”\r’ | Define PDP context
2024-01-22 01:55:08,824:INFO:Modem response: AT+CGDCONT=1,“IP”,“mbb.mobi-data.com
OK

2024-01-22 01:55:08,824:INFO:Running modem command: b’AT+QCFG=“bip/auth”,1\r’ | Enable BIP mode
2024-01-22 01:55:28,846:INFO:Modem response: AT+QCFG=“bip/auth”,1
OK

2024-01-22 01:55:28,846:INFO:Running modem command: b’AT+COPS=0\r’ | Enable automatic network searching
2024-01-22 01:55:48,868:INFO:Modem response: AT+COPS=0
OK

2024-01-22 01:55:48,868:INFO:Running modem command: b’AT+QCFG=“roamservice”,2,1\r’ | Enable roaming
2024-01-22 01:56:08,890:INFO:Modem response: AT+QCFG=“roamservice”,2,1
OK

2024-01-22 01:56:08,890:INFO:Running modem command: b’AT+CGACT=1,1\r’ | Activate PDP context
2024-01-22 01:56:28,911:INFO:Modem response: AT+CGACT=1,1
+CME ERROR: no network service

2024-01-22 01:56:28,912:INFO:Running modem command: b’AT+QCFG=“roamservice”\r’ | Get roaming status
2024-01-22 01:56:48,933:INFO:Modem response: AT+QCFG=“roamservice”
+QCFG: “roamservice”,2

OK

2024-01-22 01:56:48,934:INFO:Running modem command: b’AT+CGDCONT?\r’ | Get PDP context
2024-01-22 01:57:08,955:INFO:Modem response: AT+CGDCONT?
+CGDCONT: 1,“IP”,“mbb.mobi-data.com”,“0.0.0.0”,0,0,0,0
+CGDCONT: 2,“IPV4V6”,“ims”,“0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0”,0,0,0,0
+CGDCONT: 3,“IPV4V6”,“SOS”,“0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0”,0,0,0,1

OK

2024-01-22 01:57:08,956:INFO:Running modem command: b’AT+CEREG?\r’ | Get registration status
2024-01-22 01:57:28,977:INFO:Modem response: AT+CEREG?
+CEREG: 0,2

OK

Here is my script to get an IP Address with raw_ip and libqmi on Linux:

#!/bin/bash

Define the interface

INTERFACE=$1

Define the APN

CELL_APN=$2

Define the device

DEVICE=“/dev/cdc-wdm0”

Error handler

function handle_cell_error {

echo “*** Error with cellular connection! [Exiting with: $1]”

exit $1

}

echo “*** Setting up cellular connection …”

ip link set dev “${INTERFACE}” down || handle_cell_error “$?”

ifconfig “${INTERFACE}” down || handle_cell_error “$?”

qmi-network ${DEVICE} stop || handle_cell_error “$?”

echo ‘N’ | tee “/sys/class/net/${INTERFACE}/qmi/raw_ip” || handle_cell_error “$?”

echo “Y” > “/sys/class/net/${INTERFACE}/qmi/raw_ip” || handle_cell_error “$?”

qmi-network “${DEVICE}” start || handle_cell_error “$?”

qmicli -d /dev/cdc-wdm0 --device-open-qmi --wds-reset

qmicli -d /dev/cdc-wdm0 --device-open-qmi --wds-start-network=“ip-type=4” --client-no-release-cid

sleep 1

udhcpc -q -f -i “${INTERFACE}” || handle_cell_error “$?”

ip link set dev “${INTERFACE}” up || handle_cell_error “$?”

ifconfig “${INTERFACE}” up || handle_cell_error “$?”

ping -I “${INTERFACE}” -c 3 google.com || handle_cell_error “$?”

echo “*** Cellular connection successfully established …” || handle_cell_error “$?”

exit 0

./start-cellular.sh wwan0 mbb.mobi-data.com

*** Setting up cellular connection …

Profile at ‘/etc/qmi-network.conf’ not found…

Network already stopped

Clearing state at /tmp/qmi-network-state-cdc-wdm0…

N

Profile at ‘/etc/qmi-network.conf’ not found…

Checking data format with 'qmicli -d /dev/cdc-wdm0 --wda-get-data-format '…

Device link layer protocol retrieved: raw-ip

Getting expected data format with ‘qmicli -d /dev/cdc-wdm0 --get-expected-data-format’…

Expected link layer protocol retrieved: raw-ip

Device and kernel link layer protocol match: raw-ip

Starting network with 'qmicli -d /dev/cdc-wdm0 --wds-start-network= --client-no-release-cid '…

error: couldn’t start network: QMI protocol error (14): ‘CallFailed’

call end reason (3): generic-no-service

verbose call end reason (3,2001): [cm] no-service

Saving state at /tmp/qmi-network-state-cdc-wdm0… (CID: 20)

error: network start failed, no packet data handle

Clearing state at /tmp/qmi-network-state-cdc-wdm0…

*** Error with cellular connection! [Exiting with: 2]