Skip to content

Commit bd3a56d

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 bd3a56d

File tree

15 files changed

+601
-97
lines changed

15 files changed

+601
-97
lines changed

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)