BREAKING Update imxrt-usbd
to 0.3. Users are required to update to
usb-device
0.3 and its compatible dependencies.
BREAKING Remove deprecated APIs
clko2::Selection::TracClk
timer::*PitChan
lpspi::Disabled::{set_mode, set_watermark}
BREAKING LpspiError::{Busy, NoData}
are removed as possible LPSPI errors.
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_enable
to 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
Disabled
helper. - Allow users to change the watermark while enabled. Deprecate the corresponding
method on the
Disabled
helper.
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::BlockingPitChan
and constructorfrom_pit_channel
.timer::RawCountDownPitChan
and 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::Oneshot
trait. - Preliminary support for the TRNG, with an implementation of embedded_hal's
rng::Read
trait. Includes support forrand_core::RngCore
behind 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-levelPeripherals
object. Thesteal()
method lets users use theimxrt_hal
as an RTIC device.- DMA
Memcpy
may support interrupt handling - A new interface for pad configuration, supported by the
imxrt-iomuxc
crate family. See the Changed section for migration information.
-
BREAKING The pad configuration interface has simplified. Users will use the interface exposed by the
imxrt-iomuxc
crate family. This section describes how you might update your 0.3 (and earlier) code for the new interface.-
Naming: the
IOMUXC
instance 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_offset
to 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::_1
are nowtypenum
constants. 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
ToggleableOutputPin
trait 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::Peripheral
interface. 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
StatefulOutputPin
implementation 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::ReadError
implementsClone
,Debug
,PartialEq
, andEq
UART
peripherals may besplit()
intoTx
andRx
halvesUART
peripherals implement the blockingembedded_hal
traits- 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::clock
now takes a&mut imxrt_hal::ccm::perclk::Configured
mutable reference, rather than a value. Users need to add a&mut
qualifier to theclock()
argument, and qualify theConfigured
object asmut
to migrate their code. The object may now be shared between PIT and GPT clocking methods.
Prior releases were not tracked with a changelog entry.