commit 50786ba21392c14a4b65359c902ec2da6bf63504
parent 8054e309b22c745b34f921c956c7772631b2d692
Author: filipton <filipton12@gmail.com>
Date: Sat, 7 Sep 2024 08:23:09 +0200
feat: added esp32s2, esp32c3 as ota targets
Diffstat:
3 files changed, 66 insertions(+), 12 deletions(-)
diff --git a/Cargo.toml b/Cargo.toml
@@ -14,3 +14,11 @@ log = { version = "0.4.22", optional = true }
[features]
default = ["log"]
log = ["dep:log"]
+
+#esp32 = []
+#esp32c2 = []
+esp32c3 = []
+#esp32c6 = []
+#esp32h2 = []
+esp32s2 = []
+esp32s3 = []
diff --git a/examples/Cargo.toml b/examples/Cargo.toml
@@ -16,7 +16,7 @@ embassy-executor = { version = "0.6.0", package = "embassy-executor", features =
embassy-net = { version = "0.4.0", features = ["tcp", "udp", "dhcpv4", "medium-ethernet"] }
embassy-time = { version = "0.3.2" }
esp-storage = { version = "0.3.0", features = ["esp32s3"] }
-esp-hal-ota = { path = "../" }
+esp-hal-ota = { path = "../", features = ["esp32s3"] }
static_cell = { version = "2.1.0", features = ["nightly"] }
[build-dependencies]
diff --git a/src/paddr.rs b/src/paddr.rs
@@ -1,26 +1,72 @@
// this is for esp32s3, TODO: implement for other esp32's
-const SOC_MMU_VADDR_MASK: u32 = 0x1FFFFFF;
-//const MMU_PAGE_64KB: u32 = 0x10000;
-const DR_REG_MMU_TABLE: u32 = 0x600c5000;
-const SOC_MMU_VALID_VAL_MASK: u32 = 0x3fff;
+
+struct ExtMemDefs {}
+#[cfg(all(
+ //not(feature = "esp32"),
+ //not(feature = "esp32c2"),
+ not(feature = "esp32c3"),
+ //not(feature = "esp32c6"),
+ //not(feature = "esp32h2"),
+ not(feature = "esp32s2"),
+ not(feature = "esp32s3")
+))]
+impl ExtMemDefs {
+ const SOC_MMU_VADDR_MASK: u32 = 0;
+ const DR_REG_MMU_TABLE: u32 = 0;
+ const SOC_MMU_VALID_VAL_MASK: u32 = 0;
+ const MMU_PAGE: u32 = 0;
+}
+
+#[cfg(feature = "esp32c3")]
+impl ExtMemDefs {
+ const SOC_MMU_VADDR_MASK: u32 = 0x7FFFFF;
+ const DR_REG_MMU_TABLE: u32 = 0x600c5000;
+ const SOC_MMU_VALID_VAL_MASK: u32 = 0xff;
+ const MMU_PAGE: u32 = 0x10000;
+}
+
+#[cfg(feature = "esp32s2")]
+impl ExtMemDefs {
+ const SOC_MMU_VADDR_MASK: u32 = 0x3FFFFF;
+ const DR_REG_MMU_TABLE: u32 = 0x61801000;
+ const SOC_MMU_VALID_VAL_MASK: u32 = 0x3fff;
+ const MMU_PAGE: u32 = 0x10000;
+}
+
+#[cfg(feature = "esp32s3")]
+impl ExtMemDefs {
+ const SOC_MMU_VADDR_MASK: u32 = 0x1FFFFFF;
+ const DR_REG_MMU_TABLE: u32 = 0x600c5000;
+ const SOC_MMU_VALID_VAL_MASK: u32 = 0x3fff;
+ const MMU_PAGE: u32 = 0x10000;
+}
fn mmu_ll_get_entry_id(_mmu_id: u32, vaddr: u32) -> u32 {
- (vaddr & SOC_MMU_VADDR_MASK) >> 16
+ (vaddr & ExtMemDefs::SOC_MMU_VADDR_MASK) >> 16
}
fn mmu_ll_entry_id_to_paddr_base(_mmu_id: u32, entry_id: u32) -> u32 {
- let ptr = (DR_REG_MMU_TABLE + entry_id * 4) as *const u32;
- unsafe { ((*ptr) & SOC_MMU_VALID_VAL_MASK) << 16 }
+ let ptr = (ExtMemDefs::DR_REG_MMU_TABLE + entry_id * 4) as *const u32;
+ unsafe { ((*ptr) & ExtMemDefs::SOC_MMU_VALID_VAL_MASK) << 16 }
+}
+
+fn mmu_hal_pages_to_bytes(_mmu_id: u32, page_num: u32) -> u32 {
+ let shift_code = match ExtMemDefs::MMU_PAGE {
+ 0x10000 => 16,
+ 0x8000 => 15,
+ 0x4000 => 14,
+ _ => panic!("WRONG MMU_PAGE SIZE! {:X?}", ExtMemDefs::MMU_PAGE),
+ };
+
+ page_num << shift_code
}
pub fn esp_get_current_running_partition(partitions: &[(u32, u32)]) -> Option<usize> {
let ptr = esp_get_current_running_partition as *const () as *const u32;
let entry_id = mmu_ll_get_entry_id(0, ptr as u32);
- let shift_code = 16; // bc MMU_PAGE_64K
- let mmu_hal_pages_to_bytes = 1 << shift_code;
-
- let offset = (ptr as u32) % mmu_hal_pages_to_bytes;
+ let page_size_in_bytes = mmu_hal_pages_to_bytes(0, 1);
+ let offset = (ptr as u32) % page_size_in_bytes;
let paddr_base = mmu_ll_entry_id_to_paddr_base(0, entry_id);
let paddr = paddr_base | offset;