BC66 Out Of Service Indicator

Hello everyone,

I’d like to know what’s your preferred method for handling Out Of Service scenarios?

I’m using BC66 to transmit UDP message and within 2-10 seconds receive an ACK message from the server.

The system is primary battery powered so transmissions should be as short as possible, but since not all messages are critical, a few missing per day (out of 24) wouldn’t be that bad, as long as the system isn’t prevented from entering deep sleep mode (which happens if the device loses connection between wake-up events).

Attached is a power-up procedure and first initialization, along with successful wake up and send routine, and unsuccessful one (both with good signal quality).

Quectel customer support suggested to use AT+QOOSAIND command for OOS URC messages, but these don’t work consistently and when they do, the waiting period for the module to enter deep sleep is too long, so they suggested to power down the module if a certain timeout without receiving CEREG URC expires.

11/29/2022 09:10:33.815 [COM16] - <LF><CR>

F1: 0000 0000<LF><CR>

V0: 0000 0000 [0001]<LF><CR>

00: 0006 000C<LF><CR>

01: 0000 0000<LF><CR>

U0: 0000 0001 [0000]<LF><CR>

T0: 0000 00B4<LF><CR>

Leaving the BROM<LF><CR>

<LF><CR>

11/29/2022 09:10:35.596 [COM4] - ATE0<CR>

11/29/2022 09:10:35.617 [COM4] - ATI<CR>

11/29/2022 09:10:35.632 [COM16] - <CR><LF>

OK<CR><LF>

11/29/2022 09:10:35.636 [COM4] - ATV1<CR>

11/29/2022 09:10:35.637 [COM16] - <CR><LF>

Quectel_Ltd<CR><LF>

Quectel_BC66<CR><LF>

Revision: BC66NBR01A11<CR><LF>

<CR><LF>

OK<CR><LF>

<CR><LF>

OK<CR><LF>

11/29/2022 09:10:35.646 [COM4] - AT+QICFG="showlength",1<CR>

11/29/2022 09:10:35.676 [COM4] - AT+CPIN?<CR>

11/29/2022 09:10:35.677 [COM16] - <CR><LF>

OK<CR><LF>

11/29/2022 09:10:35.692 [COM4] - AT+CMEE=1<CR>

11/29/2022 09:10:35.692 [COM16] - <CR><LF>

+CPIN: READY<CR><LF>

<CR><LF>

OK<CR><LF>

11/29/2022 09:10:35.701 [COM4] - AT+CGSN=1<CR>

11/29/2022 09:10:35.710 [COM16] - <CR><LF>

OK<CR><LF>

11/29/2022 09:10:35.719 [COM4] - AT+QCCID<CR>

11/29/2022 09:10:35.720 [COM16] - <CR><LF>

+CGSN: xxx<CR><LF>

<CR><LF>

OK<CR><LF>

11/29/2022 09:10:35.734 [COM4] - AT+CEREG=5<CR>

11/29/2022 09:10:35.735 [COM16] - <CR><LF>

+QCCID: xxx<CR><LF>

<CR><LF>

OK<CR><LF>

<CR><LF>

OK<CR><LF>

11/29/2022 09:10:35.746 [COM4] - AT+CPSMS=1,,,"11000001","00000000"<CR>

11/29/2022 09:10:35.771 [COM4] - AT+QNBIOTEVENT=1,1<CR>

11/29/2022 09:10:35.771 [COM16] - <CR><LF>

OK<CR><LF>

11/29/2022 09:10:35.782 [COM16] - <CR><LF>

OK<CR><LF>

11/29/2022 09:10:35.782 [COM4] - AT+QCFG="dsevent",1<CR>

11/29/2022 09:10:35.803 [COM4] - AT+QEDRXCFG=0<CR>

11/29/2022 09:10:35.804 [COM16] - <CR><LF>

OK<CR><LF>

11/29/2022 09:10:35.816 [COM4] - AT+QCGDEFCONT?<CR>

11/29/2022 09:10:35.816 [COM16] - <CR><LF>

OK<CR><LF>

11/29/2022 09:10:35.832 [COM4] - AT+COPS=1,2,"21901",9<CR>

11/29/2022 09:10:35.835 [COM16] - <CR><LF>

+QCGDEFCONT: "IP","iot.1nce.net"<CR><LF>

<CR><LF>

OK<CR><LF>

11/29/2022 09:10:39.079 [COM16] - <CR><LF>

+CEREG: 5,"0907","0557C95D",9,0,0,"00000010","00001001"<CR><LF>

