Boron LTE blinking green forever

Hello,

In the field, we have a device that gives this response (as described on the particle website). Does it mean that it’s broken? We have tried particle update and particle flash --usb tinker but it still does not connect.

Modem not responding (blinking green or dark blue)

If the modem stops working entirely, then the log will look like this:

0000011825 [hal] ERROR: Failed to power off modem
starting tests...
turning cellular on...
0000036010 [hal] ERROR: No response from NCP
0000036011 [system.nm] INFO: State changed: DISABLED -> IFACE_DOWN
deviceID=e00fce687bd30b4135c361dc
manufacturer=
model=
firmware version=
ordering code=
IMEI=
IMSI=
ICCID=
0000117011 [app] INFO: enabling trace logging
attempting to connect to the cellular network...
0000117016 [system.nm] INFO: State changed: IFACE_DOWN -> IFACE_REQUEST_UP
0000117016 [system.nm] INFO: State changed: IFACE_DOWN -> IFACE_REQUEST_UP
0000117020 [hal] TRACE: PPP netif -> 8
0000117022 [net.ifapi] INFO: Netif pp3 state UP
0000117022 [net.ifapi] INFO: Netif pp3 state UP
0000117024 [hal] TRACE: Powering modem on
0000117026 [system.nm] INFO: State changed: IFACE_REQUEST_UP -> IFACE_UP
0000117026 [system.nm] INFO: State changed: IFACE_REQUEST_UP -> IFACE_UP
0000117176 [hal] TRACE: Modem powered on
0000117178 [hal] TRACE: Setting UART voltage translator state 1
0000118180 [ncp.at] TRACE: > AT
0000119181 [ncp.at] TRACE: > AT
0000120182 [ncp.at] TRACE: > AT
0000121183 [ncp.at] TRACE: > AT
0000122184 [ncp.at] TRACE: > AT
0000122395 [sys.power] TRACE: re-enabling charging
0000122428 [sys.power] TRACE: Battery state UNKNOWN -> CHARGED
0000123185 [ncp.at] TRACE: > AT
0000123587 [sys.power] TRACE: Battery state CHARGED -> DISCONNECTED
0000124186 [ncp.at] TRACE: > AT
0000125186 [ncp.at] TRACE: > AT
0000126187 [ncp.at] TRACE: > AT
0000127188 [ncp.at] TRACE: > AT
0000128189 [ncp.at] TRACE: > AT
0000129190 [ncp.at] TRACE: > AT
0000130191 [ncp.at] TRACE: > AT
0000131192 [ncp.at] TRACE: > AT
0000132193 [ncp.at] TRACE: > AT
0000133194 [ncp.at] TRACE: > AT
0000134195 [ncp.at] TRACE: > AT
0000135196 [ncp.at] TRACE: > AT
0000136197 [ncp.at] TRACE: > AT
0000137197 [ncp.at] TRACE: > AT
0000138198 [hal] ERROR: No response from NCP
0000138198 [hal] ERROR: No response from NCP
0000138201 [hal] TRACE: Setting UART voltage translator state 0
0000138203 [hal] TRACE: Hard resetting the modem
0000149205 [net.pppncp] TRACE: Failed to initialize ublox NCP client: -210
0000149207 [hal] TRACE: Setting UART voltage translator state 0
0000149210 [hal] TRACE: Modem already off
0000149312 [hal] TRACE: Powering modem on
0000149463 [hal] TRACE: Modem powered on
0000149465 [hal] TRACE: Setting UART voltage translator state 1
0000150467 [ncp.at] TRACE: > AT
0000151468 [ncp.at] TRACE: > AT
0000152469 [ncp.at] TRACE: > AT
0000153470 [ncp.at] TRACE: > AT
0000154471 [ncp.at] TRACE: > AT
0000155472 [ncp.at] TRACE: > AT
0000156473 [ncp.at] TRACE: > AT
0000157474 [ncp.at] TRACE: > AT
0000158475 [ncp.at] TRACE: > AT
0000159475 [ncp.at] TRACE: > AT

In particular, note that there is never a response to the > AT command, and the error ERROR: No response from NCP . Also, the modem-specific information like manufacturer, model, ICCID, etc. are all blank.

For Gen 3 devices (Boron, B Series SoM), the status LED will blink green.

Not necessarily. In order to distinguish that you’d need to acquire a log of your device.
More likely it’s an issue with the SIM not being activated (yet) or not accepted by any of your local providers.

