Skip to content

Releases: esp-rs/esp-hal

0.14.1

13 Dec 18:36
Compare
Choose a tag to compare

Please note that only changes to the esp-hal-common package are tracked in these release notes.

Fixed

  • Fix SHA for all targets (#1021)

0.14.0

12 Dec 18:39
Compare
Choose a tag to compare

Please note that only changes to the esp-hal-common package are tracked in these release notes.

Added

  • ESP32-C6: LP core clock is configurable (#907)
  • Derive Clone and Copy for EspTwaiFrame (#914)
  • A way to configure inverted pins (#912)
  • Added API to check a GPIO-pin's interrupt status bit (#929)
  • A embedded_io_async::Read implementation for UsbSerialJtag (#889)
  • RtcClock::get_xtal_freq, RtcClock::get_slow_freq (#957)
  • Added Rx Timeout functionality to async Uart (#911)
  • RISC-V: Thread-mode and interrupt-mode executors, #[main] macro (#947)
  • A macro to make it easier to create DMA buffers and descriptors (#935)
  • I2C timeout is configurable (#1011)
  • ESP32-C6/ESP32-H2: flip-link feature gives zero-cost stack overflow protection (#1008)

Changed

  • Improve DMA documentation & clean up module (#915)
  • Only allow a single version of esp-hal-common to be present in an application (#934)
  • ESP32-C3/C6 and ESP32-H2 can now use the zero-rtc-bss feature to enable esp-hal-common/rv-zero-rtc-bss (#867)
  • Reuse ieee802154_clock_enable/disable() functions for BLE and rename ble_ieee802154_clock_enable() (#953)
  • The embedded-io trait implementations are now gated behind the embedded-io feature (#964)
  • Simplifed RMT channels and channel creators (#958)
  • Reworked construction of I2S driver instances (#983)
  • ESP32-S2/S3: Don't require GPIO 18 to create a USB peripheral driver instance (#990)
  • Updated to latest release candidate (1.0.0-rc.2) for embedded-hal{-async,-nb} (#994)
  • Explicit panic when hitting the DefaultHandler (#1005)
  • Relevant interrupts are now auto enabled in embassy::init (#1014).

Fixed

  • ESP32-C2/C3 examples: fix build error (#899)
  • ESP32-S3: Fix GPIO interrupt handler crashing when using GPIO48. (#898)
  • Fixed short wait times in embassy causing hangs (#906)
  • Make sure to clear LP/RTC RAM before loading code (#916)
  • Async RMT channels can be used concurrently (#925)
  • Xtensa: Allow using embassy-executor's thread-mode executor if neither embassy-executor-thread, nor embassy-executor-interrupt is enabled. (#937)
  • Uart Async: Improve interrupt handling and irq <--> future communication (#977)
  • RISC-V: Fix stack allocation (#988)
  • ESP32-C6: Fix used RAM (#997)
  • ESP32-H2: Fix used RAM (#1003)
  • Fix SPI slave DMA dma_read and dma_write (#1013)

Removed

  • Direct boot support has been removed (#903).
  • Removed the mcu-boot feature from esp32c3-hal (#938)
  • Removed SpiBusController and SpiBusDevice in favour of embedded-hal-bus and embassy-embedded-hal implementataions. (#978)

Breaking

  • Spi::new/Spi::new_half_duplex takes no gpio pin now, instead you need to call with_pins to setup those (#901).
  • ESP32-C2, ESP32-C3, ESP32-S2: atomic emulation trap has been removed. (#904) (#985)
    • When upgrading you must either remove these lines from your .cargo/config.toml.
    • Usage of core::sync::atomic::* in dependent crates should be replaced with portable-atomic.
  • RSA driver now takes u32 words instead of u8 bytes. The expected slice length is now 4 times shorter. (#981)

0.13.1

02 Nov 15:01
Compare
Choose a tag to compare

Please note that only changes to the esp-hal-common package are tracked in these release notes.

Fixed

  • ESP32-C3: Make sure BLE and WiFi are not powered down when esp-wifi needs them (#891)
  • ESP32-C6/H2: Fix setting UART baud rate (#893)

0.13.0

31 Oct 16:27
8a3e63c
Compare
Choose a tag to compare

Please note that only changes to the esp-hal-common package are tracked in these release notes.

Added

  • Added embassy-time-systick to ESP32-S2 (#827)
  • Implement enabling/disabling BLE clock on ESP32-C6 (#784)
  • Async support for RMT (#787)
  • Implement defmt::Format for more types (#786)
  • Add new_no_miso to Spi FullDuplexMode (#794)
  • Add UART support for splitting into TX and RX (#754)
  • Async support for I2S (#801)
  • Async support for PARL_IO (#807)
  • ETM driver, GPIO ETM (#819)
  • (G)DMA AES support (#821)
  • SYSTIMER ETM functionality (#828)
  • Adding async support for RSA peripheral(doesn't work properly for esp32 chip - issue will be created)(#790)
  • Added sleep support for ESP32-C3 with timer and GPIO wakeups (#795)
  • Support for ULP-RISCV including Delay and GPIO (#840, #845)
  • Add bare-bones SPI slave support, DMA only (#580, #843)
  • Embassy #[main] convenience macro (#841)
  • Add a defmt feature to the esp-hal-smartled package (#846)
  • Support 16MB octal PS-RAM for ESP32-S3 (#858)
  • RISCV TRACE Encoder driver for ESP32-C6 / ESP32-H2 (#864)

Changed

  • Bumped MSRV to 1.67 (#798)
  • Optimised multi-core critical section implementation (#797)
  • Changed linear- and curve-calibrated ADC to provide readings in mV (#836)

Fixed

  • S3: Allow powering down RC_FAST_CLK (#796)
  • UART/ESP32: fix calculating FIFO counter with get_rx_fifo_count() (#804)
  • Xtensa targets: Use ESP32Reset - not Reset (#823)
  • Examples should now work with the defmt feature (#810)
  • Fixed a race condition causing SpiDma to stop working unexpectedly (#869)
  • Fixed async uart serial, and updated the embassy_serial examples (#871).
  • Fix ESP32-S3 direct-boot (#873)
  • Fix ESP32-C6 ADC (#876)

Removed

  • Pin::is_pcore_interrupt_set (#793)
  • Pin::is_pcore_non_maskable_interrupt_set (#793)
  • Pin::is_acore_interrupt_set (#793)
  • Pin::is_acore_non_maskable_interrupt_set (#793)
  • Pin::enable_hold (#793)
  • Removed the generic return type for ADC reads (#792)

Breaking

  • Uart::new now takes the &Clocks struct to ensure baudrate is correct for CPU/APB speed. (#808)
  • Uart::new_with_config takes an Config instead of Option<Config>. (#808)
  • Alarm::set_period takes a period (duration) instead of a frequency (#812)
  • Alarm::interrupt_clear is now Alarm::clear_interrupt to be consistent (#812)
  • The PeripheralClockControl struct is no longer public, drivers no longer take this as a parameter (#817)
  • Unify the system peripheral, SYSTEM, DPORT and PCR are now all exposed as SYSTEM (#832).
  • Unified the ESP32's and ESP32-C2's xtal frequency features (#831)
  • Replace any underscores in feature names with dashes (#833)
  • The spi and spi_slave modules have been refactored into the spi, spi::master, and spi::slave modules (#843)
  • The WithDmaSpi2/WithDmaSpi3 structs are no longer generic around the inner peripheral type (#853)
  • The SarAdcExt/SensExt traits are now collectively named AnalogExt instead (#857)
  • Replace the radio module with peripheral singleton structs (#852)
  • The SPI traits are no longer re-exported in the main prelude, but from preludes in spi::master/spi::slave instead (#860)
  • The embedded-hal-1 and embedded-hal-async traits are no longer re-exported in the prelude (#860)

0.12.0

05 Sep 14:56
Compare
Choose a tag to compare

Please note that only changes to the esp-hal-common package are tracked in these release notes.

Added

  • Implement RTCIO pullup, pulldown and hold control for Xtensa MCUs (#684)
  • S3: Implement RTCIO wakeup source (#690)
  • Add PARL_IO driver for ESP32-C6 / ESP32-H2 (#733, #760)
  • Implement ufmt_write::uWrite trait for USB Serial JTAG (#751)
  • Add HMAC peripheral support (#755)
  • Add multicore-aware embassy executor for Xtensa MCUs (#723, #756).
  • Add interrupt-executor for Xtensa MCUs (#723, #756).
  • Add missing Into<Gpio<Analog, GPIONUN>> conversion (#764)
  • Updated clock module documentation (#774)
  • Add log feature to enable log output (#773)
  • Add defmt feature to enable log output (#773)

Changed

  • Update the embedded-hal-* packages to 1.0.0-rc.1 and implement traits from embedded-io and embedded-io-async (#747)
  • Moved AlignmentHelper to its own module (#753)
  • Disable all watchdog timers by default at startup (#763)
  • log crate is now opt-in (#773)

Fixed

  • Fix psram availability lookup in esp-hal-common build script (#718)
  • Fix wrong dram_seg length in esp32s2-hal linker script (#732)
  • Fix setting alarm when a timer group is used as the alarm source. (#730)
  • Fix Instant::now() not counting in some cases when using TIMG0 as the timebase (#737)
  • Fix number of ADC attenuations for ESP32-C6 (#771)

Breaking

  • CpuControl::start_app_core() now takes an FnOnce closure (#739)

0.11.0

10 Aug 15:57
846f3b0
Compare
Choose a tag to compare

Please note that only changes to the esp-hal-common package are tracked in these release notes.

Added

  • Add initial LP-IO support for ESP32-C6 (#639)
  • Implement sleep with some wakeup methods for esp32 (#574)
  • Add a new RMT driver (#653, #667, #695)
  • Implemented calibrated ADC API for ESP32-S3 (#641)
  • Add MCPWM DeadTime configuration (#406)
  • Implement sleep with some wakeup methods for esp32-s3 (#660, #689, #696)
  • Add feature enabling directly hooking the interrupt vector table (#621)
  • Add ClockControl::max helper for all chips (#701)
  • Added module-level documentation for all peripherals (#680)
  • Implement sleep with some wakeup methods for esp32-s3 (#660)
  • Add FlashSafeDma wrapper for eh traits which ensure correct DMA transfer from source data in flash (ROM) (#678)

Changed

  • Update embedded-hal-* alpha packages to their latest versions (#640)
  • Implement the Clone and Copy traits for the Rng driver (#650)

Fixed

  • Fixed Async Uart read when set_at_cmd is not used (#652)
  • USB device support is working again (#656)
  • Add missing interrupt status read for esp32s3, which fixes USB-SERIAL-JTAG interrupts (#664)
  • GPIO interrupt status bits are now properly cleared (#670)
  • Increase frequency resolution in set_periodic (#686)
  • Fixed ESP32-S2, ESP32-S3, ESP32-C2, ESP32-C3 radio clock gating (#679, #681)
  • Partially fix ESP32 radio clocks (#709)
  • Fixed "ESP32/ESP32-S2 RMT transmission with with data.len() > RMT_CHANNEL_RAM_SIZE results in TransmissionError" #707 (#710)

Removed

  • Remove the allow-opt-level-z feature from esp32c3-hal (#654)
  • Remove the old pulse_control driver (#694)

Breaking

  • DmaTransfer::wait and I2sReadDmaTransfer::wait_receive now return Result (#665)
  • gpio::Pin is now object-safe (#687)

0.10.0

04 Jul 18:07
Compare
Choose a tag to compare

Please note that only changes to the esp-hal-common package are tracked in these release notes.

Added

  • Add WithDmaSpi3 to prelude for ESP32S3 (#623)
  • Add bare-bones PSRAM support for ESP32 (#506)
  • Add initial support for the ESP32-H2 (#513, #526, #527, #528, #530, #538, #544, #548, #551, #556, #560, #566, #549, #564, #569, #576, #577, #589, #591, #597)
  • Add bare-bones PSRAM support for ESP32-S3 (#517)
  • Add async support to the I2C driver (#519)
  • Implement Copy and Eq for EspTwaiError (#540)
  • Add LEDC hardware fade support (#475)
  • Added support for multicore async GPIO (#542)
  • Add a fn to poll DMA transfers (#559)
  • Add unified field-based efuse access (#567)
  • Move esp-riscv-rt into esp-hal (#578)
  • Add CRC functions from ESP ROM (#587)
  • Add a debug feature to enable the PACs' impl-register-debug feature (#596)
  • Add initial support for I2S in ESP32-H2 (#597)
  • Add octal PSRAM support for ESP32-S3 (#610)
  • Add MD5 functions from ESP ROM (#618)
  • Add embassy async read support for uart (#620)
  • Add bare-bones support to run code on ULP-RISCV / LP core (#631)
  • Add ADC calibration implementation for a riscv chips (#555)

Changed

  • Simplify the Delay driver, derive Clone and Copy (#568)
  • DMA types can no longer be constructed by the user (#625)
  • Move core interrupt handling from Flash to RAM for RISC-V chips (ESP32-H2, ESP32-C2, ESP32-C3, ESP32-C6) (#541)
  • Change LED pin to GPIO2 in ESP32 blinky example (#581)
  • Update ESP32-H2 and ESP32-C6 clocks and remove i2c_clock for all chips but ESP32 (#592)
  • Use both timers in TIMG0 for embassy time driver when able (#609)
  • Re-work RadioExt implementations, add support for ESP32-H2 (#627)
  • Improve examples documentation (#533)
  • esp32h2-hal: added README (#585)
  • Update esp-hal-procmacros package dependencies and features (#628)

Fixed

  • Corrected the expected DMA descriptor counts (#622, #625)
  • DMA is supported for SPI3 on ESP32-S3 (#507)
  • change_bus_frequency is now available on SpiDma (#529)
  • Fixed a bug where a GPIO interrupt could erroneously fire again causing the next await on that pin to instantly return Poll::Ok (#537)
  • Set vecbase on core 1 (ESP32, ESP32-S3) (#536)
  • ESP32-S3: Move PSRAM related function to RAM (#546)
  • ADC driver will now apply attenuation values to the correct ADC's channels. (#554)
  • Sometimes half-duplex non-DMA SPI reads were reading garbage in non-release mode (#552)
  • ESP32-C3: Fix GPIO5 ADC channel id (#562)
  • ESP32-H2: Fix direct-boot feature (#570)
  • Fix Async GPIO not disabling interupts on chips with multiple banks (#572)
  • ESP32-C6: Support FOSC CLK calibration for ECO1+ chip revisions (#593)
  • Fixed CI by pinning the log crate to 0.4.18 (#600)
  • ESP32-S3: Fix calculation of PSRAM start address (#601)
  • Fixed wrong variable access (FOSC CLK calibration for ESP32-C6 #593)
  • Fixed trap location in ram (#605)
  • Fix rom::crc docs (#611)
  • Fixed a possible overlap of .data and .rwtext (#616)
  • Avoid SDA/SCL being low while configuring pins for I2C (#619)

Breaking

  • Simplified user-facing SpiDma and I2s types (#626)
  • Significantly simplified user-facing GPIO pin types. (#553)
  • No longer re-export the soc module and the contents of the interrupt module at the package level (#607)

0.9.0

02 May 16:27
Compare
Choose a tag to compare

Please note that only changes to the esp-hal-common package are tracked in these release notes.

Added

  • Add bare-bones PSRAM support for ESP32-S2 (#493)
  • Add DEBUG_ASSIST functionality (#484)
  • Add RSA peripheral support (#467)
  • Add PeripheralClockControl argument to timg, wdt, sha, usb-serial-jtag and uart constructors (#463)
  • Added API to raise and reset software interrupts (#426)
  • Implement embedded_hal_nb::serial::* traits for UsbSerialJtag (#498)

Fixed

  • Fix get_wakeup_cause comparison error (#472)
  • Use 192 as mclk_multiple for 24-bit I2S (#471)
  • Fix CpuControl::start_app_core signature (#466)
  • Move rwtext after other RAM data sections (#464)
  • ESP32-C3: Disable usb_pad_enable when setting GPIO18/19 to input/output (#461)
  • Fix 802.15.4 clock enabling (ESP32-C6) (#458)

Changed

  • Update embedded-hal-async and embassy-* dependencies (#488)
  • Update to [email protected] and [email protected] (#487)
  • Let users configure the LEDC output pin as open-drain (#474)
  • Use bitflags to decode wakeup cause (#473)
  • Minor linker script additions (#470)
  • Minor documentation improvements (#460)

Removed

  • Remove unnecessary generic from UsbSerialJtag driver (#492)
  • Remove #[doc(inline)] from esp-hal-common re-exports (#490)