aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan McIntyre <me@mciantyre.dev>2025-12-17 19:33:41 -0500
committerIan McIntyre <me@mciantyre.dev>2025-12-17 21:28:52 -0500
commitfa5b0daeb02bb1775462ac57b353589d983fa2bb (patch)
treeef71ac3c591a103df61dfe5c75c911065387d662
parent53f0e5d382b346aa8b8c5cf221fa3b2464ef4617 (diff)
Configure FlexSPI1 pins on 11xx MCUsHEADmain
-rw-r--r--Cargo.lock37
-rw-r--r--Cargo.toml2
-rw-r--r--README.md5
-rw-r--r--imxrt1160/src/lib.rs1
-rw-r--r--imxrt1170/src/lib.rs1
-rw-r--r--imxrt1170evk/examples/smoke.rs4
-rw-r--r--src/imxrt11xx.rs33
7 files changed, 64 insertions, 19 deletions
diff --git a/Cargo.lock b/Cargo.lock
index fad3e71..40c6096 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -129,7 +129,7 @@ checksum = "cf0040922d40f085f9b4902ed60479bcc93389a59c253f3f715cc42cfc1ff1ee"
[[package]]
name = "imxrt-drivers-ccm-10xx"
version = "0.1.0"
-source = "git+https://git.mciantyre.dev/imxrt-drivers#76199f21616ad86cf68f3b063c1ce23c6fc5a52f"
+source = "git+https://git.mciantyre.dev/imxrt-drivers#90693d06c183f77a5aa2de3f7ab0bed4bd213c45"
dependencies = [
"ral-registers",
]
@@ -137,7 +137,7 @@ dependencies = [
[[package]]
name = "imxrt-drivers-ccm-11xx"
version = "0.1.0"
-source = "git+https://git.mciantyre.dev/imxrt-drivers#76199f21616ad86cf68f3b063c1ce23c6fc5a52f"
+source = "git+https://git.mciantyre.dev/imxrt-drivers#90693d06c183f77a5aa2de3f7ab0bed4bd213c45"
dependencies = [
"ral-registers",
]
@@ -145,7 +145,7 @@ dependencies = [
[[package]]
name = "imxrt-drivers-dcdc"
version = "0.1.0"
-source = "git+https://git.mciantyre.dev/imxrt-drivers#76199f21616ad86cf68f3b063c1ce23c6fc5a52f"
+source = "git+https://git.mciantyre.dev/imxrt-drivers#90693d06c183f77a5aa2de3f7ab0bed4bd213c45"
dependencies = [
"ral-registers",
]
@@ -153,7 +153,7 @@ dependencies = [
[[package]]
name = "imxrt-drivers-edma"
version = "0.1.0"
-source = "git+https://git.mciantyre.dev/imxrt-drivers#76199f21616ad86cf68f3b063c1ce23c6fc5a52f"
+source = "git+https://git.mciantyre.dev/imxrt-drivers#90693d06c183f77a5aa2de3f7ab0bed4bd213c45"
dependencies = [
"ral-registers",
]
@@ -161,7 +161,7 @@ dependencies = [
[[package]]
name = "imxrt-drivers-enet"
version = "0.1.0"
-source = "git+https://git.mciantyre.dev/imxrt-drivers#76199f21616ad86cf68f3b063c1ce23c6fc5a52f"
+source = "git+https://git.mciantyre.dev/imxrt-drivers#90693d06c183f77a5aa2de3f7ab0bed4bd213c45"
dependencies = [
"ral-registers",
]
@@ -169,7 +169,7 @@ dependencies = [
[[package]]
name = "imxrt-drivers-flexspi"
version = "0.1.0"
-source = "git+https://git.mciantyre.dev/imxrt-drivers#76199f21616ad86cf68f3b063c1ce23c6fc5a52f"
+source = "git+https://git.mciantyre.dev/imxrt-drivers#90693d06c183f77a5aa2de3f7ab0bed4bd213c45"
dependencies = [
"ral-registers",
]
@@ -177,7 +177,7 @@ dependencies = [
[[package]]
name = "imxrt-drivers-gpc-11xx"
version = "0.1.0"
-source = "git+https://git.mciantyre.dev/imxrt-drivers#76199f21616ad86cf68f3b063c1ce23c6fc5a52f"
+source = "git+https://git.mciantyre.dev/imxrt-drivers#90693d06c183f77a5aa2de3f7ab0bed4bd213c45"
dependencies = [
"ral-registers",
]
@@ -185,7 +185,7 @@ dependencies = [
[[package]]
name = "imxrt-drivers-gpio"
version = "0.1.0"
-source = "git+https://git.mciantyre.dev/imxrt-drivers#76199f21616ad86cf68f3b063c1ce23c6fc5a52f"
+source = "git+https://git.mciantyre.dev/imxrt-drivers#90693d06c183f77a5aa2de3f7ab0bed4bd213c45"
dependencies = [
"ral-registers",
]
@@ -193,7 +193,7 @@ dependencies = [
[[package]]
name = "imxrt-drivers-iomuxc-10xx"
version = "0.1.0"
-source = "git+https://git.mciantyre.dev/imxrt-drivers#76199f21616ad86cf68f3b063c1ce23c6fc5a52f"
+source = "git+https://git.mciantyre.dev/imxrt-drivers#90693d06c183f77a5aa2de3f7ab0bed4bd213c45"
dependencies = [
"ral-registers",
]
@@ -201,7 +201,7 @@ dependencies = [
[[package]]
name = "imxrt-drivers-iomuxc-11xx"
version = "0.1.0"
-source = "git+https://git.mciantyre.dev/imxrt-drivers#76199f21616ad86cf68f3b063c1ce23c6fc5a52f"
+source = "git+https://git.mciantyre.dev/imxrt-drivers#90693d06c183f77a5aa2de3f7ab0bed4bd213c45"
dependencies = [
"ral-registers",
]
@@ -209,7 +209,7 @@ dependencies = [
[[package]]
name = "imxrt-drivers-lpspi"
version = "0.1.0"
-source = "git+https://git.mciantyre.dev/imxrt-drivers#76199f21616ad86cf68f3b063c1ce23c6fc5a52f"
+source = "git+https://git.mciantyre.dev/imxrt-drivers#90693d06c183f77a5aa2de3f7ab0bed4bd213c45"
dependencies = [
"ral-registers",
]
@@ -217,7 +217,7 @@ dependencies = [
[[package]]
name = "imxrt-drivers-pit"
version = "0.1.0"
-source = "git+https://git.mciantyre.dev/imxrt-drivers#76199f21616ad86cf68f3b063c1ce23c6fc5a52f"
+source = "git+https://git.mciantyre.dev/imxrt-drivers#90693d06c183f77a5aa2de3f7ab0bed4bd213c45"
dependencies = [
"ral-registers",
]
@@ -225,7 +225,7 @@ dependencies = [
[[package]]
name = "imxrt-drivers-pmu-11xx"
version = "0.1.0"
-source = "git+https://git.mciantyre.dev/imxrt-drivers#76199f21616ad86cf68f3b063c1ce23c6fc5a52f"
+source = "git+https://git.mciantyre.dev/imxrt-drivers#90693d06c183f77a5aa2de3f7ab0bed4bd213c45"
dependencies = [
"ral-registers",
]
@@ -233,7 +233,7 @@ dependencies = [
[[package]]
name = "imxrt-drivers-rtwdog"
version = "0.1.0"
-source = "git+https://git.mciantyre.dev/imxrt-drivers#76199f21616ad86cf68f3b063c1ce23c6fc5a52f"
+source = "git+https://git.mciantyre.dev/imxrt-drivers#90693d06c183f77a5aa2de3f7ab0bed4bd213c45"
dependencies = [
"ral-registers",
]
@@ -249,6 +249,7 @@ dependencies = [
"imxrt-drivers-dcdc",
"imxrt-drivers-flexspi",
"imxrt-drivers-gpc-11xx",
+ "imxrt-drivers-iomuxc-11xx",
"imxrt-drivers-pmu-11xx",
"imxrt-drivers-rtwdog",
"ral-registers",
@@ -266,7 +267,7 @@ dependencies = [
[[package]]
name = "imxrt1010"
version = "0.1.0"
-source = "git+https://git.mciantyre.dev/imxrt-drivers#76199f21616ad86cf68f3b063c1ce23c6fc5a52f"
+source = "git+https://git.mciantyre.dev/imxrt-drivers#90693d06c183f77a5aa2de3f7ab0bed4bd213c45"
dependencies = [
"cortex-m",
"imxrt-drivers-ccm-10xx",
@@ -305,7 +306,7 @@ dependencies = [
[[package]]
name = "imxrt1040"
version = "0.1.0"
-source = "git+https://git.mciantyre.dev/imxrt-drivers#76199f21616ad86cf68f3b063c1ce23c6fc5a52f"
+source = "git+https://git.mciantyre.dev/imxrt-drivers#90693d06c183f77a5aa2de3f7ab0bed4bd213c45"
dependencies = [
"cortex-m",
"imxrt-drivers-ccm-10xx",
@@ -346,7 +347,7 @@ dependencies = [
[[package]]
name = "imxrt1160"
version = "0.1.0"
-source = "git+https://git.mciantyre.dev/imxrt-drivers#76199f21616ad86cf68f3b063c1ce23c6fc5a52f"
+source = "git+https://git.mciantyre.dev/imxrt-drivers#90693d06c183f77a5aa2de3f7ab0bed4bd213c45"
dependencies = [
"cortex-m",
"imxrt-drivers-ccm-11xx",
@@ -385,7 +386,7 @@ dependencies = [
[[package]]
name = "imxrt1170"
version = "0.1.0"
-source = "git+https://git.mciantyre.dev/imxrt-drivers#76199f21616ad86cf68f3b063c1ce23c6fc5a52f"
+source = "git+https://git.mciantyre.dev/imxrt-drivers#90693d06c183f77a5aa2de3f7ab0bed4bd213c45"
dependencies = [
"cortex-m",
"imxrt-drivers-ccm-11xx",
diff --git a/Cargo.toml b/Cargo.toml
index a961bff..468fd20 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -13,6 +13,7 @@ ral-registers = { workspace = true }
imxrt-drivers-rtwdog = { workspace = true }
imxrt-drivers-ccm-10xx = { workspace = true }
imxrt-drivers-ccm-11xx = { workspace = true }
+imxrt-drivers-iomuxc-11xx = { workspace = true }
imxrt-drivers-dcdc = { workspace = true }
imxrt-drivers-pmu-11xx = { workspace = true }
imxrt-drivers-gpc-11xx = { workspace = true }
@@ -25,6 +26,7 @@ imxrt-drivers-flexspi = { git = "https://git.mciantyre.dev/imxrt-drivers" }
imxrt-drivers-rtwdog = { git = "https://git.mciantyre.dev/imxrt-drivers" }
imxrt-drivers-ccm-10xx = { git = "https://git.mciantyre.dev/imxrt-drivers" }
imxrt-drivers-ccm-11xx = { git = "https://git.mciantyre.dev/imxrt-drivers" }
+imxrt-drivers-iomuxc-11xx = { git = "https://git.mciantyre.dev/imxrt-drivers" }
imxrt-drivers-dcdc = { git = "https://git.mciantyre.dev/imxrt-drivers" }
imxrt-drivers-gpc-11xx = { git = "https://git.mciantyre.dev/imxrt-drivers" }
imxrt-drivers-pmu-11xx = { git = "https://git.mciantyre.dev/imxrt-drivers" }
diff --git a/README.md b/README.md
index e52f598..8085985 100644
--- a/README.md
+++ b/README.md
@@ -60,4 +60,9 @@ Eventually, I might try to define a universal flash programming algorithm,
one that works across different flash parts. But for now, they're separate by
manufacturer.
+FlexSPI pin muxing assumes you're using the boot ROM's primary FlexSPI1
+interface. In fact, all algorithms assume you're using FlexSPI1! If your board
+is doing something different, then you'll need to manually change the pin muxing
+/ FlexSPI instance. There's no board-by-board configuration.
+
License: APACHE-2.0
diff --git a/imxrt1160/src/lib.rs b/imxrt1160/src/lib.rs
index 33b0de9..d494c8a 100644
--- a/imxrt1160/src/lib.rs
+++ b/imxrt1160/src/lib.rs
@@ -13,6 +13,7 @@ impl imxrt11xx::Imxrt11xx for Imxrt1160 {
unsafe { imxrt1160::instances::gpc_cpu_mode_ctrl0() };
const PMU_INSTANCE: imxrt1160::pmu::Instance = unsafe { imxrt1160::instances::pmu() };
const RTWDOG_INSTANCE: imxrt1160::rtwdog::Instance = unsafe { imxrt1160::instances::wdog3() };
+ const IOMUXC_INSTANCE: imxrt1160::iomuxc::Instance = unsafe { imxrt1160::instances::iomuxc() };
const FLEXSPI_FIFO_CAPACITY_BYTES: usize = 128;
}
diff --git a/imxrt1170/src/lib.rs b/imxrt1170/src/lib.rs
index 89469b1..7a78556 100644
--- a/imxrt1170/src/lib.rs
+++ b/imxrt1170/src/lib.rs
@@ -13,6 +13,7 @@ impl imxrt11xx::Imxrt11xx for Imxrt1170 {
unsafe { imxrt1170::instances::gpc_cpu_mode_ctrl0() };
const PMU_INSTANCE: imxrt1170::pmu::Instance = unsafe { imxrt1170::instances::pmu() };
const RTWDOG_INSTANCE: imxrt1170::rtwdog::Instance = unsafe { imxrt1170::instances::wdog3() };
+ const IOMUXC_INSTANCE: imxrt1170::iomuxc::Instance = unsafe { imxrt1170::instances::iomuxc() };
const FLEXSPI_FIFO_CAPACITY_BYTES: usize = 256;
}
diff --git a/imxrt1170evk/examples/smoke.rs b/imxrt1170evk/examples/smoke.rs
index df91789..63428ac 100644
--- a/imxrt1170evk/examples/smoke.rs
+++ b/imxrt1170evk/examples/smoke.rs
@@ -14,7 +14,9 @@ fn main() -> ! {
let mut sector = [0_u8; Algorithm::sector_size_bytes()];
is25wp.flash_read(0x400, &mut sector[..4]);
- defmt::assert!(0x42464346 == u32::from_le_bytes(sector[..4].try_into().unwrap()));
+ if 0x42464346 != u32::from_le_bytes(sector[..4].try_into().unwrap()) {
+ defmt::warn!("No FCB found.");
+ }
is25wp.flash_erase_sector(LAST_SECTOR + 256);
diff --git a/src/imxrt11xx.rs b/src/imxrt11xx.rs
index ed83668..0fc3ae1 100644
--- a/src/imxrt11xx.rs
+++ b/src/imxrt11xx.rs
@@ -3,11 +3,42 @@ use core::{marker::PhantomData, num::NonZero};
use imxrt_drivers_ccm_11xx::ral_11xx as ccm;
use imxrt_drivers_flexspi as flexspi;
use imxrt_drivers_gpc_11xx::cpu_mode_ctrl as gpc_cpu;
+use imxrt_drivers_iomuxc_11xx::iomuxc;
use imxrt_drivers_pmu_11xx as pmu;
use imxrt_drivers_rtwdog as rtwdog;
+use ral_registers as ral;
+
const FLEXSPI1_BASE: u32 = 0x3000_0000;
+/// Assumes the boot ROM's primary FlexSPI1 interface.
+fn configure_pins(iomuxc: iomuxc::Instance) {
+ use iomuxc::select_input::*;
+
+ ral::write_reg!(iomuxc, iomuxc, SW_MUX_CTL_PAD.GPIO_SD_B2[5], MUX_MODE: 1, SION: 1); // DQS
+ ral::write_reg!(iomuxc, iomuxc, SW_MUX_CTL_PAD.GPIO_SD_B2[6], MUX_MODE: 1, SION: 0);
+ ral::write_reg!(iomuxc, iomuxc, SW_MUX_CTL_PAD.GPIO_SD_B2[7], MUX_MODE: 1, SION: 1); // SCK
+ ral::write_reg!(iomuxc, iomuxc, SW_MUX_CTL_PAD.GPIO_SD_B2[8], MUX_MODE: 1, SION: 0);
+ ral::write_reg!(iomuxc, iomuxc, SW_MUX_CTL_PAD.GPIO_SD_B2[9], MUX_MODE: 1, SION: 0);
+ ral::write_reg!(iomuxc, iomuxc, SW_MUX_CTL_PAD.GPIO_SD_B2[10], 1);
+ ral::write_reg!(iomuxc, iomuxc, SW_MUX_CTL_PAD.GPIO_SD_B2[11], 1);
+
+ ral::write_reg!(iomuxc, iomuxc, SW_PAD_CTL_PAD.GPIO_SD_B2[5], PDRV: NORMAL, PULL: PULL_DOWN);
+ ral::write_reg!(iomuxc, iomuxc, SW_PAD_CTL_PAD.GPIO_SD_B2[6], PDRV: NORMAL, PULL: NO_PULL);
+ ral::write_reg!(iomuxc, iomuxc, SW_PAD_CTL_PAD.GPIO_SD_B2[7], PDRV: NORMAL, PULL: NO_PULL);
+ ral::write_reg!(iomuxc, iomuxc, SW_PAD_CTL_PAD.GPIO_SD_B2[8], PDRV: NORMAL, PULL: NO_PULL);
+ ral::write_reg!(iomuxc, iomuxc, SW_PAD_CTL_PAD.GPIO_SD_B2[9], PDRV: NORMAL, PULL: NO_PULL);
+ ral::write_reg!(iomuxc, iomuxc, SW_PAD_CTL_PAD.GPIO_SD_B2[10], PDRV: NORMAL, PULL: NO_PULL);
+ ral::write_reg!(iomuxc, iomuxc, SW_PAD_CTL_PAD.GPIO_SD_B2[11], PDRV: NORMAL, PULL: NO_PULL);
+
+ ral::write_reg!(iomuxc, iomuxc, SELECT_INPUT[FLEXSPI1_I_DQS_FA], 2);
+ ral::write_reg!(iomuxc, iomuxc, SELECT_INPUT[FLEXSPI1_I_IO_FA_0], 1);
+ ral::write_reg!(iomuxc, iomuxc, SELECT_INPUT[FLEXSPI1_I_IO_FA_1], 1);
+ ral::write_reg!(iomuxc, iomuxc, SELECT_INPUT[FLEXSPI1_I_IO_FA_2], 1);
+ ral::write_reg!(iomuxc, iomuxc, SELECT_INPUT[FLEXSPI1_I_IO_FA_3], 1);
+ ral::write_reg!(iomuxc, iomuxc, SELECT_INPUT[FLEXSPI1_I_SCK_FA], 1);
+}
+
/// Establish the core, bus, and FlexSPI
/// clock frequencies.
fn configure_clocks(
@@ -121,6 +152,7 @@ pub trait Imxrt11xx: 'static {
const CCM_PLL_INSTANCE: ccm::pll::Instance;
const GPC_CPU_INSTANCE: gpc_cpu::Instance;
const RTWDOG_INSTANCE: rtwdog::Instance;
+ const IOMUXC_INSTANCE: iomuxc::Instance;
const FLEXSPI_FIFO_CAPACITY_BYTES: usize;
}
@@ -143,6 +175,7 @@ impl<C: Imxrt11xx, F: crate::ImxrtFlashAlgorithm> Algorithm<C, F> {
pub fn initialize() -> Self {
rtwdog::disable(C::RTWDOG_INSTANCE);
+ configure_pins(C::IOMUXC_INSTANCE);
configure_clocks(
C::CCM_INSTANCE,
C::CCM_PLL_INSTANCE,