BREAKING Remove type states from the following drivers:
- FlexPWM
- GPT
- PIT
- LPI2C
- LPUART
- LPSPI
- ADC (10xx)
- SAI
- GPIO, RGPIO
After construction, the type no longer tracks its pins or peripheral instances.
To type check peripheral instances against pins, construct types using
with_pins.
BREAKING The FlexPWM refactor removes dedicated types for Submodules and
Outputs. Users should program directly against the Pwm type.
BREAKING The PIT driver no longer models channels as dedicated objects.
Users should program directly against the Pit type.
BREAKING The ADC driver no longer supports unproven embedded-hal 0.2 traits.
BREAKING Remove the dependency on imxrt-usbd and the usbd module.
Users should select their preferred versions of imxrt-usbd, usb-device,
and other class packages.
BREAKING Update imxrt-rs dependencies that affect the public API:
imxrt-ral0.6iomxrt-iomuxc0.3imxrt-dma0.2
Additionally, update third-party dependencies in the public API:
bitflags2.11
BREAKING Remove deprecated APIs
clko2::Selection::TracClktimer::*PitChanlpspi::Disabled::{set_mode, set_watermark}
BREAKING Change the LPSPI driver:
LpspiError::{Busy, NoData}are removed as possible LPSPI errors.- There is no more
PCS0type state associated with the LPSPI bus. FifoStatushas public members for TX and RX FIFO capacities.
Introduce a hardware chip select and SPI mode into each LPSPI transaction. Add an LPSPI configuration for hardware chip selects.
BREAKING The following peripherals are not available on the 1180. Therefore, they are no longer considered common. However, their APIs are unchanged, and they are still exposed when building with a chip feature.
gpiopitsnvstimer
BREAKING Remove the timer module, including most embedded-hal 0.2 blocking
delay implementations.
BREAKING Upgrade to Rust 2024.
Introduce an imxrt1180 feature to support the RT1180 series.
Add a defmt feature targeting version 0.3. When enabled, select imxrt-hal
types can be formatted with defmt.
Export the SAI driver for 1170 MCUs. Fix SAI FPACK enumerated values. Ensure
SAI tracks configured pins, even if users prefer without_pins.
Add SAI DMA support. DMA targets the lowest-numbered enabled data line for each direction; multiple data lines are not supported by DMA.
0.5.13 2026-03-15
Add OCOTP driver for reading and writing fuses.
Add FlexSPI clock gate locator(s) for 10xx MCUs.
0.5.12 2025-12-10
Add uSDHC clock gates for 10xx and 11xx MCUs.
0.5.11 2025-07-07
Add receive functions to the SAI driver.
The SAI driver would overwrite other configurations in an IOMUXC_GPR register, and it would fail to configure clock directions for SAI instances other than SAI1. This release removes this IOMUXC_GPR interaction. Users should directly use the IOMUXC_GPR to configure their own clocks.
0.5.10 2025-06-14
Add SAI driver, supporting audio transmit, for 1000 series MCUs. 1170 support is unavailable without an imxrt-ral breaking change. Additionally, there are no SAI clock gates implemented for the 1020.
0.5.9 2024-11-24
Correct LPSPI receive operations. Previously, u8 and u16 elements received
by the driver were returned out of order to the user. This release fixes the
ordering. If you were correcting this behavior in application code, you'll need
to remove that behavior before adopting this fix.
Add core::fmt::Debug implementation for TempMon.
0.5.8 2024-11-01
Fix LPUART baud rate computation, ensuring updates to SBR when evaluating other best baud rates. Change how larger LPUART baud rates can be computed.
0.5.7 2024-08-05
Add PLL7 (USB2 PLL) for 1060 MCUs.
0.5.6 2024-07-05
- Add LPSPI low-level clock configuration APIs.
- Add LPSPI
set_peripheral_enableto configure the driver as a SPI peripheral.
When the LPI2C driver concludes a transaction, it ensures that the controller is idle before returning.
0.5.5 2024-05-27
Add embedded-hal 1 implementations for the following drivers:
- GPIO
- LPUART
- LPI2C
Introduce LPSPI improvements:
- Add additional checks for LPSPI frame sizes.
- Rework LPSPI clock settings, initialization, and disable.
- Add
flush()method. - Add
soft_reset()method. - Allow users to change the mode while enabled. Deprecate the corresponding
method on the
Disabledhelper. - Allow users to change the watermark while enabled. Deprecate the corresponding
method on the
Disabledhelper.
Change how the LPSPI driver manages the FIFOs. As a result of this change, the
driver never returns the Busy or NoData errors through the embedded-hal
interfaces. Instead of returning Busy, the driver blocks until there's space in
the FIFO. If the caller provides an empty buffer, then the result is OK.
The LPSPI embedded-hal (0.2) implementations will implicitly flush after blocking I/O. Users can rely on this behavior to synchronize external components.
0.5.4 2023-11-26
Add CCM APIs for configuring FlexIO clocks on 1000 targets.
0.5.3 2023-07-03
Add FlexIO clock gates for all supported 1000 and 1100 targets.
0.5.2 2023-04-26
Add LPSPI API to configure the sample point.
Fix a bug in the LPSPI driver that prevented transfers from reading data back into the caller's buffer. The LPSPI transfer now waits for all data before returning to the caller.
0.5.1 2023-03-07
Add support for i.MX RT 1020 processors. Enable support with the "imxrt1020"
imxrt-hal feature, and separately select your imxrt-ral feature.
Deprecate the clko2::Selection::TracClk item. Prefer the correctly-spelled
variant, clko2::Selection::TraceClk.
Deprecate the following items in the timer module:
timer::BlockingPitChanand constructorfrom_pit_channel.timer::RawCountDownPitChanand constructorfrom_pit_channel.
The type names differ from *PitChain by one letter. Prefer the spellings
without *Chan and *_channel.
0.5.0 2022-01-05
imxrt-hal provides common peripherals for all chips supported by imxrt-ral,
including multi-core 1176 chips. There are about 12 common peripherals that are
expected to work across 10 supported i.MX RT processors.
imxrt-hal now includes extra APIs for the following i.MX RT processors:
- 1010
- 1060
- 1064
- 1170
Note that these extra APIs may not be portable across all i.MX RT processors.
Many drivers are re-written with new interfaces; see the API documentation and
examples for specifics. All drivers maintain their embedded-hal 0.2
implementations, which should help those who are migrating generic firmware
from older imxrt-hal releases.
In order to support more i.MX RT processors, imxrt-hal has new build
requirements. These requirements differ from the 0.4 release. Study the API
documentation to understand how to build and use 0.5 of imxrt-hal.
If you want to try out imxrt-hal on development hardware, the project now
maintains in-tree hardware examples. Consult the repository documentation for
more information on supported hardware, and how to build and flash examples.
This release includes a fix for the LPSPI spurious chip select toggling
(#111). The new LPSPI
driver will assert chip select until all data from a u8/u16/u32
buffer is sent out / received from the device.
The previous master branch, from which other releases were cut, is renamed
to pre-v0.5 in the primary repository. The main branch now represents the
default branch, and it contains the tag for this release.
0.4.5 2021-12-02
You can now configure GPIO inputs to trigger interrupts. See the GPIO documentation for the new API.
The TRNG signals a rand_core custom error code.
0.4.4 2021-04-23
Added calls to set pin muxing in the PWM driver. This fixes a regression in the PWM driver that was introduced in the 0.4 HAL release.
0.4.3 2021-04-12
Two new HAL features, "imxrt1061" and "imxrt1064", let you build the HAL
for iMXRT1061 and iMXRT1064 MCUs, respectively. The features enable the
relevant features in the imxrt-ral register access layer. Use these features
to ensure the best compatibility with your iMXRT processor.
ADC pins may be used as DMA peripherals. Use the AdcSource API to receive
analog data with a DMA transfer.
0.4.2 2020-11-23
- Basic support for the secure real time clock (SRTC) peripheral, which continues to track time while the SNVS low-power domain remains powered.
- Add ADC channels. The channels implement the
embedded-hal::adc::Oneshottrait. - Preliminary support for the TRNG, with an implementation of embedded_hal's
rng::Readtrait. Includes support forrand_core::RngCorebehind the optional"rand_core"feature.
- Ensure that I2C and SPI errors can only be created by the HAL crate, and not by end users.
0.4.1 2020-09-23
- Maintain GPIO input/output configuration when enabling or disabling high-speed mode.
0.4.0 2020-08-29
This release contains numerous breaking HAL changes. See the "Changed" section for more information. The release includes 0.3.1 fixes.
steal()the top-levelPeripheralsobject. Thesteal()method lets users use theimxrt_halas an RTIC device.- DMA
Memcpymay support interrupt handling - A new interface for pad configuration, supported by the
imxrt-iomuxccrate family. See the Changed section for migration information.
-
BREAKING The pad configuration interface has simplified. Users will use the interface exposed by the
imxrt-iomuxccrate family. This section describes how you might update your 0.3 (and earlier) code for the new interface.-
Naming: the
IOMUXCinstance exposes pads with a new naming convention. Previously, member accessed resembledlet peripherals = imxrt_hal::Peripherals::take().unwrap(); peripherals.iomuxc.gpio_ad_b1_02;
Now, IOMUXC member access resembles
peripherals.iomuxc.ad_b1.p02
Generally, remove the "
gpio_" prefix, and replace the second underscore with member access and a "p" symbol. -
Pad Types: The interface simplifies the pad types, removing the alternate type state. Usages resembling
use imxrt_hal as hal; type MyPin = hal::iomuxc::gpio::GPIO_AD_B0_12<hal::iomuxc::Alt5>;
can be simply expressed as
type MyPin = hal::iomuxc::ad_b0::AD_B0_12;
Note the stuttering convention of
pad_group::pad_group_offsetto reference pad types. -
No alternate transition: there are no
altX()methods. Usage resemblinglet mut uart = uarts.uart2.init( peripherals.iomuxc.gpio_ad_b1_02.alt2(), peripherals.iomuxc.gpio_ad_b1_03.alt2(), BAUD, ).unwrap()
should drop the
altX()calls (after renaming the pads).let mut uart = uarts.uart2.init( peripherals.iomuxc.ad_b1.p02, peripherals.iomuxc.ad_b1.p03, BAUD, ).unwrap();
-
Type Tags: all custom type-level constants, like
imxrt_hal::uart::module::_1are nowtypenumconstants. There are no peripheral-specific constants. Usage resemblinguse imxrt_hal::uart; type MyTX = uart::Tx<uart::module::_3>;
should update to
use imxrt_hal::uart; use imxrt_hal::iomuxc; type MyTX = uart::Tx<iomuxc::consts::U3>;
-
GPIO: the new IOMUXC driver results in a simpler GPIO interface. There is now a single GPIO type that wraps an IOMUXC pad. Any GPIO type, like
use imxrt_hal as hal; type HardwareFlag = hal::gpio::GPIO1IO26<hal::gpio::GPIO1, hal::gpio::Output>;
should change to
type HardwareFlag = hal::gpio::GPIO<hal::iomuxc::ad_b1::AD_B1_10, hal::gpio::Output>;
The new GPIO types expose a no-return
toggle()method, which shadows an embedded_hal trait method. If you notice compilation issues surroundingtoggle(), try removingunwrap()calls:led.toggle().unwrap() // Old led.toggle() // New
Or, qualify that the
ToggleableOutputPintrait method should be called.
-
-
BREAKING The HAL's
"rtfm"feature is changed to"rtic", reflecting the framework's new name. Users who are relying on the"rtfm"feature should now use the"rtic"feature. -
BREAKING The
dma::{Config, ConfigBuilder}types are gone. This affects thedma::Peripheralinterface. To configure interrupt on completion / half settings, usedma::Channel::set_interrupt_on_completion()/dma::Channel::set_interrupt_on_half()to perform the same configurations before suppling the channel todma::Peripheral.
0.3.1 2020-08-29
- The
StatefulOutputPinimplementation was reading from the wrong GPIO register. The interface would indicate that the GPIO was always low, even when it was driven high. The implementation now reads from the data register, which represents the driven GPIO value.
0.3.0 - 2020-06-18
uart::ReadErrorimplementsClone,Debug,PartialEq, andEqUARTperipherals may besplit()intoTxandRxhalvesUARTperipherals implement the blockingembedded_haltraits- General purpose timers (GPT)
- Introducing the DMA module
- Peripheral-to-memory transfers, supporting both SPI and UART
- Memory-to-memory copies
- Statically-allocated linear and circular buffers
- Documentation
- Getting Started
- Contributing
- Rustdoc-checked code examples
imxrt_hal::pit::Unclocked::clocknow takes a&mut imxrt_hal::ccm::perclk::Configuredmutable reference, rather than a value. Users need to add a&mutqualifier to theclock()argument, and qualify theConfiguredobject asmutto migrate their code. The object may now be shared between PIT and GPT clocking methods.
Prior releases were not tracked with a changelog entry.