Particle Electron flash --factory

After I programmed my Electron with a backup copy of user firmware via USB using this command: particle flash --factory name.bin the Electron comes online and promptly blinks red SOS 10 – assertion failure. After a bit, it reboots and does the whole thing again. How can I resolve this?

P.S: I don’t know if that help (particle serial inspect)

Particle Serial Inspect Result

Platform: 10 - Electron
Modules
Bootloader module #0 - version 1005, main location, 16384 bytes max size
Integrity: PASS
Address Range: PASS
Platform: PASS
Dependencies: PASS
System module #1 - version 2011, main location, 131072 bytes max size
Integrity: PASS
Address Range: PASS
Platform: PASS
Dependencies: PASS
System module #3 - version 2011
System module #2 - version 2011, main location, 131072 bytes max size
Integrity: PASS
Address Range: PASS
Platform: PASS
Dependencies: PASS
System module #1 - version 2011
Bootloader module #0 - version 1003
System module #3 - version 2011, main location, 131072 bytes max size
Integrity: PASS
Address Range: PASS
Platform: PASS
Dependencies: PASS
System module #2 - version 110
User module #1 - version 6, main location, 131072 bytes max size
UUID: AA01A67D78AD6DD6E64EB1AB2A93E7194396649751E53497A6BCBAE67309ADDF
Integrity: PASS
Address Range: PASS
Platform: PASS
Dependencies: PASS
System module #2 - version 2011
User module #1 - version 6, factory location, 131072 bytes max size
UUID: AA01A67D78AD6DD6E64EB1AB2A93E7194396649751E53497A6BCBAE67309ADDF
Integrity: PASS
Address Range: PASS
Platform: PASS
Dependencies: PASS
System module #2 - version 2011

What does the device do when you flash Tinker?
If it behaves as expected, it’s probably your application firmware that causes the assertion failure, but without seeing your code we cannot assist beyond this :wink:

This is the blinking cycle.
https://streamable.com/2lqte9

I forgot to mention that I use 3rd party SIM.
Even with tiinker the same think is happening. I dont think is code problem (because whatever code I use the same think is happening) I think that the problem is with factory flash as you mentioned in a past community chat.
https://community.particle.io/t/particle-flash-factory/45054/7?u=ppprc

Anw this was the code I flashed for factory and for user firmware:

Code
// This #include statement was automatically added by the Particle IDE.
//STARTUP(cellular_credentials_set("cytamobile", "", "", NULL));
STARTUP(cellular_credentials_set("cytamobile", "", "", NULL));
#include <OneWire.h>
#include<DS18.h>
ApplicationWatchdog *wd;
//chip select pin on the chipKIT uC32 (board dependent)
#define CS_PIN A2

//percent correction for sensitivity error (e.g. 100 = 100%)
//**user can use reference current to calibrate this value precisely
#define SENSITIVITY_CORRECTION 100 

//enable/disable digital filter                                    
#define FILTER_FLAG 1  

//number of samples for filter
//**lower amount of filter readings for a faster reading
#define NUM_READINGS 5000       

signed int get_mA(void);
float get_A(void);


int irr_sensor(A0);
int i_val = 0;
int v_val = 0;

int volt_sensor(A1);

DS18 temp_sensor(B5);

void watchdogHandler() {
  // Do as little as possible in this function, preferably just
  // calling System.reset().
  // Do not attempt to Particle.publish(), use Cellular.command()
  // or similar functions. You can save data to a retained variable
  // here safetly so you know the watchdog triggered when you 
  // restart.
  // In 2.0.0 and later, RESET_NO_WAIT prevents notifying the cloud of a pending reset
  System.reset();
}

void setup() {
  Serial.begin(9600);
  
  SPI.begin();
  
  pinMode(CS_PIN, OUTPUT);
  Particle.keepAlive(1.5*60);
  wd = new ApplicationWatchdog(6*60*1000, watchdogHandler, 1536);
  // Set up 'power' pins, comment out if not used!
  //pinMode(D3, OUTPUT);
  //pinMode(D5, OUTPUT);
  //digitalWrite(D3, LOW);
  //digitalWrite(D5, HIGH);
}

