diff options
| -rw-r--r-- | .cargo/1010evk.toml | 14 | ||||
| -rw-r--r-- | Cargo.lock | 37 | ||||
| -rw-r--r-- | Cargo.toml | 2 | ||||
| -rw-r--r-- | imxrt1010/src/lib.rs | 37 | ||||
| -rw-r--r-- | imxrt1010evk/src/main.rs | 3 | ||||
| -rw-r--r-- | src/imxrt10xx.rs | 5 | ||||
| -rw-r--r-- | templates/1010evk.yaml | 56 |
7 files changed, 133 insertions, 21 deletions
diff --git a/.cargo/1010evk.toml b/.cargo/1010evk.toml new file mode 100644 index 0000000..0effc9a --- /dev/null +++ b/.cargo/1010evk.toml @@ -0,0 +1,14 @@ +[build] +target = "thumbv7em-none-eabi" + +[target.'cfg(all(target_os = "none", target_arch = "arm"))'] +rustflags = [ + "-Clink-arg=-nmagic", + "-Clink-arg=-Tlink.x", + "-Clink-arg=-Tmemory.x", + "-Clink-arg=-Tdefmt.x", +] +runner = "target-gen test templates/1010evk.yaml target/1010evk.yaml --protocol=swd --chip=mimxrt1010" + +[env] +DEFMT_LOG="off" @@ -129,7 +129,7 @@ checksum = "cf0040922d40f085f9b4902ed60479bcc93389a59c253f3f715cc42cfc1ff1ee" [[package]] name = "imxrt-drivers-ccm-10xx" version = "0.1.0" -source = "git+https://git.mciantyre.dev/imxrt-drivers#90693d06c183f77a5aa2de3f7ab0bed4bd213c45" +source = "git+https://git.mciantyre.dev/imxrt-drivers#55c6e1116800fd27f1ca447040beae6dad14e960" 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#90693d06c183f77a5aa2de3f7ab0bed4bd213c45" +source = "git+https://git.mciantyre.dev/imxrt-drivers#55c6e1116800fd27f1ca447040beae6dad14e960" 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#90693d06c183f77a5aa2de3f7ab0bed4bd213c45" +source = "git+https://git.mciantyre.dev/imxrt-drivers#55c6e1116800fd27f1ca447040beae6dad14e960" 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#90693d06c183f77a5aa2de3f7ab0bed4bd213c45" +source = "git+https://git.mciantyre.dev/imxrt-drivers#55c6e1116800fd27f1ca447040beae6dad14e960" 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#90693d06c183f77a5aa2de3f7ab0bed4bd213c45" +source = "git+https://git.mciantyre.dev/imxrt-drivers#55c6e1116800fd27f1ca447040beae6dad14e960" 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#90693d06c183f77a5aa2de3f7ab0bed4bd213c45" +source = "git+https://git.mciantyre.dev/imxrt-drivers#55c6e1116800fd27f1ca447040beae6dad14e960" 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#90693d06c183f77a5aa2de3f7ab0bed4bd213c45" +source = "git+https://git.mciantyre.dev/imxrt-drivers#55c6e1116800fd27f1ca447040beae6dad14e960" 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#90693d06c183f77a5aa2de3f7ab0bed4bd213c45" +source = "git+https://git.mciantyre.dev/imxrt-drivers#55c6e1116800fd27f1ca447040beae6dad14e960" 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#90693d06c183f77a5aa2de3f7ab0bed4bd213c45" +source = "git+https://git.mciantyre.dev/imxrt-drivers#55c6e1116800fd27f1ca447040beae6dad14e960" 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#90693d06c183f77a5aa2de3f7ab0bed4bd213c45" +source = "git+https://git.mciantyre.dev/imxrt-drivers#55c6e1116800fd27f1ca447040beae6dad14e960" 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#90693d06c183f77a5aa2de3f7ab0bed4bd213c45" +source = "git+https://git.mciantyre.dev/imxrt-drivers#55c6e1116800fd27f1ca447040beae6dad14e960" 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#90693d06c183f77a5aa2de3f7ab0bed4bd213c45" +source = "git+https://git.mciantyre.dev/imxrt-drivers#55c6e1116800fd27f1ca447040beae6dad14e960" 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#90693d06c183f77a5aa2de3f7ab0bed4bd213c45" +source = "git+https://git.mciantyre.dev/imxrt-drivers#55c6e1116800fd27f1ca447040beae6dad14e960" 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#90693d06c183f77a5aa2de3f7ab0bed4bd213c45" +source = "git+https://git.mciantyre.dev/imxrt-drivers#55c6e1116800fd27f1ca447040beae6dad14e960" dependencies = [ "ral-registers", ] @@ -249,6 +249,7 @@ dependencies = [ "imxrt-drivers-dcdc", "imxrt-drivers-flexspi", "imxrt-drivers-gpc-11xx", + "imxrt-drivers-iomuxc-10xx", "imxrt-drivers-iomuxc-11xx", "imxrt-drivers-pmu-11xx", "imxrt-drivers-rtwdog", @@ -267,7 +268,7 @@ dependencies = [ [[package]] name = "imxrt1010" version = "0.1.0" -source = "git+https://git.mciantyre.dev/imxrt-drivers#90693d06c183f77a5aa2de3f7ab0bed4bd213c45" +source = "git+https://git.mciantyre.dev/imxrt-drivers#55c6e1116800fd27f1ca447040beae6dad14e960" dependencies = [ "cortex-m", "imxrt-drivers-ccm-10xx", @@ -306,7 +307,7 @@ dependencies = [ [[package]] name = "imxrt1040" version = "0.1.0" -source = "git+https://git.mciantyre.dev/imxrt-drivers#90693d06c183f77a5aa2de3f7ab0bed4bd213c45" +source = "git+https://git.mciantyre.dev/imxrt-drivers#55c6e1116800fd27f1ca447040beae6dad14e960" dependencies = [ "cortex-m", "imxrt-drivers-ccm-10xx", @@ -347,7 +348,7 @@ dependencies = [ [[package]] name = "imxrt1160" version = "0.1.0" -source = "git+https://git.mciantyre.dev/imxrt-drivers#90693d06c183f77a5aa2de3f7ab0bed4bd213c45" +source = "git+https://git.mciantyre.dev/imxrt-drivers#55c6e1116800fd27f1ca447040beae6dad14e960" dependencies = [ "cortex-m", "imxrt-drivers-ccm-11xx", @@ -386,7 +387,7 @@ dependencies = [ [[package]] name = "imxrt1170" version = "0.1.0" -source = "git+https://git.mciantyre.dev/imxrt-drivers#90693d06c183f77a5aa2de3f7ab0bed4bd213c45" +source = "git+https://git.mciantyre.dev/imxrt-drivers#55c6e1116800fd27f1ca447040beae6dad14e960" dependencies = [ "cortex-m", "imxrt-drivers-ccm-11xx", @@ -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-10xx = { workspace = true } imxrt-drivers-iomuxc-11xx = { workspace = true } imxrt-drivers-dcdc = { workspace = true } imxrt-drivers-pmu-11xx = { workspace = true } @@ -26,6 +27,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-10xx = { 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" } diff --git a/imxrt1010/src/lib.rs b/imxrt1010/src/lib.rs index 820e51f..873dd58 100644 --- a/imxrt1010/src/lib.rs +++ b/imxrt1010/src/lib.rs @@ -2,7 +2,8 @@ #![no_std] pub use imxrt_flash_algos::*; -use imxrt1010::{ccm, dcdc, instances}; +use imxrt1010::{ccm, dcdc, instances, iomuxc}; +use ral_registers as ral; pub struct Imxrt1010; impl imxrt10xx::Imxrt10xx for Imxrt1010 { @@ -16,6 +17,9 @@ impl imxrt10xx::Imxrt10xx for Imxrt1010 { const FLEXSPI_FIFO_CAPACITY_BYTES: usize = 128; + type IOMUXC = imxrt1010::iomuxc::Instance; + const IOMUXC_INSTANCE: Self::IOMUXC = unsafe { instances::iomuxc() }; + fn configure_clocks(ccm: ccm::CCM, ccm_analog: ccm::CCM_ANALOG, dcdc: dcdc::Instance) { dcdc::set_target_vdd_soc(dcdc, 1250); @@ -23,11 +27,40 @@ impl imxrt10xx::Imxrt10xx for Imxrt1010 { ccm::pll3::restart(ccm_analog); - ccm::flexspi1_clk::set_divider(ccm, 4); + ccm::flexspi1_clk::set_divider(ccm, 8); ccm::flexspi1_clk::set_selection(ccm, ccm::flexspi1_clk::Selection::Pll3); ccm::clock_gate::set(ccm, ccm::gates::FLEXSPI, true.into()); } + + fn configure_pins(iomuxc: Self::IOMUXC) { + use iomuxc::{pad, select_input}; + + ral::write_reg!(iomuxc, iomuxc, SW_MUX_CTL_PAD[pad::GPIO_SD_12], MUX_MODE: 0, SION: 1); // DQS + ral::write_reg!(iomuxc, iomuxc, SW_MUX_CTL_PAD[pad::GPIO_SD_06], MUX_MODE: 0, SION: 0); + ral::write_reg!(iomuxc, iomuxc, SW_MUX_CTL_PAD[pad::GPIO_SD_05], MUX_MODE: 0, SION: 0); + ral::write_reg!(iomuxc, iomuxc, SW_MUX_CTL_PAD[pad::GPIO_SD_10], MUX_MODE: 0, SION: 1); // SCK + ral::write_reg!(iomuxc, iomuxc, SW_MUX_CTL_PAD[pad::GPIO_SD_09], MUX_MODE: 0, SION: 0); + ral::write_reg!(iomuxc, iomuxc, SW_MUX_CTL_PAD[pad::GPIO_SD_07], MUX_MODE: 0, SION: 0); + ral::write_reg!(iomuxc, iomuxc, SW_MUX_CTL_PAD[pad::GPIO_SD_08], MUX_MODE: 0, SION: 0); + ral::write_reg!(iomuxc, iomuxc, SW_MUX_CTL_PAD[pad::GPIO_SD_11], MUX_MODE: 0, SION: 0); + + ral::write_reg!(iomuxc, iomuxc, SW_PAD_CTL_PAD[pad::GPIO_SD_12], PUE: 1, PKE: 1, SPEED: MEDIUM_100MHZ, DSE: R0, PUS: PD_100K_OHM); // DQS + ral::write_reg!(iomuxc, iomuxc, SW_PAD_CTL_PAD[pad::GPIO_SD_06], PUE: 0, PKE: 0, SPEED: MEDIUM_100MHZ, DSE: R0); + ral::write_reg!(iomuxc, iomuxc, SW_PAD_CTL_PAD[pad::GPIO_SD_05], PUE: 0, PKE: 0, SPEED: MEDIUM_100MHZ, DSE: R0); + ral::write_reg!(iomuxc, iomuxc, SW_PAD_CTL_PAD[pad::GPIO_SD_10], PUE: 0, PKE: 0, SPEED: MEDIUM_100MHZ, DSE: R0); + ral::write_reg!(iomuxc, iomuxc, SW_PAD_CTL_PAD[pad::GPIO_SD_09], PUE: 0, PKE: 0, SPEED: MEDIUM_100MHZ, DSE: R0); + ral::write_reg!(iomuxc, iomuxc, SW_PAD_CTL_PAD[pad::GPIO_SD_07], PUE: 0, PKE: 0, SPEED: MEDIUM_100MHZ, DSE: R0); + ral::write_reg!(iomuxc, iomuxc, SW_PAD_CTL_PAD[pad::GPIO_SD_08], PUE: 0, PKE: 0, SPEED: MEDIUM_100MHZ, DSE: R0); + ral::write_reg!(iomuxc, iomuxc, SW_PAD_CTL_PAD[pad::GPIO_SD_11], PUE: 0, PKE: 0, SPEED: MEDIUM_100MHZ, DSE: R0); + + ral::write_reg!( + iomuxc, + iomuxc, + SELECT_INPUT[select_input::FLEXSPI_DQS_FA], + 1 + ); + } } pub type Algorithm<const FLASH_SIZE_BYTES: usize> = diff --git a/imxrt1010evk/src/main.rs b/imxrt1010evk/src/main.rs index 8e8aaaf..805bf09 100644 --- a/imxrt1010evk/src/main.rs +++ b/imxrt1010evk/src/main.rs @@ -13,7 +13,8 @@ flash_algorithm::algorithm!(Algorithm, { // 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: Algorithm::sector_size_bytes() as _, + // page_size: Algorithm::sector_size_bytes() as _, + page_size: 256, empty_value: 0xFF, program_time_out: 1000, erase_time_out: 2000, diff --git a/src/imxrt10xx.rs b/src/imxrt10xx.rs index 042574c..d107edc 100644 --- a/src/imxrt10xx.rs +++ b/src/imxrt10xx.rs @@ -14,7 +14,11 @@ pub trait Imxrt10xx: 'static { const FLEXSPI_FIFO_CAPACITY_BYTES: usize; + type IOMUXC; + const IOMUXC_INSTANCE: Self::IOMUXC; + fn configure_clocks(ccm: ccm::Instance, ccm_analog: ccm_analog::Instance, dcdc: dcdc::Instance); + fn configure_pins(iomuxc: Self::IOMUXC); } pub struct Algorithm<C: Imxrt10xx, const FLASH_SIZE_BYTES: usize>(PhantomData<C>); @@ -33,6 +37,7 @@ impl<C: Imxrt10xx, const FLASH_SIZE_BYTES: usize> Algorithm<C, FLASH_SIZE_BYTES> } pub fn initialize() -> Self { + C::configure_pins(C::IOMUXC_INSTANCE); C::configure_clocks(C::CCM_INSTANCE, C::CCM_ANALOG_INSTANCE, C::DCDC_INSTANCE); crate::flash::initialize( C::FLEXSPI1_INSTANCE, diff --git a/templates/1010evk.yaml b/templates/1010evk.yaml new file mode 100644 index 0000000..593c7ee --- /dev/null +++ b/templates/1010evk.yaml @@ -0,0 +1,56 @@ +name: MIMXRT1010 series +manufacturer: + id: 0x15 + cc: 0x0 +variants: + - name: MIMXRT1010 + cores: + - name: main + type: armv7em + core_access_options: !Arm + ap: !v1 0 + memory_map: + - !Ram + name: DTCM + range: + start: 0x20000000 + end: 0x20008000 + access: + boot: false + cores: + - main + - !Nvm + name: FLEXSPI1 + range: + start: 0x60000000 + end: 0x61000000 + access: + boot: true + cores: + - main + flash_algorithms: + - imxrt1010evk +flash_algorithms: + - name: imxrt1010evk + description: A flash algorithm under test + cores: + - main + default: true + instructions: sLUURgxNSEYAIUFRQBlBYIFgwWAQRgDwK/oAKATQSUZJGYhgzGCwvUhGQBkBIUFgAkgBYAAgsL0EAAAACAYAQBC1BEYAIADwE/oNSUpGURgAKALQiGDMYALgiWgAKQ3QCEkBIgpgBkpLRpxYTGCaGFNoi2CTaMtg0mgKYRC9wEYEAAAAAEAAILC1DUhJRgEiClAIGAAkRGCEYMRgBeAgRgDwFvoA8I75BBkA8Iv5BUYA8I75aEOEQvHTACCwvcBGBAAAAPi1BEYXTkhGAieHUYAZACFBYIFgwWAA8HP5AUYgRgDwD/pIRgApAtCAGQMhFeCAGQEhQWAA8GT5BUYA8Gf5aEOgQgfZSEaAGUdgIEYA8N75ACAF4EhGgBkEIYFgxGABIAGw8L0EAAAA/rUORgdGNExIRgMlBVEAGQAhQWCBYMFguAcE0EhGABkDIYFgCuBIRgAZASFBYLAHC9BIRgAZAyGBYDdGSEYAGcdgASYwRgOw8L0CkkhGABkCIUFgAPAg+QGQAPAj+QGZSEO4QhTZSEYAGUVgJUb0GQDwEvkBkADwFfkBmUhDhEIK2UhGQBkEIYFgJ0YsRtXnSEYAGQQhxOdIRkAZBCFBYLAIAZAAJjxGNUYJ4CBoQBwK0QKZAckCkQHEAPBf+W0cAZiFQvLTvedIRgNMABkFIYFgfxmy58BGBAAAAP61FUYERjVKSEYEJ4dQgBgAJkZghmDGYKAHW9GIBwXQSEaAGAMhgWDEYFPgApFIRoAYASFBYADwwfgBkADwxPgBmUhDoEIe2UhGJElAGAIhQWACmAAZAZAA8LD4AJAA8LP4AZkAmlBDgUIU2UhGG0qAGIdgwWAA8KH4BUYA8KT4BEZsQybgSEYUSUAYAyGBYAKZwWAe4EhGEElAGEdg8EOBAGIYApmJCEAcFB0rHYhCCtItaFJoqkIiRh1G9NBIRgZJQBgGIa7nSEYESUAYBSFBYAGcIEYDsPC9wEYEAAAA/rUWRg1GBEYtT0hGBSHBUcAZACFBYIFgwWCgBwTQSEbAGQMhgWAK4EhGwBkBIUFgqAcK0EhGwBkDIYFgLEZIRsAZxGABIAOw8L1IRsAZAyFBYADwQ/gCkADwRvgCmUhDoEIW2UhGwBkEIQCRQWAoGQKQAPAz+AGQAPA2+AKaAZlIQ4JCCdlIRsAZBCGBYBRG1edIRsAZBCHE50hGwBkAmUFgYR4AIAJGqkLM0kwcUhxJeLFCIUb30EhGwBkFIbHnBAAAAA8gAAIDSUpoEgICQAh4EENwR8BG4A8A8AFIAGhwR8BGEAAAEAFIAGhwR8BGFAAAEAZIQWj/IhFCBtAFSQpoACBSHADQCGhwRwBocEcoAAAQABAAEP8gAAIDSQloAUAAIEAaSEFwR8BGBBAAEBC1EUlKaP8jGkIG0A9JCmhSHArQC2gBIQ/gC2gAIQMig0IA2BFGCEYQvQlKE2gDIQhMo0IF0VNoAiEDIoNCANgRRsiyEL3ARigAABAAEAAQBDAAANvlsVEBRgEgAykJ2IgABaEIWAhJCGAISQpoACAAKvvQcEfARgAAAAACAAAAAQAAAAAAAAAE5QFAAOQBQAJIAWgAKfzQcEfARgDkAUADSAEhAWADSAFoACn80HBHDOUBQADkAUADSQhgA0gBaAAp/NBwR8BGCOUBQADkAUAESAEhAWAESAFoACn80AAgcEfARhTlAUAA5AFAACIDCYtCLNMDCotCEdMAI5xGTuADRgtDPNQAIkMIi0Ix0wMJi0Ic0wMKi0IB05RGP+DDCYtCAdPLAcAaUkGDCYtCAdOLAcAaUkFDCYtCAdNLAcAaUkEDCYtCAdMLAcAaUkHDCItCAdPLAMAaUkGDCItCAdOLAMAaUkFDCItCAdNLAMAaUkFBGgDSAUZSQRBGcEdd4MoPANBJQgMQANNAQlNAnEYAIgMJi0It0wMKi0IS04kB/CISugMKi0IM04kBkhGLQgjTiQGSEYtCBNOJATrQkhEA4IkJwwmLQgHTywHAGlJBgwmLQgHTiwHAGlJBQwmLQgHTSwHAGlJBAwmLQgHTCwHAGlJBwwiLQgHTywDAGlJBgwiLQgHTiwDAGlJB2dJDCItCAdNLAMAaUkFBGgDSAUZSQRBGY0ZbEAHTQEIAKwDVSUJwR2NGWxAA00BCAbUAIMBGwEYCvQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + pc_init: 0x0 + pc_uninit: 0x0 + pc_program_page: 0x0 + pc_erase_sector: 0x0 + pc_erase_all: 0x0 + data_section_offset: 0x0 + flash_properties: + address_range: + start: 0x0 + end: 0x0 + page_size: 0x0 + erased_byte_value: 0x0 + program_page_timeout: 0x0 + erase_sector_timeout: 0x0 + sectors: + - size: 0x0 + address: 0x0 |
