AVOID factory reset - What to do with unexpected LED behavior on a Photon

Glad to hear it’s working. Please create a ticket about not being able to claim with our support team. Thanks!

This thread mentions putting the core in “safe mode” and points to this page as a reference:

http://docs.particle.io/photon/modes/#selecting-various-modes-safe-mode

However I cannot find any reference to “safe mode” on that page.

Jim

Double check you have “Photon” selected in the top right, then you’ll find it under “Standard Modes”.

1 Like

Thank you so much. I didn’t even see that selector in the upper right. It was missing because I had Core selected.
Thanks again.
Jim

So I’ve got one of my photon’s in a state that took a while to recover from… and yes I factory reset but after upgrading to 0.4.3 firmware


I had flashed it to 0.4.3 and everything was working great…
Then a stupid peace of code put it into such a tight loop that I could not get it to flash… while (1);
So, not knowing of safe mode, I factory reset it.

Now when I power it up it immediately flashes fast yellow
The reset button does nothing on it’s own, but when you press it both it flash cyan a couple times and always goes back to blinking yellow no matter how fast I release.

“particle list” doesn’t show the device
dfu-util -l does show the device

Found DFU: [2b04:d006] ver=0200, devnum=60, cfg=1, intf=0, alt=1, name="@DCT Flash /0x00000000/01016Kg", serial=“00000000010C”*
Found DFU: [2b04:d006] ver=0200, devnum=60, cfg=1, intf=0, alt=0, name="@Internal Flash /0x08000000/03016Ka,01016Kg,01064Kg,07128Kg", serial=“00000000010C”**

after flashing with 0.4.4 using DFU-UTIL got back to the blinking blue,
reclaimed it

and things seem fine now

Hopefully this might help others

2 Likes

I hope you were able to get yours fixed. I received my new Internet Button (photon) about a week ago and was getting a solid green. I did the factory reset and then was getting a solid white. I got it into DFU-mode and I got the exact error you did, and I couldn’t seem to get past it. I then left it on the shelf for a week.

This morning, I powered it up, put it in DFU-mode and updated the firmware, got the same error, but then was able to flash it with the particle CLI… It is working fine now!

I would suggest DFU-mode, then update firmware, then try
particle list

If it sees your device, regardless of online/offline status, copy the name and do
particle flash your-device-name tinker

You can also try safe mode and firmware reset… This picture was super useful to me in explaining how to get to the different modes.
https://docs.particle.io/assets/images/photon-reset-modes.png

hey @ladysarakat @tachijuan we’re making some changes to this system of modes since Factory Reset and Firmware Reset has had some issues (more info in the next firmware release). I’m generally recommending Safe Mode over everything else for now, it’s also easiest to get to since it’s the first one that comes up when you hold SETUP and tap RESET.

Hi Ashton, I am having the same mistake…a never ending loop with these flashes. ¿could you tell me how did you fix it?. I’ve being trying for 5 days now…Thanx

I can’t get this to work, I have downloaded version 0.4.9 of teh firmware but when I try to compile it from CLI I get:
particle compile photon C:\Users\Per\Documents\Particle\firmware-0.4.9

Compiling code for photon

Including:
attempting to compile firmware
Compile failed. Exiting.
build.mk:37: *** "No sources found in ". Stop.
make: *** [user] Error 2

What am I doing wrong?

If you’ve got a .bin file, it’s already compiled. Simply do particle flash --usb [nameOfFile].bin then. Alternatively, for updating you can do particle update, which should work if you’ve got the latest CLI version.

I don’t see any .bin file in the package I have downloaded.

When I try to run the particle update command I get:

Your environment has been set up for using Node.js 5.6.0 (x64) and npm.

C:\Users\Per>particle update
!!! There was an error trying execute DFU utilities.

!!! For help with installing DFU Utilities, please see:
 https://docs.particle.io/guide/tools-and-features/cli/#advanced-install

