diff options
| author | Ian McIntyre <me@mciantyre.dev> | 2025-11-30 19:56:39 -0500 |
|---|---|---|
| committer | Ian McIntyre <me@mciantyre.dev> | 2025-11-30 19:56:39 -0500 |
| commit | 635bee2d21704fd76d066be0f66ce2c70ebaacb7 (patch) | |
| tree | 98cbf691f75a478b6e849fe8e1de641f50094d61 /imxrt1040evk | |
First commit
Diffstat (limited to 'imxrt1040evk')
| -rw-r--r-- | imxrt1040evk/Cargo.toml | 20 | ||||
| -rw-r--r-- | imxrt1040evk/build.rs | 8 | ||||
| -rw-r--r-- | imxrt1040evk/examples/smoke.rs | 36 | ||||
| -rw-r--r-- | imxrt1040evk/src/lib.rs | 7 | ||||
| -rw-r--r-- | imxrt1040evk/src/main.rs | 25 |
5 files changed, 96 insertions, 0 deletions
diff --git a/imxrt1040evk/Cargo.toml b/imxrt1040evk/Cargo.toml new file mode 100644 index 0000000..3df3f8a --- /dev/null +++ b/imxrt1040evk/Cargo.toml @@ -0,0 +1,20 @@ +[package] +name = "imxrt1040evk" +version = "0.1.0" +edition = "2024" +publish = false + +[dependencies] +cortex-m = { workspace = true } +defmt-rtt = { workspace = true } + +imxrt1040-flash-algos = { workspace = true } +flash-algorithm = { workspace = true } +panic-probe = { workspace = true } + +[build-dependencies] +imxrt-rt = { workspace = true, features = ["device"] } + +[dev-dependencies] +defmt = { workspace = true } +imxrt-rt = { workspace = true, features = ["device"] } diff --git a/imxrt1040evk/build.rs b/imxrt1040evk/build.rs new file mode 100644 index 0000000..a02ccc0 --- /dev/null +++ b/imxrt1040evk/build.rs @@ -0,0 +1,8 @@ +use imxrt_rt::Family; + +fn main() { + imxrt_rt::RuntimeBuilder::from_ram(Family::Imxrt1040) + .device_script_name("imxrt1040.x") + .build() + .unwrap(); +} diff --git a/imxrt1040evk/examples/smoke.rs b/imxrt1040evk/examples/smoke.rs new file mode 100644 index 0000000..3730125 --- /dev/null +++ b/imxrt1040evk/examples/smoke.rs @@ -0,0 +1,36 @@ +#![no_main] +#![no_std] + +use defmt_rtt as _; +use imxrt1040evk::{self, Algorithm}; +use panic_probe as _; + +const LAST_SECTOR: usize = Algorithm::flash_size_bytes() - Algorithm::sector_size_bytes(); + +#[imxrt_rt::entry] +fn main() -> ! { + for _ in 0..5 { + let mut w25q64 = Algorithm::initialize(); + + let mut sector = [0_u8; Algorithm::sector_size_bytes()]; + w25q64.flash_read(0, &mut sector[..4]); + let tag = u32::from_le_bytes(sector[..4].try_into().unwrap()); + defmt::assert!(0x42464346 == tag, "{=u32:#010X}", tag); + + w25q64.flash_erase_sector(LAST_SECTOR + 256); + + sector.fill(0); + w25q64.flash_write(LAST_SECTOR, §or); + + sector.fill(u8::MAX); + w25q64.flash_read(LAST_SECTOR, &mut sector); + defmt::assert!(sector.iter().all(|byte| *byte == 0)); + + w25q64.flash_erase_sector(LAST_SECTOR + 123); + + w25q64.flash_read(LAST_SECTOR, &mut sector); + defmt::assert!(sector.iter().all(|byte| *byte == u8::MAX)); + } + defmt::println!("Pass"); + loop {} +} diff --git a/imxrt1040evk/src/lib.rs b/imxrt1040evk/src/lib.rs new file mode 100644 index 0000000..ad2bb57 --- /dev/null +++ b/imxrt1040evk/src/lib.rs @@ -0,0 +1,7 @@ +#![no_std] + +use cortex_m as _; + +pub use imxrt1040_flash_algos::flash::winbond::W25q64 as Flash; + +pub type Algorithm = imxrt1040_flash_algos::Algorithm<Flash>; diff --git a/imxrt1040evk/src/main.rs b/imxrt1040evk/src/main.rs new file mode 100644 index 0000000..87d76cf --- /dev/null +++ b/imxrt1040evk/src/main.rs @@ -0,0 +1,25 @@ +#![no_std] +#![no_main] + +use defmt_rtt as _; +use panic_probe as _; + +use imxrt1040evk::Algorithm; + +flash_algorithm::algorithm!(Algorithm, { + device_name: "imxrt1040_w25q64_132mhz", + device_type: DeviceType::Onchip, + flash_address: Algorithm::flash_address() as _, + flash_size: Algorithm::flash_size_bytes() as _, + // We support page crossings. Suggest a larger page + // size so that probe-rs places larger buffers into + // RAM per programming operation, reducing overhead. + page_size: 4096, + empty_value: 0xFF, + program_time_out: 1000, + erase_time_out: 2000, + sectors: [{ + size: Algorithm::sector_size_bytes() as u32, + address: 0x0, + }] +}); |
