All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.23.3 - 2026-03-02
- (adc) ADC clearing flags when reading value & make it somewhat consistent (#989)
- (clippy) New lint doesn't like nesting if in match (#993)
0.23.2 - 2026-02-20
- (usb) USB allocation rework and simplification (#963)
- (uart) Fix embedded_io::Read::read impl (#983)
- (dmac) Check+document that the DMAC transfers are smaller than u16::MAX long (#984)
- (pwm) Fix for off-by-one in get_max_duty() (#959)
0.23.1 - 2025-12-29
- (i2c) add I2C capabilities to labelled pins for arduino_nano33iot (#975)
0.23.0 - 2025-11-19
- Add PB02 and PB03 as undocumented I2C pads for SAMD21 (#958)
- (aes) Updates the
cipherdependency. - (aes) Updates the
aesmodule:
- [breaking] Gate undocumented chip features behind the
undoc-featuresCargo feature (#956)
- Document newly undoc I2C-capable pins (PB02,PB03) (#960)
- (ci) silence deprecation warning we have no power over (#943)
- (dmac) DMAC handler now waits for channel to report as disabled (#938)
- [breaking] Re-add GCLK0 for CAN dependencies (#930)
- Clippy warning about null pointers in DMAC (#928)
- Remove GCLK from can::Dependencies (#919)
- Remove deprecated warning in aes module (#957)
- fix off-by-one Pwm period (#949)
- Fix and improve EIC Event control (#944)
- Document order of calling enable_interrupt for interrupt timer (#942)
- (ci) Remove explicit link targets from docs
0.22.2 - 2025-06-26
- Maintain accuracy in DPLL frequency math
0.22.1 - 2025-06-22
- release v0.14.2 (#899)
0.22.0 - 2025-06-20
- Implement the
embedded_hal::delay::DelayNstrait fortimer::TimerCounter(#880)
-
[breaking] Completely rewrite ADC module with async support (#814)
-
[breaking] Bump MSRV to Rust 1.85.1, update to 2024 edition (#875)
-
[breaking] Refactor IoSet trait using sorted HList (#844).
SERCOM peripherals no longer need to specify the IoSet inside their
Padstype. It is checked automatically and transparently by the compiler. For example,- // From this - pub type I2cPads = i2c::Pads<I2cSercom, IoSet1, Sda, Scl>; + // To this + pub type I2cPads = i2c::Pads<I2cSercom, Sda, Scl>;
- Fixes issues with the
rtc::Rtcabstraction, and updates it to utilize themodesmodules abstractions used by the RTIC RTC monotonics (#845) - Relax rules for when DMA channels can be added/removed to/from
SpiandSpiFuture(#883) - [breaking] Fix bugs with EIC and allow clock provider switching (ATSAMx5x) (#850)
- [breaking] Remove deprecated SERCOM items related to older DMA implementations (#875)
- [breaking] Remvove
spi_futuremodule, in favor ofasyncSPI implementations (#875)
- [breaking] Update
defmtto1.0.1(#875) - [breaking] Update
rng-coreto0.9.1(#875) - [breaking] Update
embedded-sdmmcto0.8.1(#875)
- Improve watchdog start documentation (#881)
- SERCOM updates following IoSet refactor
0.21.3 - 2025-05-07
- Fix inconsistency in UART+async+DMA docs (#849)
- (i2c) Acknowledge last byte when continuing read (#859)
0.21.2 - 2025-04-22
- Ability to enable DPLL DCO filter
- Ability to set DPLL PI filter coefficients
- Ability to read DFLLRDY status bit
- Expand DFLL48MHz docs
- Dummy items for documentation only
- Clean up example and docstring warnings
- Update clock v2 docstring rate types
0.21.1 - 2025-04-12
- (tc) Read syncbusy instead of perbufv (#840)
0.21.0 - 2025-01-13
- [breaking] Add support for RTIC v2.0 monotonic drivers using RTC peripheral (#804)
- Allow the construction of systick Delay using the clock::v2 API (#803)
- Break out non-async specific interrupt functionality out of async_hal module
- Satisfy recent nightly clippy lint additions
0.20.2 - 2024-12-11
- (spi) Remove explicit flushes from SpiBus impl
0.20.1 - 2024-12-05
- (can) Allow the use of any GCLK with the CAN peripheral (#797)
- (pwm) Fix missing sync of timer ENABLE bit (#795)
0.20.0 - 2024-11-28
- [breaking] Add async support for many peripherals (#635):
- Supported peripherals: SPI, I2C, UART, DMAC, Timer/counter, external interrupts (EIC)
- Additional reading
- (eic) [breaking] Overhaul the
eicAPI (#635, 792):- API now uses a typestate pattern for
ExtIntstruct instead of individualExtInt1,ExtInt2, ... ExtIntmethods no longer require a reference to the underlyingEicExtInts take ownership of an EXTINT channel, preventing erroneous reuse- Additional reading
- API now uses a typestate pattern for
- (i2c) Send repeated starts in byte-by-byte I2C transactions
0.19.0 - 2024-11-17
- (spi) Unlock DMA transfers for SpiBus::transfer_in_place (#780)
- Make
OwnedPeripheral,RxPinandTxPintraits from thecanmodule public (#778) - (spi) Add PanicOnRead and PanicOnWrite for simplex SPI transactions (#772)
- (uart) embedded_io implementations for UART DMA transfers (#772)
- (i2c) embedded_hal I2c implementation for I2C DMA transfers (#772)
- (spi) embedded_hal SpiBus implementation for SPI DMA transfers (#772)
- (spi) Only enable SPI receiver when it has RX capability (#772)
- [breaking] Bump MSRV to Rust 1.77.2
0.18.2 - 2024-10-30
- updated the following local packages: atsamd11c, atsamd11d, atsamd21e, atsamd21g, atsamd21j, atsamd51g, atsamd51j, atsamd51n, atsamd51p, atsame51g, atsame51j, atsame51n, atsame53j, atsame53n, atsame54n, atsame54p
0.18.1 - 2024-10-25
- Changes to the
dmacpublic API (#764):- Make
BlockTransferControlandDmacDescriptorstructs private instead of#[doc(hidden)] - Add getters/setters for
level0,level1,level2, andlevel3forPriorityLevelMaskandRoundRobinMaskstructs
- Make
- Cleanup newly introduced nightly Clippy lints (#763)
0.18.0 - 2024-10-17
- [breaking] Upgrade PAC generated code to latest SVD and
svd2rust-0.34.1#756:- All peripheral types are now
PascalCase - All register field accessors are now methods instead of struct members
- Members of the
Peripheralsstruct are nowsnake_case
- All peripheral types are now
- SAMx5x: removed:
EnabledOscUlp32kBase::set_calibration#756 - [breaking]: SAMD51G: removed I2S support (#735)
- Fix samd51j not having i2s support (#735)
- Fix EIC issue leading to lost interrupts on SAMD11 platforms (#739)
- Fix I2C transaction to be as continuous as possible according to
embedded-halspecification (#741) - Fix
embedded-hal0.2 CountDown timer implementation (#749) - Fix blocking behaviour for
embedded-hal0.2 SPI writes (#743) - Allow configuring USB clock with
GenericClockControlleron atsamd11 (#734) - Fix Clippy nightly build errors (#755, #737)
- Fix build failures for SAMD11 USB (#746)
- Upgrade bitflags and get rid of TryFrom<()> implementations (#746)
- Remove
unprovenCargo feature - Implement
embedded-hal1.0for GPIO, SPI, I2C, UART, delay and PWM - CI/CD pipeline now uses
cargo clippyinstead ofcargo buildand denies clippy warnings by default - Fix HAL clippy lints
- Add compile error for combined
libraryanddmafeatures - Add
dmafeature to docs metadata - Update the PACs to svd2rust 0.30.2.
- Fix warnings for thumbv7 targets
- Update README.md - moves some content to wiki
- Remove pin
pa28from thed21eltarget (#717) - Fix a pwm configuration for the
tc4onD5xtargets (#720) - Update to usb-device 0.3.1 (#718)
- Internal re-organization to support more devices (#728)
- Implement
Debug, Clone, Copy, Eq, PartialEqfor all HAL error types (#691). - Replace homebrew time library with
fugit(#672) - Add
defmtfeature and derivedefmt::Formatfor error types (#684, obsoletes #522). - Add
mcanintegration (#654) - Fix incorrect PAC provided for
same51gtarget - Fix NVM User Row Mapping for
BOD12Calibration Parameters - Fix
ExternalInterruptimplementations foreic - Fix for incorrect feature gates for pins of
samd21glchip - Fix bug in
dmacwhere software trigger would not work - Correct thumbv6 DFLL multiplier to fix USB clock correction
- Fix failing
bsp_pins!invocation with no aliases (#605 fixes #599) - Add Advanced Encryption Standard (AES) peripheral support including RustCrypto compatible backend
- Add embedded-hal
InputPintrait to EIC pins - Change NVM API
- Add the ability to modify the user row
- Add security bit and chip-erase lock management
- Add escape hatch to access the underlying NVMCTRL PAC
- Add
Nvm::region_lockmethod - Change flash read/write/erase method signatures
Nvm::userpage->Nvm::read_userpageNvm::write->Nvm::write_flashNvm::write_from_slice->Nvm::write_flash_from_sliceNvm::erase->Nvm::erase_flash
- Refactor
Nvm::command_syncto be less error-prone
- Add the missing ADC traits for the SAMD11D
- Fix
sercom::uartpad definitions to reject pads conflicting with XCK. - Add support for L-Variant of the SAMD21D
- Rework USB API
- Remove deprecated modules (#480) :
- Remove
gpio::v1,sercom::v1module, promotegpio::v2togpioandsercom::v2tosercom. - Remove deprecated
halin favour ofehal - Remove deprecated
target_devicein favour ofpac - Remove deprecated
spi_commonmodule - Remove deprecated
commonmodule - Remove deprecated
samd51,same51,same53,same54modules - Remove deprecated
SpinTimer - Provide the necessary fixes to support those changes.
- Remove
- Cleanup most
clippylints - Update
seq_macroand removereplace_withdependencies (#568) - Add a
bsp_peripherals!macro and fix a bug inbsp_pins!(#515) - Updated to 2021 edition, updated dependencies, removed unused dependencies (#562)
- updated HAL to be compatible with PAC updates due to svd2rust upgrade
- Add an
sercom::v2::i2cAPI - Modified traits to support the Grand Central M4 Express.
- Add implementation of InputPin for Interrupt pins
- Add additional undocumented but valid IOSet for ATSAMD5x/ATSAME5x
- Update PACs to v0.11.0 (#518)
- Improve the
bsp_pins!macro (#475 & #483) - Add undocumented but valid IOSet for ATSAMD5x/ATSAME5x (#506)
- Fixed the RTC implementation of embedded-hal timer traits to be periodic again (#490)
- Add Integrity Check Monitor (ICM) abstraction (#480)
- Add Public Key Cryptography Controller (PUKCC) support (#486)
- Refactor the SPI module (#467)
- Bump Rust edition to 2021 and MSRV to 1.56 (#535)
- Implement
rtic::MonotonicforRTCusingfugit(#540)- RTIC spawn task API will now require
fugit::Duration<_, _, _>(aliased atatsamd_hal::rtc::Duration) instead ofembedded_time::Duration
- RTIC spawn task API will now require
- Add Device Service Unit (DSU), Non-volatile Controller (NVM), SmartEEPROM support (#526)
- Expand Public Key Cryptography Controller (PUKCC) to support modular exponentiation (RSA) (#544)
Changelog tracking started at v0.13