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…