Go Down

Topic: Unbrick Nano 33 IoT (Read 982 times) previous topic - next topic


Mar 25, 2020, 05:02 pm Last Edit: Mar 25, 2020, 05:54 pm by mitchworld
I own both a Nano 33 BLE Sense and a Nano 33 IoT.
After using my 33 BLE for a while, I've connected the Nano 33 IoT, loaded the Blink example sketch and clicked the compile and flash button. Unfortunately I forgot to change the board from BLE to IoT.

My Nano 33 IoT seems to be bricked now. The LED is constantly on. Double tapping the Reset button doesn't help and it is not recognized by Windows when connected through USB.

Does anyone have any ideas what else I can try? Do I need to manually re-flash the bootloader? How would I do that given that the USB-connection doesn't work?



I've also done this. From what I can tell, the only way to recover the board is to flash the bootloader.

You'll need:
  • An extra Arduino board that runs at 3.3 V.
  • An SD slot. This could be built into your Arduino board (e.g., MKR Zero), a shield (e.g., MKR SD Proto Shield), or one of the common SD modules.
  • An SD card that fits your SD slot.
  • A way to connect the SD card to your computer.
  • A way to make the connections to the SWD pins on your target Arduino board. For the Nano 33 IoT and the MKR boards other than MKR1000, I like to use a 0.1" pitch 2x3 POGO adapter. You could also solder wires to the test points if you prefer. You could also solder some wires to the pads (you really only need connections to SWDIO and SWCLK, since the rest are available on the standard pins), or carefully hold some header pins or jumper wires pressed down on the pads.

It is possible to use an Arduino board that runs at 5 V as the programmer, but you'll need to use level shifting circuitry on the programming lines to avoid exposing the target board to 5 V logic levels, which would damage it.


Connect an SD card to your computer.

Open this link in your browser: https://github.com/arduino/ArduinoCore-samd/tree/master/bootloaders

Click the folder that matches the name of your target board.

Click the file that ends in .bin.

Click the "Download" button.

Rename the downloaded file to fw.bin

Move fw.bin to the SD card.

Eject the SD card from your computer.

Plug the USB cable of the Arduino board you will be using as a programmer into your computer.

(In the Arduino IDE) Sketch > Include Library > Manage Libraries

Wait for the download to finish.

In the "Filter your search..." field, type "Adafruit DAP library".

Press "Enter".

Click on "Adafruit DAP library by Adafruit".

Click the "Install" button.

Wait for the installation to finish.

Click the "Close" button.

File > Examples > Adafruit DAP library > flash_from_SD

Change this line:
Code: [Select]
#define SD_CS 4
according to the Arduino pin connected to the SD CS pin. If your board has a built-in SD slot (e.g., MKR Zero), then you can change this line:
Code: [Select]
if (!SD.begin(SD_CS)) {
Code: [Select]
if (!SD.begin()) {

Select the correct board from the Tools > Board menu.

Select the correct port from the Tools > Port menu.

Sketch > Upload

Wait for the upload to finish successfully.

Unplug the programmer Arduino board from your computer.

Plug the SD card into the SD slot connected to your Arduino board.

Connect the programmer Arduino board to the target Arduino board as follows:
Programmer | Target
VCC | +3V3
10 | SWDIO

Nano 33 IoT SWD pads:

Plug the USB cable of the programmer Arduino board into your computer.

Tools > Serial Monitor. You should now see the target board detected, and the bootloader file flashed to it successfully.

Unplug the programmer Arduino board from your computer.

Disconnect the programmer Arduino board from the target Arduino board.

Note: another alternative is to use a J-Link debug probe (J-Link EDU Mini and J-Link clones are available for a low price) with the Adalink software:


Many thanks. I will try that.


You're welcome. Let me know if anything is unclear or you run into any problems.

Go Up