All notable changes to this project will be documented in this file.
Please note that only changes to the esp-hal-common
package are tracked in this CHANGELOG.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- ESP32-C6: LP core clock is configurable (#907)
- Derive
Clone
andCopy
forEspTwaiFrame
(#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 forUsbSerialJtag
(#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)
- Improve DMA documentation & clean up module (#915)
- Only allow a single version of
esp-hal-common
to be present in an application (#934) - C3, C6 and H2 can now use the
zero-rtc-bss
feature to enableesp-hal-common/rv-zero-rtc-bss
(#867) - Reuse
ieee802154_clock_enable/disable()
functions for BLE and renameble_ieee802154_clock_enable()
(#953) - The
embedded-io
trait implementations are now gated behind theembedded-io
feature (#964) - Simplifed RMT channels and channel creators (#958)
- Reworked construction of I2S driver instances (#983)
- 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
) forembedded-hal{-async,-nb}
(#994) - Explicit panic when hitting the
DefaultHandler
(#1005)
- 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 neitherembassy-executor-thread
, norembassy-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)
- Removed the
mcu-boot
feature fromesp32c3-hal
(#938) - Removed SpiBusController and SpiBusDevice in favour of embedded-hal-bus and embassy-embedded-hal implementataions. (#978)
- Direct boot support has been removed (#903).
Spi::new
/Spi::new_half_duplex
takes no gpio pin now, instead you need to callwith_pins
to setup those (#901).- ESP32C2, ESP32C3, ESP32S2: atomic emulation trap has been removed. When upgrading you must either remove these lines from your
.cargo/config.toml
. Usage ofcore::sync::atomic::*
in dependent crates should be replaced with portable-atomic. (#904) (#985) - RSA driver now takes u32 words instead of u8 bytes. The expected slice length is now 4 times shorter. (#981)
0.13.1 - 2023-11-02
- 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 - 2023-10-31
- Implement SetFrequencyCycle and PwmPin from embedded_hal for PwmPin of MCPWM. (#880)
- 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 theesp-hal-smartled
package (#846) - Support 16MB octal PS-RAM for ESP32-S3 (#858)
- RISCV TRACE Encoder driver for ESP32-C6 / ESP32-H2 (#864)
embedded_hal
1InputPin
andembedded_hal_async
Wait
impls for open drain outputs (#905)
- 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)
- 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)
- Fix ADC Calibration not being used on ESP32-S2 and ESP32-S3 (#1000)
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)
Uart::new
now takes the&Clocks
struct to ensure baudrate is correct for CPU/APB speed. (#808)Uart::new_with_config
takes anConfig
instead ofOption<Config>
. (#808)Alarm::set_period
takes a period (duration) instead of a frequency (#812)Alarm::interrupt_clear
is nowAlarm::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
andPCR
are now all exposed asSYSTEM
(#832). - Unified the ESP32's and ESP32-C2's xtal frequency features (#831)
- Replace any underscores in feature names with dashes (#833)
- The
spi
andspi_slave
modules have been refactored into thespi
,spi::master
, andspi::slave
modules (#843) - The
WithDmaSpi2
/WithDmaSpi3
structs are no longer generic around the inner peripheral type (#853) - The
SarAdcExt
/SensExt
traits are now collectively namedAnalogExt
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
andembedded-hal-async
traits are no longer re-exported in the prelude (#860)
0.12.0 - 2023-09-05
- 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) - A new macro to load LP core code on ESP32-C6 (#779)
- Add `ECC`` peripheral driver (#785)
- Initial LLD support for Xtensa chips (#861).
- Update the
embedded-hal-*
packages to1.0.0-rc.1
and implement traits fromembedded-io
andembedded-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)
- Fix
psram
availability lookup inesp-hal-common
build script (#718) - Fix wrong
dram_seg
length inesp32s2-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)
- Fix SHA registers access (#805)
CpuControl::start_app_core()
now takes anFnOnce
closure (#739)
0.11.0 - 2023-08-10
- 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)
- Update
embedded-hal-*
alpha packages to their latest versions (#640) - Implement the
Clone
andCopy
traits for theRng
driver (#650) - Use all remaining memory as core-0's stack (#716)
- Fixed Async Uart
read
whenset_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)
- Remove the
allow-opt-level-z
feature fromesp32c3-hal
(#654) - Remove the old
pulse_control
driver (#694)
DmaTransfer::wait
andI2sReadDmaTransfer::wait_receive
now returnResult
(#665)gpio::Pin
is now object-safe (#687)
0.10.0 - 2023-06-04
- 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 foruart
(#620) - Add bare-bones support to run code on ULP-RISCV / LP core (#631)
- Add ADC calibration implementation for a riscv chips (#555)
- Add
async
implementation forUSB Serial/JTAG
(#632)
- Simplify the
Delay
driver, deriveClone
andCopy
(#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)
- Corrected the expected DMA descriptor counts (#622, #625)
- DMA is supported for SPI3 on ESP32-S3 (#507)
change_bus_frequency
is now available onSpiDma
(#529)- Fixed a bug where a GPIO interrupt could erroneously fire again causing the next
await
on that pin to instantly returnPoll::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)
- 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 theinterrupt
module at the package level (#607)
0.9.0 - 2023-05-02
- 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
anduart
constructors (#463) - Added API to raise and reset software interrupts (#426)
- Implement
embedded_hal_nb::serial::*
traits forUsbSerialJtag
(#498)
- 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)
- ESP32-S3: Disable usb_pad_enable when setting GPIO19/20 to input/output (#645)
- Update
embedded-hal-async
andembassy-*
dependencies (#488) - Update to
embedded-hal@1.0.0-alpha.10
andembedded-hal-nb@1.0.0-alpha.2
(#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)
- Remove unnecessary generic from
UsbSerialJtag
driver (#492) - Remove
#[doc(inline)]
from esp-hal-common re-exports (#490)