<CR><LF>

OK<CR><LF>

11/29/2022 09:10:39.098 [COM4] - AT+CEREG?<CR>

11/29/2022 09:10:39.108 [COM16] - <CR><LF>

+CEREG: 5,5,"0907","0557C95D",9,0,0,"00000010","00001001"<CR><LF>

<CR><LF>

O

11/29/2022 09:10:39.109 [COM4] - AT+CSQ<CR><LF>

11/29/2022 09:10:39.110 [COM16] - K<CR><LF>

11/29/2022 09:10:39.142 [COM4] - AT+CESQ<CR><LF>

11/29/2022 09:10:39.143 [COM16] - <CR><LF>

+CSQ: 16,0<CR><LF>

<CR><LF>

OK<CR><LF>

11/29/2022 09:10:39.163 [COM4] - AT+CGATT?<CR>

11/29/2022 09:10:39.164 [COM16] - <CR><LF>

+CESQ: 30,0,255,255,16,48<CR><LF>

<CR><LF>

OK<CR><LF>

11/29/2022 09:10:39.182 [COM16] - <CR><LF>

+CGATT: 1<CR><LF>

11/29/2022 09:10:39.184 [COM4] - AT+QCGDEFCONT?<CR>

11/29/2022 09:10:39.185 [COM16] - <CR><LF>

OK<CR><LF>

11/29/2022 09:10:39.216 [COM16] - <CR><LF>

+QCGDEFCONT: "IP","iot.1nce.net"<CR><LF>

<CR><LF>

OK<CR><LF>

11/29/2022 09:10:39.317 [COM4] - AT+QGACT=1,1,"iot.1nce.net","",""<CR>

11/29/2022 09:10:39.350 [COM16] - <CR><LF>

+QGACT: 1<CR><LF>

<CR><LF>

OK<CR><LF>

11/29/2022 09:10:39.617 [COM16] - <CR><LF>

+IP: 100.80.116.80<CR><LF>

11/29/2022 09:10:39.637 [COM16] - <CR><LF>

+QGACT: 1,1,1,1<CR><LF>

11/29/2022 09:10:39.656 [COM4] - AT+QIOPEN=1,1,"UDP","xx.xxx.xxx.xxx",xxxx,0,0<CR>

11/29/2022 09:10:39.735 [COM16] - <CR><LF>

OK<CR><LF>

11/29/2022 09:10:39.810 [COM4] - AT+QISTATE?<CR>

11/29/2022 09:10:39.811 [COM16] - <CR><LF>

+QIOPEN: 1,0<CR><LF>

11/29/2022 09:10:39.845 [COM16] - <CR><LF>

+QISTATE: 1,"UDP","xx.xxx.xxx.xxx",xxxx,0,2,1,0<CR><LF>

11/29/2022 09:10:39.847 [COM4] - AT+QNBIOTRAI=2<CR>

11/29/2022 09:10:39.848 [COM16] - <CR><LF>

OK<CR><LF>

11/29/2022 09:10:39.868 [COM4] - AT+CCLK?<CR>

11/29/2022 09:10:39.869 [COM16] - <CR><LF>

OK<CR><LF>

11/29/2022 09:10:39.889 [COM4] - AT+QNBIOTRAI=2<CR>

11/29/2022 09:10:39.889 [COM16] - <CR><LF>

+CCLK: 2022/11/29,08:10:39GMT+1<CR><LF>

<CR><LF>

OK<CR><LF>

11/29/2022 09:10:39.911 [COM16] - <CR><LF>

OK<CR><LF>

11/29/2022 09:10:39.971 [COM4] - AT+QISENDEX=1,48,xxx<CR>

11/29/2022 09:10:40.020 [COM16] - <CR><LF>

OK<CR><LF>

11/29/2022 09:10:40.053 [COM16] - <CR><LF>

SEND OK<CR><LF>

11/29/2022 09:10:40.591 [COM4] - AT+QIRD=1,512<CR>

11/29/2022 09:10:40.591 [COM16] - <CR><LF>

+QIURC: "recv",1,1<CR><LF>

11/29/2022 09:10:40.645 [COM4] - AT+QSCLK=1<CR>

11/29/2022 09:10:40.645 [COM16] - <CR><LF>

+QIRD: 1,0<CR><LF>

<ACK>_<CR><LF>

<CR><LF>

OK<CR><LF>

11/29/2022 09:10:40.679 [COM4] - AT+QRELLOCK<CR>

