Upload different bootloader into XIAO

Hi, The current bootloader that comes with XIAO is unreliable. It randomly stops working when trying to upload from arduino IDE. I love XIAO for its very small size and cost. Its a great product, except for this bootloader issue.
Anybodys knows if we can replace the current bootloader with a different stable one, like the bootloader used in arduino (optiboot) or adafruit M0 or something like that? A robust and reliable bootloader will make XIAO an awesome product.

Hi @John_Doe
You can have a try CircuitPython Bootloader for Seeeduino XIAO .
More info refers to here.

Hi, I’ve found another solution with someone’s help actually. I had an issue that I couldn’t upload anything at some point and port has changed from COM6 to COM7 and it looked like in bootloader mode.
The fix was to manually change COM7 to COM6 in Device Manager (right-click on the port, go to Properties->Port Settings->Advanced and then force change port). After that I reconnected XIAO and uploaded blank script with start and loop only. And it worked! :slight_smile: Now I can do everything fine as previously.

@John_Doe any luck finding a new bootloader for the Xiao?

It seems that more and more people are running into the same problem: A bricked Xiao…

Unfortunately it seems that @Seeed does nothing whatsoever to solve the problem. In my humble opinion they have an obligation to do so, as we paid for a working product, not a brick…

3 Likes

If you have a spare ESP32 board, you could flash a VCON firmware on it which turns ESP32 into a remotely controlled programmer. Wire ESP32 to the XIAO’s SWD pins, and reflash XIAO - you could reflash any bootloader on it, or Arduino-compiled sketches.

If you’re uploading a bootloader, make sure it is in .hex format.

Wiring instructions are at https://vcon.io/docs/#seeeduino-xiao
ESP32 flashing instructions are at https://vcon.io/docs/#generic-esp32

If you keep ESP32 wired to XIAO, you could reflash your XIAO remotely at any time.

Disclaimer - I do represent VCON product. It is commercial, with freebie quota for first 10 devices, so reflashing XIAOs (and not just XIAOs) could be done absolutely for free.

I am still trying to bottom this issue out, because I’m not sure its directly the Xiao. I have 6 pc’s onsite all running Arduino IDE V2.1.0. 2 program the Xiao without problems (no need to double-reset) the other 4 program just once then cannot see the usb port properly (USB not recognised from windows)

barnbrook, You should check the forum guides, You really Don’t need to post the same thing in three different topics. We get it, Your having some issues?
Best to post your issue and wait until a reply. Lots of smart folks on here willing to help.
GL:-)
PJ

Hi all,
I just got caught completely off guard when I suddenly couldn’t upload Arduino sketches anymore to my XIAO nrf52840 BLE Sense. I was happily testing code with the non-mbed enabled core, but then had to test something with the mbed-enabled core. So I switched the board selection and uploaded the code, which seemed successful. But after the upload, the board suddenly had another COM port (18 instead of 20), and no matter what I try, I can’t upload anything anymore.

I was trying @przemek method but with no luck. I can enter the bootloader by clicking reset twice, but I don’t actually know what this means. Unfortunately, I’m quite lost here. I highly appreciate any help. Do I need to flash another/new bootloader? Or does this smell like something different? Can this happen randomly, or did I do something that caused this behavior?

Please let me know if you guys have some idea what’s going on. Many thanks for your help!

Hi There,
Yes that is correct, its in bootloader mode , youll see a drive appear as well,disconnect and reboot your computer and try again.

It should upload normally, do wait and don’t be impatient.
HTH
GL :slight_smile:
PJ.

Hi PJ,
Thanks for the answer :slightly_smiling_face:.
This is the weird part: my XIAO appears normally as a COM port, but doesn’t accept uploads anymore. The output of the upload in the Arduino IDE first says “waiting for upload port…” and after about a minute it fails, saying “Serial port could not be opened on COM24. Reason: Cannot configure port, something went wrong. Original message: OSError(22, ‘The semaphore timeout period has expired.’, None, 121)”. With putty I can neither open the COM port (with IDE closed). Right now I’m just trying to upload a simple blink sketch, which works normally on another XIAO of the same type.

This behavior seems a bit strange to me. Do you know of anything else I could try to narrow down the issue?
Best,

One trick I have used successfully when this has happened, Was to Guess at the connection.
Hit Upload with nothing connected (xiao) get an idea of the timing from upload to “No Port specified” nag.
Now hit upload again but plug in Xiao at the right time and BINGO. it goes.
Takes a few tries but I usually get it after the second or third time.
HTH
GL :slight_smile:
PJ

ps. you may want to treat it like it’s bricked and try the factory .hex and drop it on with Nrf Desktop programmer.


Now another of my XIAOs just bricked out! Yesterday I uploaded the example blink sketch that I wanted to use to unbrick my first XIAO, and it worked, and today it doesn’t pop up as a COM port anymore… Does this happen often with these XIAOs? I mean to me everything looks fine, I uploaded a couple of times through the Arduino IDE without problems, and then it suddenly decides to not work anymore? I don’t get it.

I wanted to try your suggestion with the Nrf Desktop, but the app says it doesn’t recognize it as a Nordic device. Would you know if I need to configure the app to recognize the XIAO properly?
cheers,

Uff, I managed to unbrick both. Fortunately I found a blogpost, describing a very easy way:
Doubleclick the reset button to enter bootloader mode. In this mode, the XIAO will have a different COM port assigned than when connecting normally. So in the Arduino IDE, select the right board and this new COM port, and upload, and voilà! Everything works again :sweat_smile:.

This might be a very obvious solution, but I wanted to share it nevertheless, maybe it can help somebody. The solution actually came from somebody that was flashing a CircuitPython bootloader and then wanted to go back to the Arduino bootloader, and it works the same way.

Now I still don’t know how they bricked in the first place, maybe something I figure out another time.