eculocate

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

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:
MCargo.toml | 8++++++++
Mexamples/Cargo.toml | 2+-
Msrc/paddr.rs | 68+++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----------
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;