!!! You may also find our community forums helpful:
 https://community.particle.io/

Error code: 1

I have looked at the installation guide for Windows, which is really confusing and did not find any clues as to what is going wrong. Any suggestions?

If you haven’t got a .bin file, then it might certainly help if you could tell us what you do have and what it is you’re trying to achieve.
Going back through the post you’ve responded to, it seems as though a system update was required, for which precompiled .bin files have been made available. You can find those here: Releases · particle-iot/device-os · GitHub

How about this?

I believe this is what you’real looking for:

That said, since you’real on Windows anyhow, you might take the easy way as well:

Use that tool, and select which parts of the Toolchain you’d like to install. Since you’ round got Node and the CLI installed already, you should suffice with DFU-UTIL only.

Let me know if that worked :slight_smile:

1 Like

Thank you for response.

I tried to install the full Toolchain package but that failed with an Error 404 while downloading, as I have reported elsewhere. But installing just the DFU-UTIL actually works and now the error about not being able to execute DFU Utilities is gone.

So I tried to put my Particle in DFU mode and run particle update but that results in:

C:\Users\Per>particle update

!!! I was unable to detect any devices in DFU mode...

> Your device will blink yellow when in DFU mode.
> If your device is not blinking yellow, please:

1) Press and hold both the RESET/RST and MODE/SETUP buttons simultaneously.

2) Release only the RESET/RST button while continuing to hold the MODE/SETUP button.

3) Release the MODE/SETUP button once the device begins to blink yellow.

But my Particle is connected to USB with a USB cable that I have used before for the serial communication and the particle is happily blinking yellow. Any idears?

As you are using Windows you need the proper drivers for DFU Mode

  • Download [zadig][1]
  • Put your Photon in DFU Mode
  • Start zadig and click “Options - List All Devices
  • Select your Photon in the drop-down-list
  • Install libusbK

Then try again
[1]: http://zadig.akeo.ie/

That works, I am now able to update my Photon but unfortunately it just brings me back to where I started: Solid white 1 second, 3 rapid green blink, 3 magenta and then a bunch of red blinks and then it repeats forever.

Try DFU mode with particle flash --usb tinker?

It works! My particle is now breathing magenta again.

BUT when I try to flash my own code it goes bananas again. Is it my code that screws up my Photon?

Cyan I hope?

If it works without your code, and it doesn’t with your code, then I’d suggest looking there for the cause :wink:

We could take a look if you want to share the code?

Ok if you promis not to laugh?

To be honest I don’t remember what the last code I entered was, it has been too long and too many frustrations since I last edited the code.

int day = 0;
int Time1[4];
int Time2[4];
int Time3[4];
int Time4[4];
int Time5[4];
int Time6[4];
int Time7[4];
int startHour = 0;
int startMinute = 0;
int stopHour = 0;
int stopMinute = 0;
retained int mode = 0;
int oldMode;
char publishMode[2];
char publishTime1[4];
char publishTime2[4];
char publishTime3[4];
char publishTime4[4];
char publishTime5[4];
char publishTime6[4];
char publishTime7[4];
String str;
//String str2;
int publishModeInteger;
int manualTime = 0;
int timeLastPublish;
int publishDelay = 15;
bool timeTime = false;
bool block1 = true;

void setup() {
    Serial.begin(9600);
    
    Particle.function("parseTime",parseTime);
    Particle.function("mode",modeToggle); 
    Particle.function("manualTime",parseManualTime);
}

