| Crates.io | esp-hal-ota |
| lib.rs | esp-hal-ota |
| version | 0.4.4 |
| created_at | 2024-07-22 18:19:21.548059+00 |
| updated_at | 2025-08-10 19:48:34.731965+00 |
| description | OTA library for esp-hal |
| homepage | |
| repository | https://github.com/filipton/esp-hal-ota |
| max_upload_size | |
| id | 1311452 |
| size | 49,984 |
OTA for esp-hal (no-std).
I cannot test if it works properly on esp32s2,esp32c2,esp32c6 and esp32h2. But esp32s3, esp32c3 and esp32 are working perfectly fine.
partitions.csv file in project root (copy partitions.csv.template file)./.cargo/config.toml file and append --partition-table ./partitions.csv to the runner attribute--erase-parts otadata to ./cargo/config.toml to fix some ota issues[target.xtensa-esp32s3-none-elf]
runner = "espflash flash --monitor --partition-table ./partitions.csv --erase-parts otadata"
To see real-world example look at ./examples and ./simple-ota-server dirs.
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, true).is_ok() { // true if you want to verify crc reading flash, and true if you want rollbacks
esp_hal::reset::software_reset();
}
}
let progress = (ota.get_ota_progress() * 100) as u8;
log::info!("progress: {}%", progress);
}
espflash save-image --chip esp32c3 ./target/riscv32imc-unknown-none-elf/debug/esp-hal-ota-example ../simple-ota-server/firmware.bin
This will generate .bin file from build file for chip.