5 个版本

0.2.3 2023年4月19日
0.2.2 2022年12月12日
0.2.1 2022年12月9日
0.2.0 2022年12月9日
0.1.0 2022年12月5日

#650嵌入式开发

每月36 次下载

MIT 许可证

28KB
453

Avr Boot

Rust License docs.rs

本软件包包含用于写入 Avr 微控制器程序存储器的函数,使用 spm 指令。

它可被视为 avr-libc 中 boot.h 中宏的重新构思。如果您想创建引导加载程序,本软件包应该很有用。

它是硬件抽象层独立的,并且针对代码大小进行了优化。使用 Rust 编写,并添加了一些手工汇编。

本软件包旨在尽可能支持更多微控制器,并在可能的情况下抽象它们的差异。
在众多的 Avr 微控制器中,自编程过程有许多变化。仔细阅读您目标微控制器的文档至关重要。
在许多设备上,只有在编程代码位于闪存中引导加载程序部分时,spm 指令才能正常工作。在大多数微控制器上,还需要正确设置熔丝以允许自编程。在自编程期间应始终禁用中断。

本软件包支持常规和扩展(>64k)寻址模式

入门指南

将模块添加到您的 Cargo.toml 文件中

[dependencies]
avr-boot = "0.2.3"

选择高级 API

use avr_boot::PageBuffer;

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

或低级 API

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

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

查看更多使用示例的 示例模块

支持的微控制器

物理测试使用

  • atmega328p
  • atmega644
  • attiny85

使用 simavr 模拟测试

atmega1280, atmega1281, atmega1284, atmega1284p, atmega128rfr2, atmega164p, atmega164pa, atmega168, atmega168p, atmega168pa, atmega2560, atmega2561, atmega324a, atmega324p, atmega324pa, atmega328, atmega328p, atmega48, atmega48p, atmega48pa, atmega644, atmega644p, atmega88, atmega88p, atmega88pa

库至少支持构建

at90can128, at90can32, at90can64, at90pwm1, at90pwm161, at90pwm216, at90pwm2b, at90pwm316, at90pwm3b, at90pwm81, at90usb1286, at90usb1287, at90usb162, at90usb646, at90usb647, at90usb82, ata5272, ata5505, ata5782, ata5790, ata5790n, ata5791, ata5795, ata5831, ata6285, ata6286, ata6612c, ata6613c, ata6614q, ata6617c, ata664251, ata8210, ata8510, atmega128, atmega128a, atmega128rfa1, atmega16, atmega162, atmega164a, atmega165a, atmega165p, atmega165pa, atmega168a, atmega168pb, atmega169a, atmega169p, atmega169pa, atmega16a, atmega16hva, atmega16hvb, atmega16hvbrevb, atmega16m1, atmega16u2, atmega16u4, atmega2564rfr2, atmega256rfr2, atmega32, atmega324pb, atmega325, atmega3250, atmega3250a, atmega3250p, atmega3250pa, atmega325a, atmega325p, atmega325pa, atmega328pb, atmega329, atmega3290, atmega3290a, atmega3290p, atmega3290pa, atmega329a, atmega329p, atmega329pa, atmega32a, atmega32c1, atmega32hvb, atmega32hvbrevb, atmega32m1, atmega32u2, atmega32u4, atmega406, atmega48a, atmega48pb, atmega64, atmega640, atmega644a, atmega644pa, atmega644rfr2, atmega645, atmega6450, atmega6450a, atmega6450p, atmega645a, atmega645p, atmega649, atmega6490, atmega6490a, atmega6490p, atmega649a, atmega649p, atmega64a, atmega64c1, atmega64hve2, atmega64m1, atmega64rfr2, atmega8, atmega8515, atmega8535, atmega88a, atmega88pb, atmega8a, atmega8hva, atmega8u2, attiny13, attiny13a, attiny1634, attiny167, attiny2313, attiny2313a, attiny24, attiny24a, attiny25, attiny261, attiny261a, attiny4313, attiny43u, attiny44, attiny441, attiny44a, attiny45, attiny461, attiny461a, attiny48, attiny84, attiny841, attiny84a, attiny85, attiny861, attiny861a, attiny87, attiny88

然而,它们都缺少来自 avr-halsimavr 的支持,因此我无法进行进一步的测试。

不支持的MCU

目前不支持使用较新‘NVM’控制器的芯片

  • attiny10x, attiny10/20/40, attiny4/5/9
  • attiny8xx, attiny4xx, attiny16xx, attiny32xx, attiny2xx, attiny2xx
  • atmega80x, atmega48xx, atmega32xx, atmega16xx

有些MCU根本不支持自编程

  • attiny10/12/15, attiny828

贡献

欢迎在 github 上提交PR

依赖项

~1.2–1.9MB
~37K SLoC