10 releases (breaking)

0.9.0 Jul 15, 2023
0.8.1 May 8, 2022
0.8.0 Mar 29, 2022
0.7.0 Dec 25, 2021
0.2.0 Jan 10, 2020

#468 in Embedded development

MIT/Apache

1.5MB
23K SLoC

ATSAMD11C Support Crate

This crate provides a type-safe API for working with the ATSAMD11C.

Examples?

Check out the repository for examples:

https://github.com/atsamd-rs/atsamd/tree/master/boards/samd11_bare/examples

Getting code onto the device with debugger: cargo-flash

This is the preferred pure rust ecosystem method for flashing with debugger.

cargo flash replaces the cargo build command to include flashing over debugger using probe-rs and libusb.

$ cargo install cargo-flash

Cargo flash needs to know the specific id of your chip, but its included in the package.metadata field of the Cargo.toml so you can omit it.

Then cargo flash simply replaces your cargo build command!

$ cargo flash --example blinky_basic --features unproven --release

Debugging: probe-run

This is the preferred pure rust ecosystem method for debugging. It requires no external gdb server, nor C or Python tooling like openocd.

probe-run attemps to bring the hosted cargo run print line debugging experience to embedded. It also has advanced logging features to vastly reduce format size under the defmt project which is not covered here.

probe-run needs to be set as your runner in the .cargo/config along with the id of your chip. Also debug symbols need to be enabled for any profile you're building for. In your application you'll want to use a probe-run compatible panic crate like panic-probe and an rtt debug logging crate like rtt-target. Also don't forget to init your rtt machinery.

probe-run will then be called after a successful build to flash the code directly to the target via debugger and will then wait to receive any rtt prints from your target. Finally if a panic occurs or you ever call cortex_m::asm::bkpt() probe-run will detect, print a stack trace, and exit. You can exit probe-run on the host side with ctrl-c.

$ cargo install probe-run

Then simply use your ide's run or play button, or run:

$ cargo run --release --example adc --features=unproven
    Finished release [optimized + debuginfo] target(s) in 0.99s
     Running `probe-run --chip ATSAMD11C14A target\thumbv6m-none-eabi\release\examples\adc`
  (HOST) INFO  flashing program (7.18 KiB)
  (HOST) INFO  success!
────────────────────────────────────────────────────────────────────────────────
3828
3829
414
413
419
^Cstack backtrace:
   0: <atsamd_hal::common::delay::Delay as embedded_hal::blocking::delay::DelayUs<u32>>::delay_us
        at /home/atsamd/hal/src/common/delay.rs:72
   1: <atsamd_hal::common::delay::Delay as embedded_hal::blocking::delay::DelayMs<u32>>::delay_ms
        at /home/atsamd/hal/src/common/delay.rs:35
   2: <atsamd_hal::common::delay::Delay as embedded_hal::blocking::delay::DelayMs<u16>>::delay_ms
        at /home/atsamd/hal/src/common/delay.rs:41
   3: neopixel_adc_battery::__cortex_m_rt_main
        at examples/neopixel_adc_battery.rs:50
   4: main
        at examples/neopixel_adc_battery.rs:23
   5: ResetTrampoline
        at /home/.cargo/registry/src/github.com-1ecc6299db9ec823/cortex-m-rt-0.6.13/src/lib.rs:547
   6: Reset
        at /home/.cargo/registry/src/github.com-1ecc6299db9ec823/cortex-m-rt-0.6.13/src/lib.rs:550

Dependencies

~6MB
~161K SLoC