void loop() {
  // Read the next available 1-Wire temperature sensor
  int temp = -990;
  if (temp_sensor.read()) {
    // Do something cool with the temperature
    temp = int(temp_sensor.celsius());
    Serial.printf("Temperature: %i C \n", int(temp_sensor.celsius()));
    //Particle.publish("temperature", String(int(temp_sensor.celsius())), PRIVATE);
    temp_sensor.read();
  }
  else{
    Serial.printf("ERROR!!!\n");
    Particle.publish("err", "ERROR!!!!", PRIVATE);
  }
  i_val = analogRead(irr_sensor);
  Serial.printf("Irradiance: %i \n",i_val);
  //Particle.publish("irr", String(i_val), PRIVATE);
  
 
  v_val = analogRead(volt_sensor);
  Serial.printf("Volts: %i \n",v_val);
  //Particle.publish("volt", String(v_val), PRIVATE);
  
  signed int ma = 0;
  float a = 0.0;
  
  ma = get_mA();
  Serial.print(ma);               //prints mA value over serial monitor
  Serial.print(" mA   |  ");
  //Particle.publish("c_mA", String(ma), PRIVATE);
  
  a = get_A();
  Serial.print(a);                //prints amp value over serial monitor
  Serial.println(" A");
  //delay(1000);
  //Particle.publish("c_A", String(a), PRIVATE);
  Serial.println(" A");
  
  float batterySoc = System.batteryCharge();
  
  char c_tago[200];
  sprintf(c_tago, "{\"temperature\":%i ,\"irr\":%i ,\"volt\":%i ,\"c_mA\":%i ,\"c_A\":%.3f, \"batt\":%.1f}", temp ,i_val ,v_val ,ma ,a, batterySoc);
  String tago = c_tago;
  Particle.publish("Thesis",tago,PRIVATE);
  Serial.printf("size: %i\n",sizeof(tago));
  Serial.printf("  len: %i\n", strlen(tago));
  Serial.printf("  len: %i\n", tago.length());
  Serial.printf(tago);
  
  i_val = 0;
  v_val = 0;
  
  if(FILTER_FLAG == 0){
    delay(50);
  }

  Serial.println();
  delay(5*60*1000);
}


/************************************************************************/
/*  signed int get_mA(void)    						*/
/*                                                                      */
/*      Return Value:                                                   */ 
/*              float                                                   */
/*                                                                      */
/*      Description:                                                    */
/*              This function returns the value of current flow in      */
/*              milliamperes (milliamps).                               */
/*                                                                      */
/************************************************************************/
signed int get_mA(void)
{
  Serial.print(" mAAAAAAAA   |  ");
  int result1;                 //first byte from ADC
  int result2;                 //second byte from ADC
  signed int temp_value;                  
  signed int total = 0;        //running total of filter values
  signed int milli_amps;       //converted value into milli amperes  
  
  if(FILTER_FLAG == 1){
    for(int i = 0; i < NUM_READINGS; i++){
      digitalWrite(CS_PIN, LOW);      //begin SPI transfer
      result1 = SPI.transfer(0x00);   //transfer first byte in
      result2 = SPI.transfer(0x00);   //transfer second byte in
      digitalWrite(CS_PIN, HIGH);     //end transfer
    
      temp_value = (SENSITIVITY_CORRECTION / 100) * (10000  * (((result1<<8) | result2) - 2048)) / 819;  //appends the two bytes and converts their value into milliamperes
      total = total + temp_value;
    }
    milli_amps = total / NUM_READINGS; 
  }
  
  else{
    digitalWrite(CS_PIN, LOW);      //begin SPI transfer
    result1 = SPI.transfer(0x00);  //transfer first byte in
    result2 = SPI.transfer(0x00);  //transfer second byte in
    digitalWrite(CS_PIN, HIGH);     //end transfer
    
    milli_amps = (SENSITIVITY_CORRECTION / 100) * (10000  * (((result1<<8) | result2) - 2048)) / 819;  //appends the two bytes and converts their value into milliamperes
  }
  return milli_amps;
}

/************************************************************************/
/*  float get_A(void)    						*/
/*                                                                      */
/*      Return Value:                                                   */ 
/*              float                                                   */
/*                                                                      */
/*      Description:                                                    */
/*              This function returns the value of current flow in      */
/*              amperes (amps).                                         */
/*                                                                      */
/************************************************************************/
float get_A(void)
{
  Serial.print(" AAAAAAAA  |  ");
  int result1;           //first byte from ADC
  int result2;           //second byte from ADC
  float temp_value;      
  float total = 0;       //running total of filter values
  float amps;            //converted value into amperes
  
  if(FILTER_FLAG == 1){
    for(int i = 0; i < NUM_READINGS; i++){
      digitalWrite(CS_PIN, LOW);      //begin SPI transfer
      result1 = SPI.transfer(0x00);   //transfer first byte in
      result2 = SPI.transfer(0x00);   //transfer second byte in
      digitalWrite(CS_PIN, HIGH);     //end transfer
    
      temp_value = (SENSITIVITY_CORRECTION / 100) * (10.0 * (((result1<<8) | result2) - 2048.0) / 819.0);  //appends the two bytes and converts their value into amperes
      total += temp_value;
    }
    amps = total / NUM_READINGS; 
  }
  
  else{
    digitalWrite(CS_PIN, LOW);      //begin SPI transfer
    result1 = SPI.transfer(0x00);  //transfer first byte in
    result2 = SPI.transfer(0x00);  //transfer second byte in
    digitalWrite(CS_PIN, HIGH);     //end transfer
    
    amps = (SENSITIVITY_CORRECTION / 100) * (10.0 * (((result1<<8) | result2) - 2048.0) / 819.0);  //appends the two bytes and converts their value into amperes
  } 
  return amps;
}

This topic was automatically closed 182 days after the last reply. New replies are no longer allowed.