Skip to content

Commit 9754275

Browse files
committed
Replace old BLOCK_SIZES with definitions of the blocks themselves
The actual block definitions only exist within Python classes so this commit uses PyO3 to import the esptool.py eFuse block definitions and generates arrays of the length and read address of each eFuse block. We need the actual read address here rather than using the old offset method because not all eFuse blocks are sequential. (On ESP32 the block 0 read registers are followed by the block 0 write registers.)
1 parent 845e386 commit 9754275

File tree

16 files changed

+602
-98
lines changed

16 files changed

+602
-98
lines changed

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1717

1818
### Fixed
1919

20-
- Corrected eFuse BLOCK0 definitions for ESP32-C2, ESP32-C3, and ESP32-S3 (#961)
20+
- Corrected eFuse block address calculations. (#971)
2121
- Fixed Secure Download Mode detection on ESP32-P4 (#972)
2222
- Several fixes in `read_efuse` (#969)
2323

Cargo.lock

Lines changed: 92 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

espflash/src/error.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -363,6 +363,10 @@ pub enum Error {
363363
/// The efuse field is larger than 32 bit.
364364
#[error("Requested efuse field is larger than 32 bit. Use `read_efuse_le`.")]
365365
EfuseFieldTooLarge,
366+
367+
/// Specified eFuse block does not exist
368+
#[error("specified eFuse block does not exist: {0}")]
369+
InvalidEfuseBlock(u32),
366370
}
367371

368372
#[cfg(feature = "serialport")]

espflash/src/target/efuse/esp32.rs

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,32 @@
22
//!
33
//! This file was automatically generated, please do not edit it manually!
44
//!
5-
//! Generated: 2025-11-19 12:31
5+
//! Generated: 2025-11-26 21:42
66
//! Version: 369d2d860d34e777c0f7d545a7dfc3c4
77
88
#![allow(unused)]
99

10-
use super::EfuseField;
10+
use super::{EfuseBlock, EfuseField};
1111

12-
/// Total size in bytes of each block
13-
pub(crate) const BLOCK_SIZES: &[u32] = &[28, 32, 32, 32];
12+
/// All eFuse blocks available on this device.
13+
pub(crate) const BLOCKS: &[EfuseBlock] = &[
14+
EfuseBlock {
15+
length: 7u8,
16+
read_address: 1073061888u32,
17+
},
18+
EfuseBlock {
19+
length: 8u8,
20+
read_address: 1073061944u32,
21+
},
22+
EfuseBlock {
23+
length: 8u8,
24+
read_address: 1073061976u32,
25+
},
26+
EfuseBlock {
27+
length: 8u8,
28+
read_address: 1073062008u32,
29+
},
30+
];
1431

1532
/// Efuse write disable mask
1633
pub const WR_DIS: EfuseField = EfuseField::new(0, 0, 0, 16);

espflash/src/target/efuse/esp32c2.rs

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,32 @@
22
//!
33
//! This file was automatically generated, please do not edit it manually!
44
//!
5-
//! Generated: 2025-11-19 12:31
5+
//! Generated: 2025-11-26 21:42
66
//! Version: 897499b0349a608b895d467abbcf006b
77
88
#![allow(unused)]
99

10-
use super::EfuseField;
10+
use super::{EfuseBlock, EfuseField};
1111

12-
/// Total size in bytes of each block
13-
pub(crate) const BLOCK_SIZES: &[u32] = &[8, 12, 32, 32];
12+
/// All eFuse blocks available on this device.
13+
pub(crate) const BLOCKS: &[EfuseBlock] = &[
14+
EfuseBlock {
15+
length: 2u8,
16+
read_address: 1610647596u32,
17+
},
18+
EfuseBlock {
19+
length: 3u8,
20+
read_address: 1610647604u32,
21+
},
22+
EfuseBlock {
23+
length: 8u8,
24+
read_address: 1610647616u32,
25+
},
26+
EfuseBlock {
27+
length: 8u8,
28+
read_address: 1610647648u32,
29+
},
30+
];
1431

1532
/// Disable programming of individual eFuses
1633
pub const WR_DIS: EfuseField = EfuseField::new(0, 0, 0, 8);

espflash/src/target/efuse/esp32c3.rs

Lines changed: 49 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,60 @@
22
//!
33
//! This file was automatically generated, please do not edit it manually!
44
//!
5-
//! Generated: 2025-11-19 12:31
5+
//! Generated: 2025-11-26 21:42
66
//! Version: 4622cf9245401eca0eb1df8122449a6d
77
88
#![allow(unused)]
99

10-
use super::EfuseField;
10+
use super::{EfuseBlock, EfuseField};
1111

12-
/// Total size in bytes of each block
13-
pub(crate) const BLOCK_SIZES: &[u32] = &[24, 24, 32, 32, 32, 32, 32, 32, 32, 32, 32];
12+
/// All eFuse blocks available on this device.
13+
pub(crate) const BLOCKS: &[EfuseBlock] = &[
14+
EfuseBlock {
15+
length: 6u8,
16+
read_address: 1610647596u32,
17+
},
18+
EfuseBlock {
19+
length: 6u8,
20+
read_address: 1610647620u32,
21+
},
22+
EfuseBlock {
23+
length: 8u8,
24+
read_address: 1610647644u32,
25+
},
26+
EfuseBlock {
27+
length: 8u8,
28+
read_address: 1610647676u32,
29+
},
30+
EfuseBlock {
31+
length: 8u8,
32+
read_address: 1610647708u32,
33+
},
34+
EfuseBlock {
35+
length: 8u8,
36+
read_address: 1610647740u32,
37+
},
38+
EfuseBlock {
39+
length: 8u8,
40+
read_address: 1610647772u32,
41+
},
42+
EfuseBlock {
43+
length: 8u8,
44+
read_address: 1610647804u32,
45+
},
46+
EfuseBlock {
47+
length: 8u8,
48+
read_address: 1610647836u32,
49+
},
50+
EfuseBlock {
51+
length: 8u8,
52+
read_address: 1610647868u32,
53+
},
54+
EfuseBlock {
55+
length: 8u8,
56+
read_address: 1610647900u32,
57+
},
58+
];
1459

1560
/// Disable programming of individual eFuses
1661
pub const WR_DIS: EfuseField = EfuseField::new(0, 0, 0, 32);

espflash/src/target/efuse/esp32c5.rs

Lines changed: 49 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,60 @@
22
//!
33
//! This file was automatically generated, please do not edit it manually!
44
//!
5-
//! Generated: 2025-11-19 12:31
5+
//! Generated: 2025-11-26 21:42
66
//! Version: 31c7fe3f5f4e0a55b178a57126c0aca7
77
88
#![allow(unused)]
99

10-
use super::EfuseField;
10+
use super::{EfuseBlock, EfuseField};
1111

12-
/// Total size in bytes of each block
13-
pub(crate) const BLOCK_SIZES: &[u32] = &[24, 24, 32, 32, 32, 32, 32, 32, 32, 32, 32];
12+
/// All eFuse blocks available on this device.
13+
pub(crate) const BLOCKS: &[EfuseBlock] = &[
14+
EfuseBlock {
15+
length: 6u8,
16+
read_address: 1611352108u32,
17+
},
18+
EfuseBlock {
19+
length: 6u8,
20+
read_address: 1611352132u32,
21+
},
22+
EfuseBlock {
23+
length: 8u8,
24+
read_address: 1611352156u32,
25+
},
26+
EfuseBlock {
27+
length: 8u8,
28+
read_address: 1611352188u32,
29+
},
30+
EfuseBlock {
31+
length: 8u8,
32+
read_address: 1611352220u32,
33+
},
34+
EfuseBlock {
35+
length: 8u8,
36+
read_address: 1611352252u32,
37+
},
38+
EfuseBlock {
39+
length: 8u8,
40+
read_address: 1611352284u32,
41+
},
42+
EfuseBlock {
43+
length: 8u8,
44+
read_address: 1611352316u32,
45+
},
46+
EfuseBlock {
47+
length: 8u8,
48+
read_address: 1611352348u32,
49+
},
50+
EfuseBlock {
51+
length: 8u8,
52+
read_address: 1611352380u32,
53+
},
54+
EfuseBlock {
55+
length: 8u8,
56+
read_address: 1611352412u32,
57+
},
58+
];
1459

1560
/// Disable programming of individual eFuses
1661
pub const WR_DIS: EfuseField = EfuseField::new(0, 0, 0, 32);

0 commit comments

Comments
 (0)