Crate avr_boot

Source
Expand description

§Avr Boot

This crate contains functions to write to the program memory of AVR MCUs, using the spm instruction.

It could be considered a reimagining of the macros in boot.h from avr-libc, but in Rust, plus some artisanal, hand-crafted asm. If you’re looking to create a bootloader, this crate should be useful.

It is hal independent, and optimised for code size.

Regular and extended (>64k) addressing modes are supported.

§Getting started

Add the module to your Cargo.toml:

[dependencies]
avr-boot = "0.1.0"

Pick from the high level API:

use avr_boot::PageBuffer;

let address: u16 = 0x1000;
let data = [0xffff; PageBuffer::LENGTH];
let buff = PageBuffer::new(address);
buff.copy_from(&data);
buff.store();

Or the low level one:

use avr_boot::{spm, SPM_PAGESIZE_WORDS, Address};

let page_address: u16 = 0x1000;
for w in 0..SPM_PAGESIZE_WORDS {
    spm::fill_page((page_address + (w * 2) as u16), 0x1234);
}
spm::erase_page(page_address);
spm::write_page(page_address);
spm::rww_enable();

Check out the examples module for more usage examples

Modules§

spm
Low level API for calling bootloader functions

Structs§

Address
16 or 24 bit program memory address
DataPage
NewType, an array of memory the same size as the page buffer
PageBuffer
Representation of the spm page buffer.

Constants§

SPM_PAGESIZE_BYTES
Total size of the SPM page buffer, for the current MCU target
SPM_PAGESIZE_WORDS
Total length in 16 byte words of the SPM page buffer, for the current MCU target