How to update the Photon Firmware?

How do I update my Photon’s firmware? I haven’t updated mine since I got it.

1 Like

You’ll find system firmware update instructions on the github releases page. :smile:


I have just got my Photons and wish to update the firmware OTA. I have dfu-util installed and working but I can work out where to put the bin files for dfu-util to find them. I tried both by USB and OTA but get the message it cant find the bin files.

Hope someone can help.

best regards,

Hi @casm,

Not sure what system you are on but you can give a very explicit path to the bin file in your dfu command

For example I have my bin files at c:\photon\system

so the dfu command to reflash system-part1-0.4.2-photon.bin and system-part2-0.4.2-photon.bin would be

dfu-util -d 0x2B04:0xD006 -a 0 -s 0x8020000 -D c:\photon\system\system-part1-0.4.2-photon.bin
dfu-util -d 0x2B04:0xD006 -a 0 -s 0x8060000:leave -D c:\photon\system\system-part2-0.4.2-photon.bin


You should be able to navigate to the folder where the files are, for example mine are in the spark folder on my c drive
cd "c:\spark\"
now run the command from there.

If you want to use dfu-util -> do you have dfu-util in your path?
go to -> control panel -> system -> advanced system settings -> environment variables. Select path and hit edit, now check that the folder where dfu-util is located is in the list of folders, if not add a ; and type in the folder ie. ;c:\dfu-util\
now dfu-util can be called from anywhere on your system not just from the folder where the dfu files are located.

after that you can navigate to the folder where you saved the files and run dfu-util from there.


If you want to do it OTA, and your Photon is online, you can use these commands:

particle flash YOUR_DEVICE_NAME  system-part1-0.4.3-photon.bin
particle flash YOUR_DEVICE_NAME  system-part2-0.4.3-photon.bin

That is, assuming you’re in the same directory as those files.
Something like this should work:

You could either give it the explicit path, or make sure your command line utility is in that directory. You can do so by opening it in there, or cd'ing into it.


Hi Thanks

I managed to do the OTA update. I decided to be adventurous and try the USB update as OTA is quite slow. The first file uploads great without errors the second file however show an error at the end. This does not appear to affect the update as the system reboots and appears to be OK. Am I doing something wrong or is this truly an error?

Best regards,

Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
Copyright 2010-2014 Tormod Volden and Stefan Schmidt
This program is Free Software and has ABSOLUTELY NO WARRANTY
Please report bugs to

Invalid DFU suffix signature
A valid DFU suffix will be required in a future dfu-util release!!!
Opening DFU capable USB device…
ID 2b04:d006
Run-time device DFU version 011a
Claiming USB DFU Interface…
Setting Alternate Setting #0
Determining device status: state = dfuIDLE, status = 0
dfuIDLE, continuing
DFU mode device DFU version 011a
Device returned transfer size 4096
DfuSe interface name: "Internal Flash "
Downloading to address = 0x08060000, size = 151192
Download [=========================] 100% 151192 bytes
Download done.
File downloaded successfully
Error during download get_status

@casm the get_status error at the end is a known problem. It looks to me that it downloaded properly. That is what I normally see.

1 Like


Many thanks to all who replied. @HardWater many thanks for confirming similar behavior.

Best regards

1 Like

Is it not possible to update the photon without the particle-cli? Shouldn’t the ide or dashboard(eventually) be able to push the firmware updates OTA?

Yes, that’s the plan! The initial release of the auto updater will update to the required version of system firmware when compiling an app in the WebIDE (and via particle-cli.)

@Dave is heading up the work on that, who’ll be able to commend on pushing updates from the dashboard.

So then, if I push my software from after running the particle-cli ota update commands, will it downgrade my firmware to previous version right now?

no, the system doesn’t touch your installed system firmware presently, and the system will rarely downgrade since all releases are backwards compatible.


How do I check my Particle Photon’s firmware version with particle-cli?


So, just how “auto” is the auto updater going to be. Is it going to the system firmware to the latest without me requesting it? Or will it just use the firmware that is on the device unless I specifically say to update it? (I hope it is the latter.)

@rvnash, here is how it will work:

the default behavior is, if you compile / flash a user app by sending source code to the cloud, the cloud will try to make sure you have the system modules you need to run that user app.

If your system module versions are maxxed out, you won’t get updates, etc.

But if you’re running 041, and you flash an 043 app, the cloud will send you 043 system parts

If you flash a binary directly, compile locally, etc, you won’t get updates

Bottom line is a newer firmware app need a newer system parts to go along with it. Older firmware app will run on new system parts.

1 Like

Thanks very much for the detailed reply. It sounds like they (you) are just doing the right thing, which I have confidence in. However, I’m sorry but there is some terminology in that I don’t understand. Can you explain?

“system modules”: I’m guessing this means the two pieces of the firmware system-part1 and system-part2

“maxxed out”: Does maxxed out mean at the latest version?

“flash an 043 app”: How does the cloud know which version of the system firmware I wish to compile against? Will there be a #define or pragma in my code?

“newer system parts”: As far as I know there is only one version of the Photon. Is this in anticipation of future revs of the Photon that might require “version xxx or later” of the system firmware?

Sorry if this is a dumb question, but how can I check the version of the installed firmware? I loaded v0.4.3 via the DFU but when I go to and click the settings link I see it says “You are building with SPARK FIRMWARE V0.3.4 (OCT 21)”. Does this just mean that when I use that interface the image is getting built using that firmware? If not, why does it show that version? If so, how does that affect the newer version I just loaded? Did I overwrite it? Does it just work because of the backward compatibility mentioned? I’m new to this and must be missing something.

First things first: we version mentioned on the web IDE is currently only valid for the Core, and not the Photon. That has yet to be update. For the time being, please ignore that. It will hopefully get fixed next week, when automated updates are planned to roll out.
You can check which version you’re on by placing your device in listening mode (blinking blue), opening a serial connection (with putty for example) and pressing “i”. That should return the version.
The code on your Photon consists of three parts: system-part1, system-part2, user-part. Using DFU util, you upgraded the first two. Those will run on your photon and make sure it does what it does, and the connections are all good. The user part is the stuff you program it to do (blink an LED or whatever). When flashing OTA, that’s the only part that gets replaced, the system-parts stay intact (unless you explicitly try to upgrade those).
What’s important to note about this is that your system firmware should always be higher, or equal, to the user firmware. If not, things might not work. So in this case your system firmware is on 0.4.3 and your user firmware is on the IDE version, which is somewhere around 0.4.2 (not sure, could be lower).

With the automated update pending, you’ll no longer have to worry about that. If it’s detected that your system firmware is too low, it will be updated automatically :smile:

‘i’ just gives you the device ID (which you can already get from the CLI).


Actually, after fiddling with DFU I stumbled on the proper answer which is to use “s” in listening mode.

Also, after updating to 0.4.4, you can type “v” to get an output like this: “system firmware version: 0.4.4

A more detailed discussion can be found here:

Note that to pretty-print the JSON output you will want to use the part in brackets/braces only. (Omit the leading "p":6,“m”: part.) As of 0.4.4, it looks like they wrapped it more properly so you don’t need to omit any of the output!

Also, for 0.4.4, the version number encoded in JSON shows “5” (not surprising once you let go of the idea that any of the digits in x.y.z should map to that single digit… “v” is effectively the decoder ring for that now).

I see my newly arrived one has some older software versions than I expected. Interesting to see how it changes when I flash new software today.

FYI, another handy viewer for JSON is found at Ensure you use the “expand all fields” button to see everything.

1 Like