2 个版本

0.1.1 2024 年 7 月 22 日
0.1.0 2024 年 7 月 22 日

#249硬件支持

Download history 220/week @ 2024-07-21 7/week @ 2024-07-28

每月 227 次下载

MIT 许可证

19KB
317

esp-hal-ota

esp-hal 的 OTA(无标准库)。

crates.io MIT license

限制

目前仅适用于 esp32s3(未来将支持 esp32c3)。

功能

  • 显然是 OTA 更新
  • 动态分区读取(没有宏,不读取 partitions.csv) - 完全自动
  • 检查当前启动的分区(使用 ESP-IDF 的一些指针魔法)
  • CRC32 验证

入门指南

  • 在项目根目录中创建 partitions.csv 文件(复制 partitions.csv.template 文件)
  • 在您的项目中编辑 ./.cargo/config.toml 文件,并将 -T ./partitions.csv 添加到 runner 属性
  • 可选地,将 --erase-parts otadata 添加到 ./cargo/config.toml 以修复一些 ota 问题
[target.xtensa-esp32s3-none-elf]
runner = "espflash flash --monitor -T ./partitions.csv --erase-parts otadata"

示例

要查看现实世界的示例,请查看 ./examples./simple-ota-server 目录。

let flash_size = 1234; // get it from OTA server
let target_crc = 65436743; // get it from OTA server

let mut ota = Ota::new(FlashStorage::new()).unwrap();
ota.ota_begin(flash_size, target_crc);

let mut buf = [0; 4096];
loop {
    let n = read_next_chunk(&mut buf);
    if n == 0 {
        break;
    }

    let res = ota.ota_write_chunk(&buf[..n]);
    if res == Ok(true) { // end of flash
        if ota.ota_flush(true).is_ok() { // true if you want to verify crc reading flash
            esp_hal::reset::software_reset();
        }
    }

    let progress = (ota.get_ota_progress() * 100) as u8;
    log::info!("progress: {}%", progress);
}

待办事项

  • 功能齐全的库
  • 简单示例
  • 更好的错误处理
  • 其他 esp32 型号(如 esp32c3、esp32s2 等)
  • 回滚

资源

依赖项

~105KB