11/29/2022 09:10:40.684 [COM16] - <CR><LF>

OK<CR><LF>

<CR><LF>

OK<CR><LF>

11/29/2022 09:10:44.657 [COM16] - <CR><LF>

+QNBIOTEVENT: "ENTER PSM"<CR><LF>

11/29/2022 09:10:49.515 [COM16] - +QNBIOTEVENT: "ENTER DEEPSLEEP"<CR><LF>

Subsequent wake up and send routine (case where everything is fine):

11/29/2022 09:18:30.822 [COM4] - AT+CSQ<CR><LF>

11/29/2022 09:18:31.364 [COM16] - <LF><CR>

F1: 0000 0000<LF><CR>

V0: 0000 0000 [0001]<LF><CR>

00: 0000 0000<LF><CR>

U0: 0000 0001 [0000]<LF><CR>

T0: 0000 001E<LF><CR>

Leaving the BROM<LF><CR>

<LF><CR>

11/29/2022 09:18:31.577 [COM16] - <CR><LF>

+CEREG: 5,"0907","0557C95D",9,0,0,"00000010","00001001"<CR><LF>

11/29/2022 09:18:31.611 [COM16] - <CR><LF>

+CPIN: READY<CR><LF>

11/29/2022 09:18:32.109 [COM4] - AT+CSQ<CR><LF>

11/29/2022 09:18:32.120 [COM4] - AT+CESQ<CR><LF>

11/29/2022 09:18:32.121 [COM16] - <CR><LF>

+CSQ: 16,0<CR><LF>

<CR><LF>

OK<CR><LF>

11/29/2022 09:18:32.129 [COM4] - AT+CGATT?<CR>

11/29/2022 09:18:32.130 [COM16] - <CR><LF>

+CESQ: 29,0,255,255,16,48<CR><LF>

<CR><LF>

OK<CR><LF>

11/29/2022 09:18:32.136 [COM4] - AT+CCLK?<CR>

11/29/2022 09:18:32.138 [COM16] - <CR><LF>

+CGATT: 1<CR><LF>

<CR><LF>

OK<CR><LF>

11/29/2022 09:18:32.147 [COM4] - AT+QNBIOTRAI=2<CR>

11/29/2022 09:18:32.147 [COM16] - <CR><LF>

+CCLK: 2022/11/29,08:18:31GMT+1<CR><LF>

<CR><LF>

OK<CR><LF>

<CR><LF>

OK<CR><LF>

11/29/2022 09:18:32.236 [COM4] - AT+QISENDEX=1,48,xxx<CR>

11/29/2022 09:18:32.273 [COM16] - <CR><LF>

OK<CR><LF>

<CR><LF>

+CEREG: 2,"0907","0557C95D",9,0,0,"00000010","00001001"<CR><LF>

<CR><LF>

+QNBIOTEVENT: "EXIT PSM"<CR><LF>

11/29/2022 09:18:32.289 [COM16] - <CR><LF>

SEND OK<CR><LF>

11/29/2022 09:18:38.698 [COM16] - <CR><LF>

+CEREG: 5,"0907","0557755C",9,0,0,"00000010","00001001"<CR><LF>

11/29/2022 09:18:40.034 [COM4] - AT+QIRD=1,512<CR>

11/29/2022 09:18:40.034 [COM16] - <CR><LF>

+QIURC: "recv",1,1<CR><LF>

11/29/2022 09:18:40.049 [COM4] - AT+QSCLK=1<CR>

11/29/2022 09:18:40.050 [COM16] - <CR><LF>

+QIRD: 1,0<CR><LF>

<ACK>_<CR><LF>

<CR><LF>

OK<CR><LF>

11/29/2022 09:18:40.063 [COM4] - AT+QRELLOCK<CR>

11/29/2022 09:18:40.064 [COM16] - <CR><LF>

OK<CR><LF>

<CR><LF>

OK<CR><LF>

11/29/2022 09:18:43.914 [COM16] - <CR><LF>

+QNBIOTEVENT: "ENTER PSM"<CR><LF>

11/29/2022 09:18:44.044 [COM16] - +QNBIOTEVENT: "ENTER DEEPSLEEP"<CR><LF>

Subsequent wake up and send routine (case where CEREG: 5, URC doesn’t arrive and I’m shutting the module down to prevent energy expenditure):

11/29/2022 08:34:33.055 [COM4] - AT+CSQ<CR><LF>

11/29/2022 08:34:33.597 [COM16] - <LF><CR>

F1: 0000 0000<LF><CR>

