Target atsamd microcontrollers using Rust
APACHE-2.0 License
This repository holds various crates that support/enable working with Microchip (nee Atmel) samd11
, samd21
, samd51
and same5x
based devices using Rust.
The Hardware Abstraction Layer (HAL - ) crate encodes a type-safe layer over the raw PACs. This crate implements traits specified by the embedded-hal project, making it compatible with various drivers in the embedded Rust ecosystem. Cargo features are used to enable support for specific hardware variations and features. Online documentation for commonly-used feature sets is provided:
Chip family | Documented features |
---|---|
samd11c | samd11c |
samd11d | samd11d |
samd21g | samd21g usb |
samd21j | samd21j usb |
samd51g | samd51g usb |
samd51j | samd51j usb |
samd51n | samd51n usb |
samd51p | samd51p usb |
The Peripheral Access Crates (PACs) are automatically generated from Microchip SVD files, and provide low-level access to the peripherals specified by a device's SVD file.
Board Support Packages (BSPs) are provided for popular development boards, which rename pins to match silk screens or Arduino pin assignments, add helpers for initialization, and re-export the atsamd-hal
crate. The BSPs included in atsamd-rs
are separated in to two tiers: Tier 1 BSPs use the latest version of atsamd-hal
, Tier 2 BSPs use a specific version of atsamd-hal
that is not necessarily the latest.
* Tier 1 BSP
The BSPs include examples to quickly get up and running with the board. Building the examples requires changing directory into one of the board support package directories, and some examples will require additional features:
$ cd boards/metro_m0
$ cargo build --examples --features="usb"
A new firmware can be made from one of the examples:
cargo new my_firmware
, cd my_firmware
cp feather_m0/examples/blinky_basic.rs src/main.rs
cp -R feather_m0/.cargo feather_m0/memory.x .
Cargo.toml
:[dependencies]
feather_m0 = "0.13"
panic-halt = "0.2"
cargo build
should create an ELF in target/thumbv6m-none-eabi/debug/my_firmware
You'll need to add the proper compilation target prior to building:
$ # for samd11, samd21:
$ rustup target add thumbv6m-none-eabi
$ # for samd51, same51, same53, same54:
$ rustup target add thumbv7em-none-eabihf
If you'd like to build all the same things that the CI would build but on your local system, you can run:
$ ./build-all.py
See our wiki page about loading code onto the device.
See our wiki page about adding a new board.
The included SVD files are sourced from http://packs.download.atmel.com/ and are licensed under the Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0).
The remainder of the code is licensed under either of:
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.