How to unbrick Xenon (return to factory default firmware)

Tags: #<Tag:0x00007fe22be74ec8>


Can you send a pic of your setup? Generally speaking, “does not work” isn’t helpful in debugging. :sweat_smile:

One suggestion though is to make sure you’re plugging into the correct port on the NRFSDK. Reference my picture above. It’s tempting to use the other one on the board but that’s for the J-Link processor.

If your DK is unmodified, it won’t use the Debug Out port unless it sees 3.3V on the input. So you need to power both the programmer and the Particle board via USB.

I’m assuming the DK works standalone?


Thanks @jaredwolff. Finally got time to come back on this project. Yes it is resolved - tried another (unmodified) NRF5x DK using 10 pin cable directly back to back worked well.

Thank you again for your kind help and tips.


Thanks @jaredwolff. After I lost my mind you instructions and code made my Xenon working. I had the use a j-link and an adapter board. Is there some way we can put all the instruction and the GitHub in one place for the next guy. It really took some digging to find all the links.

Thanks Again.


@Chappy happy to help! :slight_smile: I’ll pop it all in the repository.

@janek can you select my post below as the “answer”? That way people don’t get lost. :innocent:


Actually looks like I can’t edit that one. Here’s all the info in one place. I’ve modified this for 1.4.4. This should work with any version of deviceOS though.

A full explanation is coming but you can clone this repository . The only thing you’ll need to install is jlinkexe. Here’s a link to that download:

You need to download all the files that match your device. This incluedes the Soft Device, Bootloader, System Part and Tinker images. Here’s a whole zip for 1.4.4 for each of the Particle Mesh boards:




All links are from the release page on Github:

Remember, you’ll need to program the system part and the tinker app to make sure everything is working afterwards. My xenon got into a weird state probably due to programing an image out of order.

Here are the steps for anyone else who’s interested:

  1. Run the following to program the soft device
    ./ --flash-softdevice /path/to/softdevice.hex
  2. Then, run to program the bootloader.
    ./ --flash-bootloader-bin /path/to/xenon-bootloader@1.4.4.bin 0xf4000
  3. The device should be blinking yellow. Next, let’s program the system part:
    particle flash --usb /path/to/xenon-system-part1@1.4.4.bin
  4. Finally, lets flash Tinker to make sure everything works!
    particle flash --usb /path/to/xenon-tinker@1.4.4.bin

You should be able to substitute any version of deviceOS with the one I used above. Just make sure that the boot loader, system part and Tinker are all the same version.

Here’s a picture of my setup:

Side note: the purple board is a level translator board I designed a while back. Works great for designs that are < 2.25V. :slight_smile:

I think I broke my argon


What is the difference between j-link and particle debugger, i planned update xenon to custom firmware by debugger or need j-link for that ?
there is cheap st-link v2, it is possible to upgrade it to j-link if necessary.



There’s a big difference actually. Particle’s debugger uses an open source debugger firmware developed by ARM. Whereas Jlink’s is completely closed source. If you’re looking to debug your application, I highly recommend going with the Particle debugger or debuggers that are CMSIS-DAP capable.


i looking for debug application, for replace particle firmware and to unbrick/return to factory firmware if needed


Ahh gotcha. The J-Link is better supported in Nordic’s SDK. Plus they have mini J-Links on every single one of their development boards. That would be my vote if you’re not using DeviceOS


but how does DeviceOS affect it ?


I haven’t looked into how difficult it is to debug using J-link versus the CMSIS DAP stuff. It’s not as easy as pressing a button. Let’s just say that!