Hi all,
My team and I have been using Particle Borons for a few years in order to communicate to the cloud in remote areas. Usually the signal strength and signal quality values are a good indicator of whether the boron is able to connect and publish to the cloud easily. Recently however, we’ve had two borons that have good signal but a lot of trouble connecting.
Our borons use the SARA-R410M-02B-01 modem with AT&T operator profile (LTE Cat M1). They try to connect once every 20 or 30 minutes. The connection process looks like this:
Cellular.on();
waitFor(Cellular.isOn, 10000);
Cellular.connect();
waitFor(Cellular.ready, 90000);
Particle.connect();
waitFor(Particle.connected, 180000);
For each connection attempt, I store information such as whether it was successful, how long the process took, what frequency band was used, which cellular tower it connected to, etc. (sample code below).
Here are some puzzling results (a blank column indicates failure, the number of seconds corresponds to how long it took to be successful):
'Bad' Results
Time | Cellular | Particle | Signal | EARFCN
| connect | connect | strength |
| | | quality |
2022-05-06T08:42:21 | | | | 5035 (band=12, freq=700)
2022-05-06T08:22:21 | 41 seconds | | |
2022-05-06T08:02:21 | | | | 1125 (band=2, freq=1900)
2022-05-06T07:42:21 | | | |
2022-05-06T07:22:21 | | | |
2022-05-06T07:02:21 | | | |
2022-05-06T06:42:21 | | | |
2022-05-06T06:22:21 | | | |
2022-05-06T06:02:21 | | | |
2022-05-06T05:42:21 | | | |
2022-05-06T05:22:21 | | | | 1125 (band=2, freq=1900)
2022-05-06T05:02:21 | | | |
2022-05-06T04:42:21 | 89 seconds | | |
2022-05-06T04:22:21 | | | |
2022-05-06T04:02:21 | 26 seconds | 5 seconds | -103 / -12 | 1125 (band=2, freq=1900)
2022-05-06T03:42:21 | | | |
2022-05-06T03:22:21 | | | |
2022-05-06T03:02:21 | 62 seconds | 5 seconds | -101 / -11 | 1125 (band=2, freq=1900)
2022-05-06T02:42:20 | | | |
2022-05-06T02:22:20 | 62 seconds | 5 seconds | -103 / -14 | 1125 (band=2, freq=1900)
As you can see, the signal is rather good, however the device has not been able to connect for almost 5 hours! Is there anything we can do to improve the connection process?
For comparison, normally, and even with worse signal numbers (about strength: -111 / quality: -13), the results would look like this:
'Normal' Results
Time | Cellular | Particle | Signal | EARFCN
| connect | connect | strength |
| | | quality |
2022-05-06T15:41:13 | 10 seconds | 4 seconds | -92 / -11 | 5110 (band=12, freq=700)
2022-05-06T15:11:13 | 10 seconds | 6 seconds | -93 / -12 | 5110 (band=12, freq=700)
2022-05-06T14:41:12 | 10 seconds | 5 seconds | -94 / -12 | 5110 (band=12, freq=700)
2022-05-06T14:11:12 | 10 seconds | 5 seconds | -94 / -11 | 5110 (band=12, freq=700)
2022-05-06T13:41:11 | 10 seconds | 4 seconds | -96 / -11 | 5110 (band=12, freq=700)
2022-05-06T13:11:10 | 10 seconds | 5 seconds | -96 / -12 | 5110 (band=12, freq=700)
2022-05-06T12:41:10 | 10 seconds | 8 seconds | -97 / -14 | 5110 (band=12, freq=700)
2022-05-06T12:11:09 | 10 seconds | 4 seconds | -97 / -13 | 5110 (band=12, freq=700)
2022-05-06T11:41:09 | 9 seconds | 5 seconds | -97 / -12 | 5110 (band=12, freq=700)
2022-05-06T11:11:09 | 29 seconds | 5 seconds | -97 / -13 | 5110 (band=12, freq=700)
2022-05-06T10:41:08 | 9 seconds | 4 seconds | -97 / -11 | 5110 (band=12, freq=700)
2022-05-06T10:11:07 | 9 seconds | 4 seconds | -97 / -12 | 5110 (band=12, freq=700)
2022-05-06T09:41:06 | 10 seconds | 5 seconds | -96 / -12 | 5110 (band=12, freq=700)
2022-05-06T09:11:06 | 10 seconds | 4 seconds | -96 / -11 | 5110 (band=12, freq=700)
2022-05-06T08:41:06 | 9 seconds | 4 seconds | -96 / -11 | 5110 (band=12, freq=700)
2022-05-06T08:11:05 | 10 seconds | 5 seconds | -96 / -11 | 5110 (band=12, freq=700)
2022-05-06T07:41:05 | 9 seconds | 4 seconds | -96 / -11 | 5110 (band=12, freq=700)
2022-05-06T07:11:05 | 9 seconds | 4 seconds | -96 / -12 | 5110 (band=12, freq=700)
This one is especially good but the point is they all eventually manage to connect once an hour at the very least.
We’re concerned it might have something to do with the modem not choosing the best frequency band, or some other similar reason, because the connection is perfect when it works. We’ve tried our luck with some AT commands, either with AT+UBANDMASK=… (to try each band one by one and compare), or AT+UCFSCAN=… (to scan for better bands). Both didn’t work, as the band mask seems to be ‘Locked’ according to the u-blox datasheet, and the scan didn’t respond either.
Has anyone managed to make these work for that modem and operator?
Furthermore, how come sometimes the cellular fails to connect (Cellular.ready() == false) but I can still retrieve the EARFCN?
Once Particle.connect() has finished or timed out, this is the code that I use to retrieve the cell id and EARFCN (thanks to @rickkas7):
Code
CellularGlobalIdentity cgi = {0};
cgi.size = sizeof(CellularGlobalIdentity);
cgi.version = CGI_VERSION_LATEST;
cellular_result_t result = cellular_global_identity(&cgi, NULL);
if (result == SYSTEM_ERROR_NONE) {
// Store cgi.cell_id,
// cgi.mobile_country_code,
// cgi.mobile_network_code,
// cgi.location_area_code
}
Using the CellularHelper library:
CellularHelperUCGEDResponse ucgedResp;
int result = ucgedResp.run();
int bandNum, freq;
String dummy;
if (result == RESP_OK) {
CellularHelper.getLTEBandInfo(ucgedResp.earfcn, bandNum, freq, dummy);
// Store ucgedResp.earfcn,
// bandNum,
// freq
}
Thanks in advance for the help!