Dear Sir,
I would like to know if it could be possible to send binary data using AT+QISENDEX=,<hex_data>. From datasheet and examples it seems I have to convert the <hex_data> payload in an ASCII string like “3132333435”, doubling the payload size. Is it possible to send <hex_data> directly in binary format like [ 0x31, 0x32, 0x33, 0x34, 0x35 ] ?
Many thanks,
Angelo
Now I’m trying also in TRANSPARENT mode, but each time it seems the modem send less data than required:
- "SEND(0)=176: " = 176 bytes sent to the modem!
Anyway, the modem send back the message “NO CARRIER”, this should mean it closed the TRANSPARENT mode and the connection is broken!
The behaviour seems does not depend from data frame size.
Questions:
- is there any way to send BINARY data in a safe/controlled way ?
- what should be the exact meaning of “NO CARRIER” message in this context ?
- if I try to restore the TCP socket by AT+QIOPEN, I get an error “+QIOPEN: 0,563” ?
Could you help me to define the right way to work ?
Following some logged info from different connections/sessions.
Logged info:
( [ms] : Action(info): AT+COMMAND {RxedAnswer } ErrCode ) = legend
- 15016: SetTRSPmode: AT+QISWTMD=0,2 { CONNECT } ok!
- 15320: SEND(0)=176: …ok!
- 15320: BackCMDmode: +++{Messaggio ricevuto! NO CARRIER } #ERR(17)=UNIMPLEM
- 16620: QISEND.ACK data: AT+QISEND=0,0 { +QISEND: 122,122,0 OK } Sent=122,122,0 T=4ms ok!
- 17124: QISEND.ACK data: AT+QISEND=0,0 { +QISEND: 122,122,0 OK } Sent=122,122,0 T=4ms ok!
- 17628: QISEND.ACK data: AT+QISEND=0,0 { +QISEND: 122,122,0 OK } Sent=122,122,0 T=4ms ok!
- 19999: SetTRSPmode: AT+QISWTMD=0,2 { CONNECT } ok!
- 20302: SEND(0)=20: ..ok!
- 20302: BackCMDmode: +++{ OK } ok!
- 22205: QISEND.ACK data: AT+QISEND=0,0 { +QISEND: 16,0,16 OK } Sent=16,0,16 T=4ms ok!
- 22709: QISEND.ACK data: AT+QISEND=0,0 { +QIURC: “recv”,0 +QISEND: 16,16,0 OK } Sent=16,16,0 T=4ms ok!
- 23213: QISEND.ACK data: AT+QISEND=0,0 { +QIURC: “closed”,0 +QISEND: 16,16,0 OK } Sent=16,16,0 T=4ms ok!
- 23717: CheckSOCKET: AT+QISTATE=1,0 { +QISTATE: 0,“TCP”,“57.129.56.131”,9999,8467,4,1,0,0,“uart1” OK }#ERR(41)=CLOSE
- 23725: QIOPEN.SOCKET.open(TCP:57.129.56.131:9999): AT+QIOPEN=1,0,“TCP”,“57.129.56.131”,9999,0,0 { OK }T=5ms ok!
- 23731: QIRD:Read data: AT+QIRD=0,490 { +QIOPEN: 0,563 +QIRD: 19 Messaggio ricevuto! OK }ok!
- 24236: QIRD:Read data: AT+QIRD=0,490 { +QIRD: 0 OK }#ERR(20)=EMPTY
- 24239: CheckSOCKET: AT+QISTATE=1,0 { +QISTATE: 0,“TCP”,“57.129.56.131”,9999,8467,4,1,0,0,“uart1” OK }#ERR(41)=CLOSE
- 24248: QICLOSE.SOCKET close: AT+QICLOSE=0 { OK }T=2ms ok!
- 24250: QIDEACT.PDP/TCP close: AT+QIDEACT=1 { OK }T=2ms ok!
- 24253: QPOWD.PowerDown(0): AT+QPOWD=0 { OK }{ POWERED DOWN }T=303ms ok!
--------------------------- “XX+” = hex data --------------------------------------- - 10715: SetTRSPmode: AT+QISWTMD=0,2 { CONNECT } ok!
- 11019: SEND(0)=56: FE+3F+FF+1E+5A+02+44+04+2C+19+5A+02+D1+00+82+07+D8+00+D1+00+58+1A+5A+02+D1+00+D1+00+CC+00+D1+00+84+1B+5A+02+D1+00+D1+00+D8+00+D1+00+B0+1C+5A+02+D1+00+D1+00+CC+00+D1+00+ ok
- 11020: BackCMDmode: +++{Messaggio ricevuto! NO CARRIER } #ERR(17)=UNIMPLEM
- 12320: QISEND.ACK data: AT+QISEND=0,0 { +QISEND: 41,41,0 OK } Sent=41,41,0 T=4ms ok!
- 12824: QISEND.ACK data: AT+QISEND=0,0 { +QISEND: 41,41,0 OK } Sent=41,41,0 T=4ms ok!
- 13328: QISEND.ACK data: AT+QISEND=0,0 { +QISEND: 41,41,0 OK } Sent=41,41,0 T=4ms ok!
Modem:
Model: BG95-M2
Mrev: BG95M2LAR02A04
IMEI: 866840072698667
SIM(Com4):
IMSI: 206018130936479
ICCID: 89883040000019464796
Before the “NO CARRIER” problems was related to the cloud server, that was clocing TCP connection immediately after receiving
the first frame.
Now this was fixed, but still the modem confirm less data than n.bytes sent, and the cloud server receives only this partial
qantity of data.
MODEM.Test: ShowRX=ON Mcheck=26 MDM(7)=ok SIM(7)=ok
- RTC=25/03/25,15:22:24 @2102314
- 1: Modem ON: ST=0,Vm=1795 T=986 ok!
- 2501: AT.CheckModem: AT { RDY }ST=1,Vm=1796 ok
- 3065: EchoOFF(ATE0): ATE0 {ATE0 OK }ok!
- 3067: AT.clean: ok!
- 5067: CCLK:GetRTC: AT+CCLK? { +CCLK: “80/01/06,00:00:04+04” OK }WRONG!
- 5072: RTC.Get: 25/03/25 15:22:29 ok!
- 5072: CCLK:setRTC(25/03/25,15:22:29+04): AT+CCLK=“25/03/25,15:22:29+04” { OK }ok!
- 5076: CPIN.CheckSIM: AT+CPIN? { +CPIN: READY OK }READY:0s ok!
- 5080: QCCID:get SIM(ICCID): AT+QCCID { +QCCID: 89883040000019464796 OK }ok!
APN(2=Com4)=com4
- 5085: CIMI:get SIM(IMSI): AT+CIMI { 206018130936479 OK }ok!
- 5089: CEREG.PckSw service: AT+CEREG? { +CEREG: 0,2 OK }T=3ms N=0 St=2=SEARCH Wait!
- 9592: CEREG:Check: AT+CEREG? { APP RDY +CEREG: 0,2 OK }T=4506ms N=0 St=2=SEARCH Wait!
- 14095: CEREG:Check: AT+CEREG? { +CEREG: 0,5 OK }T=9009ms N=0 St=5=ROAMING ok!
- 14098: CSQ:SignalQuality: AT+CSQ { +CSQ: 25,99 OK }RxSSI=25=-63dBm BEr=99=0.00% ok!
- 14102: COPS:OperatorActive: AT+COPS? { +COPS: 0,0,“vodafone IT”,9 OK }T=5ms AT+COPS=3,2 { OK }ok!
- 14109: QENG:ServingCell: AT+QENG=“servingcell” { +QENG: “servingcell”,“CONNECT”,“NBIoT”,“FDD”,222,10,B07570,239,6354,20,0,0,69D5,-77,-10,-66,19, OK }
ST=4=CALL RAT=9=NBIoT MCC.MCN=222.10 cID=B07570 PCI=239 TAC=69D5 UDbw=0,0 RSRP=-77dBm RSRQ=-10dB RSSI=-66dBm SINR=19=-16.2dB SRlev=0dB ok!
TCPIPc setup: ID=1,Type=IPv4,APN=com4 (USR=RMC_BG95M2_16382,PWD=) Auth=NONE - 14122: QICSGP.TCPIPc.set(IPv4,com4,RMC_BG95M2_16382): AT+QICSGP=1,1,“com4” { OK }ok!
PDPc setup: CID=1,Type=IP,APN=com4
- 14126: CGDCONT.PDPc.set(1:IP,com4): AT+CGDCONT=1,“IP”,“com4” { OK }ok!
- 14130: QIACT.PDPc ena: AT+QIACT=1 { OK }T=2ms ok!
- 14132: QIACT.PDPc check: AT+QIACT? { +QIACT: 1,1,1,“100.65.57.120” OK }done!
- 14137: QLTS:NetLocTime: AT+QLTS=2 { +QLTS: “2025/03/25,15:22:39+04,0” OK }SetCPU.RTC:E(0) ok!
SOCKET setup: Tid=1 Sid=1 Sty=TCP IPa=57.129.56.131 Rp=9999 Lp=0 Sm=2
- 14144: QIOPEN.SOCKET.open(TCP:57.129.56.131:9999): AT+QIOPEN=1,1,“TCP”,“57.129.56.131”,9999,0,2 { CONNECT }T=712ms ok!
- 14862: Build DATA(1): 44 bytes
- 14862: SEND(0)=44: … ok
- 14862: BackCMDmode: +++{Messaggio ricevuto! OK }ok!
- 16764: QISEND.ACK data: AT+QISEND=1,0 { +QISEND: 32,32,0 OK } Sent(32)=32,32,0 T=5ms ok!
- 16769: QIRD:Read data: AT+QIRD=1,490 { +QIRD: 0 OK }#ERR(20)=EMPTY
- 17272: QISEND.ACK data: AT+QISEND=1,0 { +QISEND: 32,32,0 OK } Sent(0)=32,32,0 T=4ms ok!
- 17276: QIRD:Read data: AT+QIRD=1,490 { +QIRD: 0 OK }#ERR(20)=EMPTY
- 17280: CheckSOCKET: AT+QISTATE=1,1 { +QISTATE: 1,“TCP”,“57.129.56.131”,9999,29819,2,1,1,0,“uart1” OK }ok!
- 17788: QISEND.ACK data: AT+QISEND=1,0 { +QISEND: 32,32,0 OK } Sent(0)=32,32,0 T=4ms ok!
- 17792: QIRD:Read data: AT+QIRD=1,490 { +QIRD: 0 OK }#ERR(20)=EMPTY
- 17796: CheckSOCKET: AT+QISTATE=1,1 { +QISTATE: 1,“TCP”,“57.129.56.131”,9999,29819,2,1,1,0,“uart1” OK }ok!
- 18304: QISEND.ACK data: AT+QISEND=1,0 { +QISEND: 32,32,0 OK } Sent(0)=32,32,0 T=4ms ok!
- 18308: QIRD:Read data: AT+QIRD=1,490 { +QIRD: 0 OK }#ERR(20)=EMPTY
- 18312: CheckSOCKET: AT+QISTATE=1,1 { +QISTATE: 1,“TCP”,“57.129.56.131”,9999,29819,2,1,1,0,“uart1” OK }ok!
- 18820: QISEND.ACK data: AT+QISEND=1,0 { +QISEND: 32,32,0 OK } Sent(0)=32,32,0 T=4ms ok!
- 18824: QIRD:Read data: AT+QIRD=1,490 { +QIRD: 0 OK }#ERR(20)=EMPTY
- 18828: CheckSOCKET: AT+QISTATE=1,1 { +QISTATE: 1,“TCP”,“57.129.56.131”,9999,29819,2,1,1,0,“uart1” OK }ok!
- 19336: QISEND.ACK data: AT+QISEND=1,0 { +QISEND: 32,32,0 OK } Sent(0)=32,32,0 T=4ms ok!
- 19340: QIRD:Read data: AT+QIRD=1,490 { +QIRD: 0 OK }#ERR(20)=EMPTY
- 19344: CheckSOCKET: AT+QISTATE=1,1 { +QISTATE: 1,“TCP”,“57.129.56.131”,9999,29819,2,1,1,0,“uart1” OK }ok!
- 19852: QISEND.ACK data: AT+QISEND=1,0 { +QISEND: 32,32,0 OK } Sent(0)=32,32,0 T=4ms ok!
- 19856: QIRD:Read data: AT+QIRD=1,490 { +QIRD: 0 OK }#ERR(20)=EMPTY
- 19860: CheckSOCKET: AT+QISTATE=1,1 { +QISTATE: 1,“TCP”,“57.129.56.131”,9999,29819,2,1,1,0,“uart1” OK }ok!
- 19868: QICLOSE.SOCKET close: AT+QICLOSE=1 { OK }T=1861ms ok!
- 21729: QIDEACT.PDP/TCP close: AT+QIDEACT=1 { OK }T=3ms ok!
- 21732: QPOWD.PowerDown(0): AT+QPOWD=0 { OK }{ POWERED DOWN }T=303ms ok!
23035: END Sequence 3 (697/552) ST=0 Vm=19 ok!
- 23035: Modem OFF: ok!
Test Time 23.0 = 0m:23s
Only in a single occasion the server received all the 128 bytes sent, but the modem acknowledged only 95 bytes.
MODEM.Test: ShowRX=ON Mcheck=26 MDM(7)=ok SIM(0)=TEST
- RTC=25/03/25,12:46:27 @300210
- 1: Modem ON: ST=0,Vm=1795 T=989 ok!
- 2501: AT.CheckModem: AT { RDY }ST=1,Vm=1794 ok
- 3017: EchoOFF(ATE0): ATE0 {ATE0 OK }ok!
- 3019: AT.clean: ok!
- 5019: CCLK:GetRTC: AT+CCLK? { +CCLK: “80/01/06,00:00:04+04” OK }WRONG!
- 5024: RTC.Get: 25/03/25 12:46:32 ok!
- 5024: CCLK:setRTC(25/03/25,12:46:32+04): AT+CCLK=“25/03/25,12:46:32+04” { OK }ok!
- 5028: CPIN.CheckSIM: AT+CPIN? { +CPIN: READY OK }READY:0s ok!
- 5032: QCCID:get SIM(ICCID): AT+QCCID { +QCCID: 89883040000019464796 OK }ok!
APN(2=Com4)=com4
- 5037: CIMI:get SIM(IMSI): AT+CIMI { 206018130936479 OK }ok!
- 5041: CEREG.PckSw service: AT+CEREG? { +CEREG: 0,2 OK }T=3ms N=0 St=2=SEARCH Wait!
- 9544: CEREG:Check: AT+CEREG? { APP RDY +CEREG: 0,2 OK }T=4506ms N=0 St=2=SEARCH Wait!
- 14047: CEREG:Check: AT+CEREG? { +CEREG: 0,5 OK }T=9009ms N=0 St=5=ROAMING ok!
- 14050: CSQ:SignalQuality: AT+CSQ { +CSQ: 25,99 OK }RxSSI=25=-63dBm BEr=99=0.00% ok!
- 14054: COPS:OperatorActive: AT+COPS? { +COPS: 0,0,“vodafone IT”,9 OK }T=5ms AT+COPS=3,2 { OK }ok!
- 14061: QENG:ServingCell: AT+QENG=“servingcell” { +QENG: “servingcell”,“CONNECT”,“NBIoT”,“FDD”,222,10,B07570,239,6354,20,0,0,69D5,-75,-10,-64,20, OK }
ST=4=CALL RAT=9=NBIoT MCC.MCN=222.10 cID=B07570 PCI=239 TAC=69D5 UDbw=0,0 RSRP=-75dBm RSRQ=-10dB RSSI=-64dBm SINR=20=-16.0dB SRlev=0dB ok!
TCPIPc setup: ID=1,Type=IPv4,APN=com4 (USR=RMC_BG95M2_16382,PWD=) Auth=NONE - 14074: QICSGP.TCPIPc.set(IPv4,com4,RMC_BG95M2_16382): AT+QICSGP=1,1,“com4” { OK }ok!
PDPc setup: CID=1,Type=IP,APN=com4,Addr=,Dc=0,Hc=0,IPa=0
- 14078: CGDCONT.PDPc.set(1:IP,com4): AT+CGDCONT=1,“IP”,“com4” { OK }ok!
- 14082: QIACT.PDPc ena: AT+QIACT=1 { OK }T=2ms ok!
- 14084: QIACT.PDPc check: AT+QIACT? { +QIACT: 1,1,1,“100.65.232.47” OK }done!
- 14089: QLTS:NetLocTime: AT+QLTS=2 { +QLTS: “2025/03/25,12:46:42+04,0” OK }SetCPU.RTC:E(0) ok!
SOCKET setup: Tid=1 Sid=0 Sty=TCP IPa=57.129.56.131 Rp=9999 Lp=0 Sm=0
- 14096: QIOPEN.SOCKET.open(TCP:57.129.56.131:9999): AT+QIOPEN=1,0,“TCP”,“57.129.56.131”,9999,0,2 { CONNECT }T=753ms ok!
- 14855: Build DATA(1): 128 bytes
- 14855: SEND(0)=128: … ok
- 14855: BackCMDmode: +++{Messaggio ricevuto! OK }ok!
- 16758: QISEND.ACK data: AT+QISEND=0,0 { +QISEND: 95,95,0 OK } Sent=95,95,0 T=4ms ok!
- 16762: QIRD:Read data: AT+QIRD=0,490 { +QIRD: 0 OK }#ERR(20)=EMPTY
- 17266: QIRD:Read data: AT+QIRD=0,490 { +QIRD: 0 OK }#ERR(20)=EMPTY
- 17269: CheckSOCKET: AT+QISTATE=1,0 { +QISTATE: 0,“TCP”,“57.129.56.131”,9999,28619,2,1,0,0,“uart1” OK }ok!
- 17778: QIRD:Read data: AT+QIRD=0,490 { +QIRD: 0 OK }#ERR(20)=EMPTY
- 17781: CheckSOCKET: AT+QISTATE=1,0 { +QISTATE: 0,“TCP”,“57.129.56.131”,9999,28619,2,1,0,0,“uart1” OK }ok!
- 18290: QIRD:Read data: AT+QIRD=0,490 { +QIRD: 0 OK }#ERR(20)=EMPTY
- 18294: CheckSOCKET: AT+QISTATE=1,0 { +QISTATE: 0,“TCP”,“57.129.56.131”,9999,28619,2,1,0,0,“uart1” OK }ok!
- 18802: QIRD:Read data: AT+QIRD=0,490 { +QIRD: 0 OK }#ERR(20)=EMPTY
- 18805: CheckSOCKET: AT+QISTATE=1,0 { +QISTATE: 0,“TCP”,“57.129.56.131”,9999,28619,2,1,0,0,“uart1” OK }ok!
- 19314: QIRD:Read data: AT+QIRD=0,490 { +QIRD: 0 OK }#ERR(20)=EMPTY
- 19317: CheckSOCKET: AT+QISTATE=1,0 { +QISTATE: 0,“TCP”,“57.129.56.131”,9999,28619,2,1,0,0,“uart1” OK }ok!
- 19826: QIRD:Read data: AT+QIRD=0,490 { +QIRD: 0 OK }#ERR(20)=EMPTY
- 19829: CheckSOCKET: AT+QISTATE=1,0 { +QISTATE: 0,“TCP”,“57.129.56.131”,9999,28619,2,1,0,0,“uart1” OK }ok!
- 19838: QICLOSE.SOCKET close: AT+QICLOSE=0 { OK }T=2035ms ok!
- 21873: QIDEACT.PDP/TCP close: AT+QIDEACT=1 { OK }T=3ms ok!
- 21876: QPOWD.PowerDown(0): AT+QPOWD=0 { OK }{ POWERED DOWN }T=304ms ok!
23180: END Sequence 1 (684/552) ST=1 Vm=1795 ok!
- 23180: Modem OFF: ok!
Test Time 23.2 = 0m:23s
- RTC=25/03/25,12:46:51 @323400
NextTX(0=OK)=15/5=3q
From last investigations, it seems the modem does not send the ZEROs (0x00) bytes present in the transparent message.
Is there any way to force it to send also ZERO values ?
This is what modem send:
-
“SEND(0)=20” = n.bytes sent
-
[…] = sequence of bytes sent to the modem
-
…
-
9562: QLTS:NetLocTime: AT+QLTS=2 { +QLTS: “2025/03/26,09:32:42+04,0” OK }SetCPU.RTC:E(0) ok!
-
9568: QIOPEN.SOCKET.open(TCP:57.129.56.131:9999): AT+QIOPEN=1,1,“TCP”,“57.129.56.131”,9999,0,2 { CONNECT }T=1334ms ok!
-
10909: Build DATA(1): 20 bytes
-
10909: SEND(0)=20: [254,63,187,166,93,2,68,1,144,87,91,2,210,0,210,0,204,0,210,0,] ok
-
10910: BackCMDmode: +++{Messaggio ricevuto! OK }ok!
-
12812: QISEND.ACK data: AT+QISEND=1,0 { +QISEND: 16,16,0 OK } Sent(16)=16,16,0 T=4ms ok!
-
…
This is what server receives:
-
“size”: 16 = n.bytes received
-
[…] = sequence of bytes receiver from server
{
“data”: {
“buffer”: [254, 63, 187, 166, 93, 2, 68, 1, 144, 87, 91, 2, 210, 210, 204, 210],
“device”: 16382,
“vettori”: [
{
“avg”: 0,
“max”: 53964,
“min”: 53970,
“instant”: 0,
“timestamp”: 39540624
}
],
“parametro”: “D”,
“timestamp”: 39691963,
“numero_vettori”: 1
},
“size”: 16,
“created_at”: “2025-03-26T08:32:45.745426+00:00”
},
Hi Angelo,
- Have you ever try AT+QISEND
- Maybe means the server close the connect
- The server close the connect but the client had not close, so it is still open
Answer to Mickey:
- Yes, I’m using AT+QISEND to transmit TEXT messages with no problem, but it does not work with BINARY data, the modem will lock!
- I know, please see my 3th post!
- OK, as previous one.
Please Mickey, would you check at my last requests (4th/5th post): why the modem does not send ZEROs character ?