V0: 0000 0000 [0001]<LF><CR>

00: 0000 0000<LF><CR>

U0: 0000 0001 [0000]<LF><CR>

T0: 0000 001E<LF><CR>

Leaving the BROM<LF><CR>

<LF><CR>

11/29/2022 08:34:33.811 [COM16] - <CR><LF>

+CEREG: 5,"0907","0557755C",9,0,0,"00000010","00001001"<CR><LF>

11/29/2022 08:34:33.845 [COM16] - <CR><LF>

+CPIN: READY<CR><LF>

11/29/2022 08:34:34.343 [COM4] - AT+CSQ<CR><LF>

11/29/2022 08:34:34.354 [COM4] - AT+CESQ<CR><LF>

AT+CGATT?<CR>

11/29/2022 08:34:34.369 [COM16] - <CR><LF>

+CSQ: 14,0<CR><LF>

<CR><LF>

OK<CR><LF>

<CR><LF>

+CESQ: 26,0,255,255,14,44<CR><LF>

<CR><LF>

OK<CR><LF>

11/29/2022 08:34:34.371 [COM4] - AT+CCLK?<CR>

11/29/2022 08:34:34.372 [COM16] - <CR><LF>

+CGATT: 1<CR><LF>

<CR><LF>

OK<CR><LF>

11/29/2022 08:34:34.381 [COM4] - AT+QNBIOTRAI=2<CR>

11/29/2022 08:34:34.381 [COM16] - <CR><LF>

+CCLK: 2022/11/29,07:34:33GMT+1<CR><LF>

<CR><LF>

OK<CR><LF>

<CR><LF>

OK<CR><LF>

11/29/2022 08:34:34.460 [COM4] - AT+QISENDEX=1,50,xxx<CR>

11/29/2022 08:34:34.495 [COM16] - <CR><LF>

OK<CR><LF>

<CR><LF>

+CEREG: 2,"0907","0557755C",9,0,0,"00000010","00001001"<CR><LF>

<CR><LF>

+QNBIOTEVENT: "EXIT PSM"<CR><LF>

11/29/2022 08:34:34.514 [COM16] - <CR><LF>

SEND OK<CR><LF>

11/29/2022 08:34:50.509 [COM4] - AT+QPOWD=0<CR>

11/29/2022 08:34:55.894 [COM16] - <LF><CR>

F1: 0000 0000<LF><CR>

V0: 0000 0000 [0001]<LF><CR>

00: 0006 000C<LF><CR>

01: 0000 0000<LF><CR>

U0: 0000 0001 [0000]<LF><CR>

T0: 0000 00B4<LF><CR>

Leaving the BROM<LF><CR>

<LF><CR>

11/29/2022 08:34:58.706 [COM4] - AT+QPOWD=0<CR>

11/29/2022 08:34:58.733 [COM16] - <CR><LF>

OK<CR><LF>

According to the above log analysis, the time to enter PSM and deepsleep is not long. Do you plan to use power off mode for your product?

You’re right, in the first two cases shown in the log the time to enter deep sleep is indeed short.

However, in the third case CEREG: 5 URC doesn’t arrive for 15+ seconds after sending the message so in that case I shut the module down.

It would be better to always go to deep sleep, but powering it down ultimately wastes less energy than waiting for RCC (sometimes up to couple of minutes).

Is there an indicator that the message was successfully sent to the cell tower or alternatively, that it has failed?

If the data is sent to the server successfully and no URC message is returned, you can add this ACK message on the server side. When the server receives the message sent by the module, it sends an ACK to the module to confirm that the module has successfully sent the message.
I suggest you still have to go through multiple tests to verify it

Thank you for the reply.

As I’ve mentioned, everything is fine if module has solid connection to the network upon waking up.
What I’m inquiring about is what would be the fastest way to detect no network connection upon waking up?

I’ve seen CEREG URC’s mentioned as a best way, so I’m powering the module down to preserve energy if the URC doesn’t arrive in arbitrary number of seconds. Is there a better/faster way to do it?

If you query CEREG after the module wakes up, you cannot determine whether the current network is normal or not. The CEREG result is saved in history. I suggest that the module immediately execute AT+CSCON=1 and AT+QPING=1,8.8.8.8, if +CSCON:1 is returned later. High probability network can recover successfully

It seems you’re explicitely requiring one network provider (T-M HR). You can really speed up the search using AT+QLOCKF command. In your case it is probably going to be EARFCN 6444. This way the module can search the network much faster and if not in range stop searching really quickly.