- Notifications
You must be signed in to change notification settings - Fork207
Target atsamd microcontrollers using Rust
License
Apache-2.0, MIT licenses found
Licenses found
atsamd-rs/atsamd
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
This repository holds various crates that support/enable working with Microchip (nee Atmel)samd11
,samd21
,samd51
andsame5x
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 theembedded-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.
BoardSupportPackages (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 theatsamd-hal
crate. The BSPs included inatsamd-rs
are separated in to two tiers: Tier 1 BSPs use the latest version ofatsamd-hal
, Tier 2 BSPs use a specific version ofatsamd-hal
that is not necessarily the latest.
* Tier 1 BSP
atsamd_hal
provides APIs for usingasync
/await
constructs with some of its peripherals. To enableasync
support, use theasync
Cargo feature.Detailed documentation is provided in theatsamd_hal::async_hal
module. Themetro_m4 andfeather_m0 feature complete examples showing how to use async APIs.
Please note that you must bring your own executor runtime such asembassy-executor
orrtic
to be able touse the async APIs.
- SPI
- I2C
- USART
- DMAC
- EIC (GPIO interrupts)
- Timers
The BSPs include examples to quickly get up and running with the board. Building the examplesrequires changing directory into one of the board support package directories, and some exampleswill require additional features:
$cd boards/metro_m0$ cargo build --examples --features="usb"
A new firmware can be made from one of the examples:
- Create a new Cargo package for the firmware
cargo new my_firmware
,cd my_firmware
- Copy the BSP example source file
cp feather_m0/examples/blinky_basic.rs src/main.rs
- Copy Cargo config and memory layout
cp -R feather_m0/.cargo feather_m0/memory.x .
- Add the BSP and any other required dependencies to
Cargo.toml
:
[dependencies]feather_m0 ="0.13"panic-halt ="0.2"
cargo build
should create an ELF intarget/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 aboutloading code onto the device.
See our wiki page aboutadding a new board.
The included SVD files are sourced fromhttp://packs.download.atmel.com/ andare licensed under the Apache License, Version 2.0 (LICENSE-APACHE orhttp://www.apache.org/licenses/LICENSE-2.0).
The remainder of the code is licensed under either of:
- Apache License, Version 2.0 (LICENSE-APACHE orhttp://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT orhttp://opensource.org/licenses/MIT)
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in thework by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without anyadditional terms or conditions.
About
Target atsamd microcontrollers using Rust