7 releases (breaking)

Uses new Rust 2021

0.7.0 Jan 11, 2022
0.5.0 Sep 27, 2021
0.4.0 Dec 31, 2020
0.3.0 Nov 28, 2020
0.1.0 Jul 7, 2020

#358 in Embedded development

Download history 23/week @ 2022-08-05 16/week @ 2022-08-12 21/week @ 2022-08-19 12/week @ 2022-08-26 16/week @ 2022-09-02 39/week @ 2022-09-09 8/week @ 2022-09-16 9/week @ 2022-09-23 24/week @ 2022-09-30 24/week @ 2022-10-07 5/week @ 2022-10-14 10/week @ 2022-10-21 19/week @ 2022-10-28 33/week @ 2022-11-04 17/week @ 2022-11-11 16/week @ 2022-11-18

85 downloads per month


19K SLoC

Arduino Nano 33 IOT Board Support Crate

This crate provides a type-safe API for working with the Arduino nano 33 IOT board.


  1. Arduino IDE or arduino CLI installed.
  2. samd package installed. You can do this by going to Tools->Board->BoardManager and then searching for samd or run arduino-cli core install arduino:samd.
  3. Now the arduino distribution contains bossac.exe in ArduinoData/packages/arduino/tools/bossac/1.7.0[-arduino3]/ add it to your path
  • linux: ArduinoData is likely something like ~/.arduino15/
  • OSX: ArduinoData is likely something like ~/Library/Arduino15
  1. Probably best to install an example sketch via the IDE just to make sure everything is working.
  2. arm-none-eabi tools installed, you need gcc and objcopy.
  • Note: Alternatively, you can use cargo-binutils, which is likely easier to install on OSX and also easier to use, as it will automatically detect the target
  1. thumbv6m-none-eabi rust target installed via rustup target add thumbv6m-none-eabi. Some features may also require nightly rust.


cargo build --release --example blinky_basic
# If using cargo-binutils, you can `rust-objcopy` with the same flags, or combine these 2 steps with `cargo objcopy`
arm-none-eabi-objcopy -O binary target/thumbv6m-none-eabi/release/examples/blinky_basic target/blinky_basic.bin

# If using bossac
bossac -i -d -U true -i -e -w -v target/blinky_basic.bin -R

# If using arduino-cli
arduino-cli upload -i target/blinky_basic.bin -b arduino:samd:nano_33_iot -p /dev/ttyACM0

(You may need to use --port with something like /dev/ttyACM0//dev/ttyACM1, or /dev/tty.usbmodemNNNNN on OSX)


  • It may help to double-press the center button to reset when re-flashing the device. This sets the device in a bootloader mode.
  • For the usb example, picocom is a good simple terminal serial emulator, installable with your os's package manager or brew
    • On OSX, after flashing the tty for serial communication may be different, for example /dev/tty.usbmodemTEST1


~150K SLoC