You’d need to tell us where in the world this device is trying to get connected.
The LTE Boron is only meant for the North American market.

https://docs.particle.io/datasheets/boron/boron-datasheet/

With a 3rd party SIM that supports the above standard you may be able to connect, but your code needs to instruct the device to use the external SIM and also set the Particle.keepAlive() as your MVNO requires.

We have been using LTE Boron in the Netherlands for quite a year without any issues. But after updating from 1.5.2 to 2.0.1 problems have been appearing.

I can confirm that the SIM is activated. I can see it as activated in the Portal from my MVNO.

I can also confirm that this device has connected before without any issues. Also, we have 10 other devices running the same code without any issues (yet)

To connect we currently use the following code.

void setup() {

  #if PLATFORM_ID == PLATFORM_BORON
    CellularHelperStringResponse resp;
    Cellular.setActiveSim(EXTERNAL_SIM);
	  Cellular.setCredentials("eliot.internet");
    const uint8_t val = 0x01;
	  dct_write_app_data(&val, DCT_SETUP_DONE_OFFSET, 1);

    Cellular.on();
    Log.info("Sending 1st command");
    Cellular.command(CellularHelperClass::responseCallback, (void *)&resp, 8000, "AT+UMNOPROF=?\r\n");
    Log.info("Sending 2nd command");
    Cellular.command(CellularHelperClass::responseCallback, (void *)&resp, 8000, "AT+UMNOPROF=0\r\n");
    Log.info("Gonna connect");
    Cellular.connect();
    Log.info("After connect");

    if (Cellular.ready()) {
      Log.info("connected to the cellular network");
    } else if (Cellular.listening()) {
      Log.info("entered listening mode (blinking dark blue) - probably no SIM installed");
    } else {
      Log.info("other");
    }

    Log.info("Attempting Particle connect");
  #endif

  while(Particle.connected() == false) {
    Particle.connect();
    Particle.process();
  }
...

This would have been useful information for the opening post :wink:

If you are running this code in AUTOMATIC mode then your setup() will not be executed at the time the device will try to connect.
Could it be your current code is missing the required SYSTEM_MODE() or SYSTEM_THREAD(ENABLED)?

If you are using hardcoded credentials you’d usually put the credentials and ext-SIM activation into the STARTUP() section.

Also this is not the best way to do it

Once calling Particle.connecct() your code should keep the feet still for a while to let the connection process commence. Calling connect() while a previous call is still at work is often counter productive.
You may rather want to use waitUntil() and let the device OS do the waiting - or better waitFor() to give your code some control over the connection timeout.

The logs and manufacturing date of this device suggest that it was impacted by the issue described here: TAN001 - SARA-R410M "124-day" – Particle Support. Please see relevant mitigation information and warranty/replacement statement.

@ScruffR thanks for the tips!

I am running in manual mode. should I also enable SYTEM_THREAD?

I think you mean waitFor() right?
so something like waitFor(Particle.connect, APP_TIMEOUT) should do the job right?

@marekparticle this was an example on the cloud debugging page. But indeed this might also be the case. My debug from particle cloud debug software looks the same.

0000015494 [app] INFO: Platform: Boron
0000015494 [app] INFO: Binary compiled for: 2.0.1
0000015495 [app] INFO: Cloud Debug Release 2.0.3
0000015495 [app] INFO: System version: 2.0.1
0000015496 [app] INFO: Device ID: e00fce68b5d490b6f0bc8ad2
0000015496 [app] INFO: Power source: USB Host
0000015497 [app] INFO: Battery state: disconnected, SoC: -1.00
0000015497 [app] INFO: This device could have Ethernet (is 3rd generation)
0000015499 [app] INFO: FEATURE_ETHERNET_DETECTION not enabled, so Ethernet will not be used (even i
0000023508 [app] INFO: deviceID: e00fce68b5d490b6f0bc8ad2
0000023509 [app] INFO: PMIC inputVoltageLimit: 3880 mV
0000023510 [app] INFO: PMIC inputCurrentLimit: 500 mA
0000023511 [app] INFO: PMIC minimumSystemVoltage: 3500 mV
0000023512 [app] INFO: PMIC chargeCurrentValue: 896 mA
0000023513 [app] INFO: PMIC chargeVoltageValue: 4112 mV
0000023513 [app] INFO: modem is not yet responding
0000023517 [system.nm] INFO: State changed: DISABLED -> IFACE_DOWN
0000023518 [system.nm] INFO: State changed: IFACE_DOWN -> IFACE_REQUEST_UP
0000023519 [net.pppncp] TRACE: PPP netif event from queue: 1
0000023519 [net.pppncp] TRACE: NCP event 3
0000023520 [net.pppncp] TRACE: NCP power state changed: IF_POWER_STATE_POWERING_UP
0000023520 [system.nm] INFO: State changed: IFACE_REQUEST_UP -> IFACE_UP
0000023521 [system.nm] TRACE: Interface 4 power state changed: 4
0000023521 [ncp.client] TRACE: Powering modem on
0000023534 [app] INFO: Still trying to connect to cellular 00:00
0000023534 [app] INFO: Power source: USB Host
0000023535 [app] INFO: Battery state: disconnected, SoC: -1.00
0000023671 [net.pppncp] TRACE: NCP event 3
0000023671 [net.pppncp] TRACE: NCP power state changed: IF_POWER_STATE_UP
0000023672 [system.nm] TRACE: Interface 4 power state changed: 2
0000023672 [ncp.client] TRACE: Modem powered on
0000023672 [ncp.client] TRACE: Setting UART voltage translator state 1
0000023772 [ncp.client] TRACE: Setting UART voltage translator state 0
0000023872 [ncp.client] TRACE: Setting UART voltage translator state 1
0000024873 [ncp.at] TRACE: > AT
0000025874 [ncp.at] TRACE: > AT
0000026875 [ncp.at] TRACE: > AT
0000027876 [ncp.at] TRACE: > AT
0000028877 [ncp.at] TRACE: > AT
0000029878 [ncp.at] TRACE: > AT
0000030879 [ncp.at] TRACE: > AT
0000031880 [ncp.at] TRACE: > AT
0000032881 [ncp.at] TRACE: > AT
0000033882 [ncp.at] TRACE: > AT
0000034884 [ncp.at] TRACE: > AT
0000035885 [ncp.at] TRACE: > AT
0000036886 [ncp.at] TRACE: > AT
0000037887 [ncp.at] TRACE: > AT
0000038888 [ncp.at] TRACE: > AT
0000039888 [ncp.client] ERROR: No response from NCP
0000039888 [ncp.client] TRACE: Setting UART voltage translator state 0
0000039888 [ncp.client] TRACE: Hard resetting the modem
0000039889 [ncp.client] TRACE: Modem waiting up to 30s to power off with PWR_UC...
0000080890 [net.pppncp] TRACE: NCP event 3
0000080890 [net.pppncp] TRACE: NCP power state changed: IF_POWER_STATE_DOWN
0000080890 [system.nm] TRACE: Interface 4 power state changed: 1
0000080891 [ncp.client] TRACE: Deinit modem serial.
0000080892 [net.pppncp] ERROR: Failed to initialize cellular NCP client: -210
0000080892 [app] INFO: modem is not yet responding
0000080893 [app] INFO: Still trying to connect to cellular 00:57
0000080893 [app] INFO: Power source: USB Host
0000080893 [app] INFO: Battery state: disconnected, SoC: -1.00
0000080911 [app] INFO: modem is not yet responding
0000080992 [net.pppncp] TRACE: NCP event 3
0000080992 [net.pppncp] TRACE: NCP power state changed: IF_POWER_STATE_POWERING_UP
0000080992 [system.nm] TRACE: Interface 4 power state changed: 4
0000080993 [ncp.client] TRACE: Powering modem on
0000081143 [net.pppncp] TRACE: NCP event 3
0000081143 [net.pppncp] TRACE: NCP power state changed: IF_POWER_STATE_UP
0000081143 [system.nm] TRACE: Interface 4 power state changed: 2
0000081144 [ncp.client] TRACE: Modem powered on
0000081144 [ncp.client] TRACE: Setting UART voltage translator state 1
0000081244 [ncp.client] TRACE: Setting UART voltage translator state 0
0000081344 [ncp.client] TRACE: Setting UART voltage translator state 1
0000082345 [ncp.at] TRACE: > AT
0000083345 [ncp.at] TRACE: > AT
0000084345 [ncp.at] TRACE: > AT

:blush: of course - corrected above :blush:

SYSTEM_TREAD(ENABLED) is not required, but shouldn’t harm as long your code is aware of the fact that it might be running asynchronous/concurrently to the system task.