void loop() {
    str = String(mode);
    
    if (Time.now() > timeLastPublish + publishDelay &&  block1) {
        sprintf(publishTime1,"1~%i~%i~%i~%i",Time1[0],Time1[1],Time1[2],Time1[3]);
        Serial.print("publishTime1: \"");
        Serial.print(publishTime1);
        Serial.println("\"");
        Particle.publish("publishTime1",publishTime1);
        sprintf(publishTime2,"2~%i~%i~%i~%i",Time2[0],Time2[1],Time2[2],Time2[3]);
        Particle.publish("publishTime2",publishTime2);
        sprintf(publishTime3,"3~%i~%i~%i~%i",Time3[0],Time3[1],Time3[2],Time3[3]);
        Particle.publish("publishTime3",publishTime3);
        sprintf(publishTime4,"4~%i~%i~%i~%i",Time4[0],Time4[1],Time4[2],Time4[3]);
        Particle.publish("publishTime4",publishTime4);
        block1 = false;
    }
    
    if (Time.now() > timeLastPublish + publishDelay + 7) {  
         Serial.print("publishTime 2");
        sprintf(publishTime5,"5~%i~%i~%i~%i",Time5[0],Time5[1],Time5[2],Time5[3]);
        Particle.publish("publishTime5",publishTime5);
        sprintf(publishTime6,"6~%i~%i~%i~%i",Time6[0],Time6[1],Time6[2],Time6[3]);
        Particle.publish("publishTime6",publishTime6);
        sprintf(publishTime7,"7~%i~%i~%i~%i",Time7[0],Time7[1],Time7[2],Time7[3]);
        Particle.publish("publishTime7",publishTime7);

        str.toCharArray(publishMode,2);
        Serial.print("publishMode: \"");
        Serial.print(publishMode);
        Serial.println("\"");
        oldMode = mode;
        Particle.publish("mode",publishMode);
        block1 = true;
        timeLastPublish = Time.now();
    }
    
    if (mode != oldMode) {
            str.toCharArray(publishMode,2);
            oldMode = mode;
            Particle.publish("mode",publishMode);
        }
    
}

int parseTime(String command){
    char charBuf[20];
    command.toCharArray(charBuf, 20);
    
    //Begin black magic supplied by @mdma at:
    // https://community.spark.io/t/gpio-control-via-gui/6310/7
    const int value_count = 8;  // the maximum number of values
    int values[value_count];    // store the values here
    
    char string[20];
    strcpy(string, charBuf);  // the string to split
    int idx = 0;
    for (char* pt=strtok(string, "~"); pt && idx<value_count; pt=strtok(NULL, "~")) {
       values[idx++] = atoi(pt);
    }
    //End black magic.
    
    day = values[0];
  
    if (day == 1) {
        for (int i = 1; i < 5; i++) {
            Time1[i-1] = values[i];
            Serial.println(Time1[i-1]);
        }
    } else if (day == 2) {
        for (int i = 1; i < 5; i++) {
            Time2[i-1] = values[i];
        }
    } else if (day == 3) {
        for (int i = 1; i < 5; i++) {
            Time3[i-1] = values[i];
        }
    } else if (day == 4) {
        for (int i = 1; i < 5; i++) {
            Time4[i-1] = values[i];
        }
    } else if (day == 5) {
        for (int i = 1; i < 5; i++) {
            Time5[i-1] = values[i];
        }
    } else if (day == 6) {
        for (int i = 1; i < 5; i++) {
            Time6[i-1] = values[i];
        }
    } else if (day == 7) {
        for (int i = 1; i < 5; i++) {
            Time7[i-1] = values[i];
        }
    } 
    timeTime = true;
    return 0;
}

int modeToggle(String command) {
      if (command=="on") {
        Serial.println("On");
        mode = 1;
        return 1;
    }
    else if (command=="off") {
        Serial.println("Off");
        mode = 0;
        return 0;
    }
    else if (command=="auto") {
        Serial.println("Auto");
        mode = 2;
        return 2;
    }
    else {
        return -1;
    }
}

int parseManualTime(String command) {
    Serial.println(command);
    manualTime = command.toInt(); 
    Serial.print("Manual time");
    Serial.print(manualTime);
    Serial.println();
    mode = 3;
    return 0;
}