How to check module registration with AT command

Why are there 3 different commands to check the module is registered (attached) to the network? It is according to the different types of core network architecture:

AT+CREG // GERAN, E-UTRAN – core network used in 2G and 3G mode
AT+CGREG // GPRS, GERAN – data services in 2G GSM/GPRS core network
AT+CEREG // EPS – (Evolved Packet System) core network used in 4G mode

The module can state what kind of services it registered for according to the type of core network that it attempted to attach to.
For general user, they don’t really have much idea which type of core network is out there, but these commands come from 3GPP standards… But generally for 4G, only CEREG needs to be checked. For 2G and 3G, then CREG and CGREG can be used.

It can be that for modules that support different radio technologies, a SIM is only registered for service in 4G so AT+CREG returns registration denied but CEREG returns registered OK…

Hope this helps…


Yes, you’re correct. +CREG is usually used to indicate the registration status for Circuit Switch domain. For example, if +CREG returns denied, CS voice call would not be available.
Also some Network Operators don’t deploy GSM network, and they use Voice over LTE. In this scenario, +CREG would return denied and +CEREG returns registered OK.
In some network, data-only sim card could also have this result.