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 次下载
28KB
453 行
Avr Boot
本软件包包含用于写入 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-hal
或 simavr
的支持,因此我无法进行进一步的测试。
不支持的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