* Fix QSPI mode on non-ESP32 * Update tests to count pulses on pins separately * Fix ESP32 addressing phase issue * Use defmt's assert * Set fastrd bit * Apply pulldowns to define signal level when not driven * Transfer address bits in data phase on ESP32 * Changelog * Use a separate buffer for the address, make the workaround configurable * Remove now-unnecessary additions * Force SpiDma to remain Send * Clarify wording, remove prefix * Clean up manual register manipulation * Fix byte order
40 KiB
40 KiB
Changelog
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.
Unreleased
- Bump MSRV to 1.79.0 (#1971)
Added
- Introduce traits for the DMA buffer objects (#1976)
- Implement
embedded-haloutput pin traits forNoPin(#2019, #2133) - Added
esp_hal::initto simplify HAL initialisation (#1970, #1999) - Added GpioPin::degrade to create ErasePins easily. Same for AnyPin by accident. (#2075)
- Added missing functions to
Flex:unlisten,is_interrupt_set,wakeup_enable,wait_for_high,wait_for_low,wait_for_rising_edge,wait_for_falling_edge,wait_for_any_edge. (#2075) Flexnow implementsWait. (#2075)- Added sleep and wakeup support for esp32c2 (#1922)
Input,Output,OutputOpenDrainandFlexnow implementPeripheral. (#2094)- Previously unavailable memory is available via
.dram2_uninitsection (#2079) - You can now use
Input,Output,OutputOpenDrainandFlexpins as EXTI and RTCIO wakeup sources (#2095) - Added
Rtc::set_current_timeto allow setting RTC time, andRtc::current_timeto getting RTC time while taking into account boot time (#1883) - Added APIs to allow connecting signals through the GPIO matrix. (#2128)
- Implement
TryFrom<u32>forledc::timer::config::Duty(#1984) - Expose
RtcClock::get_xtal_freqandRtcClock::get_slow_freqpublically for all chips (#2183) - TWAI support for ESP32-H2 (#2199)
- Make
DmaDescriptormethods public (#2237) - Added a way to configure watchdogs in
esp_hal::init(#2180) - Implement
embedded_hal_async::delay::DelayNsforTIMGxtimers (#2084)
Changed
- Make saving and restoring SHA digest state an explicit operation (#2049)
- Reordered RX-TX pairs in all APIs to be consistent (#2074)
- Make saving and restoring SHA digest state an explicit operation (#2049)
Delay::new()is now aconstfunction (#1999)Input,Output,OutputOpenDrainandFlexare now type-erased by default. Use the newnew_typedconstructor to keep using the ZST pin types. (#2075)- To avoid confusion with the
Rtc::current_timewall clock time APIs, we've renamedesp_hal::time::current_timetoesp_hal::time::now. (#2091) - Renamed
touch::Continoustotouch::Continuous. (#2094) - Faster SHA (#2112)
- The (previously undocumented)
ErasedPinenum has been replaced with theErasedPinstruct. (#2094) - Renamed and merged
Rtc::get_time_usandRtc::get_time_msintoRtc::time_since_boot(#1883) - ESP32: Added support for touch sensing on GPIO32 and 33 (#2109)
- Removed gpio pin generics from I8080 driver type. (#2171)
- I8080 driver now decides bus width at transfer time rather than construction time. (#2171)
- Replaced
AnyPinwithInputSignalandOutputSignaland renamedErasedPintoAnyPin(#2128) - Replaced the
ErasedTimerenum with theAnyTimerstruct. (#2144) - Changed the parameters of
Spi::with_pinsto no longer be optional (#2133) - Renamed
DummyPintoNoPinand removed all internal logic from it. (#2133) - The
NO_PINconstant has been removed. (#2133) - MSRV bump to 1.79 (#2156)
- Allow handling interrupts while trying to lock critical section on multi-core chips. (#2197)
- Removed the PS-RAM related features, replaced by
quad-psram/octal-psram,init_psramtakes a configuration parameter, it's now possible to auto-detect PS-RAM size (#2178) EspTwaiFrameconstructors now accept any type that converts intoesp_hal::twai::Id(#2207)- Change
DmaTxBufto support PSRAM onesp32s3(#2161)
Fixed
- SHA driver can now be safely used in multiple contexts concurrently (#2049)
- Fixed an issue with DMA transfers potentially not waking up the correct async task (#2065)
- Fixed an issue with LCD_CAM i8080 where it would send double the clocks in 16bit mode (#2085)
- Fix i2c embedded-hal transaction (#2028)
- Fix some inconsistencies in DMA interrupt bits (#2169)
- Fix SPI DMA alternating
writeandreadfor ESP32 and ESP32-S2 (#2131) - Fix I2C ending up in a state when only re-creating the peripheral makes it useable again (#2141)
- Fix
SpiBus::transfertransferring data twice in some cases (#2159) - Fixed UART freezing when using
RcFastclock source on ESP32-C2/C3 (#2170) - I2S: on ESP32 and ESP32-S2 data is now output to the right (WS=1) channel first. (#2194)
- SPI: Fixed an issue where unexpected data was written outside of the read buffer (#2179)
- SPI: Fixed an issue where
waithas returned before the DMA has finished writing the memory (#2179) - SPI: Fixed an issue where repeated calls to
dma_transfermay end up looping indefinitely (#2179) - SPI: Fixed an issue that prevented correctly reading the first byte in a transaction (#2179)
- SPI: ESP32: Send address with correct data mode even when no data is sent. (#2231)
- PARL_IO: Fixed an issue that caused garbage to be output at the start of some requests (#2211)
- TWAI on ESP32 (#2207)
Removed
- Removed
digest::Digestimplementation from SHA (#2049) - Removed
NoPinTypein favour ofDummyPin. (#2068) - Removed the
async,embedded-hal-02,embedded-hal,embedded-io,embedded-io-async, andufmtfeatures (#2070) - Removed the
GpioNtype aliasses. UseGpioPin<N>instead. (#2073) - Removed
Peripherals::take. Useesp_hal::initto obtainPeripherals(#1999) - Removed
AnyInputOnlyPinin favour ofAnyPin. (#2071) - Removed the following functions from
GpioPin:is_high,is_low,set_high,set_low,set_state,is_set_high,is_set_low,toggle. (#2094) - Removed
Rtc::get_time_raw(#1883) - Removed
_with_default_pinsUART constructors (#2132) - Removed
uart::{DefaultRxPin, DefaultTxPin}(#2132) - Removed
PcntSourceandPcntInputConfig. (#2134) - Removed the
place-spi-driver-in-ramfeature, this is now enabled via esp-config (#2156)
0.20.1 - 2024-08-30
Fixed
- A build issue when including doc comment prelude (#2040)
0.20.0 - 2024-08-29
Added
- Introduce DMA buffer objects (#1856, #1985)
- Added new
Io::new_no_bind_interruptconstructor (#1861) - Added touch pad support for esp32 (#1873, #1956)
- Allow configuration of period updating method for MCPWM timers (#1898)
- Add self-testing mode for TWAI peripheral. (#1929)
- Added a
PeripheralClockControl::resetto the driver constructors where missing (#1893) - Added
digest::Digestimplementation to SHA (#1908) - Added
debugger::debugger_connected. (#1961) - DMA: don't require
Sealedto implementReadBufferandWriteBuffer(#1921) - Allow DMA to/from psram for esp32s3 (#1827)
- Added missing methods to
SpiDmaBus(#2016). - PARL_IO use ReadBuffer and WriteBuffer for Async DMA (#1996)
Changed
- Peripheral driver constructors don't take
InterruptHandlers anymore. Useset_interrupt_handlerto explicitly set the interrupt handler now. (#1819) - Migrate SPI driver to use DMA buffer objects (#1856, #1985)
- Use the peripheral ref pattern for
OneShotTimerandPeriodicTimer(#1855) - Improve SYSTIMER API (#1871)
- SHA driver now use specific structs for the hashing algorithm instead of a parameter. (#1908)
- Remove
fn free(self)in HMAC which goes against esp-hal API guidelines (#1972) AnyPin,AnyInputOnyPinandDummyPinare now accessible fromgpiomodule (#1918)- Changed the RSA modular multiplication API to be consistent across devices (#2002)
Fixed
- Improve error detection in the I2C driver (#1847)
- Fix I2S async-tx (#1833)
- Fix PARL_IO async-rx (#1851)
- SPI: Clear DMA interrupts before (not after) DMA starts (#1859)
- SPI: disable and re-enable MISO and MOSI in
start_transfer_dma,start_read_bytes_dmaandstart_write_bytes_dmaaccordingly (#1894) - TWAI: GPIO pins are not configured as input and output (#1906)
- ESP32C6: Make ADC usable after TRNG deinicialization (#1945)
- We should no longer generate 1GB .elf files for ESP32C2 and ESP32C3 (#1962)
- Reset peripherals in driver constructors where missing (#1893, #1961)
- Fixed ESP32-S2 systimer interrupts (#1979)
- Software interrupt 3 is no longer available when it is required by
esp-hal-embassy. (#2011) - ESP32: Fixed async RSA (#2002)
Removed
- This package no longer re-exports the
esp_hal_procmacros::mainmacro (#1828) - The
AesFlavourtrait no longer has theENCRYPT_MODE/DECRYPT_MODEassociated constants (#1849) - Removed
FlashSafeDma(#1856) - Remove redundant WithDmaSpi traits (#1975)
IsFullDuplexandIsHalfDuplextraits (#1985)
0.19.0 - 2024-07-15
Added
- uart: Added
with_cts/with_rtss methods to configure CTS, and RTS pins (#1592) - uart: Constructors now require TX and RX pins (#1592)
- uart: Added
Uart::new_with_default_pinsconstructor (#1592) - uart: Added
UartTxandUartRxconstructors (#1592) - Add Flex / AnyFlex GPIO pin driver (#1659)
- Add new
DmaError::UnsupportedMemoryRegion- used memory regions are checked when preparing a transfer now (#1670) - Add DmaTransactionTxOwned, DmaTransactionRxOwned, DmaTransactionTxRxOwned, functions to do owning transfers added to SPI half-duplex (#1672)
- uart: Implement
embedded_io::ReadReadyforUartandUartRx(#1702) - ESP32-S3: Expose optional HSYNC input in LCD_CAM (#1707)
- ESP32-S3: Add async support to the LCD_CAM I8080 driver (#1834)
- ESP32-C6: Support lp-core as wake-up source (#1723)
- Add support for GPIO wake-up source (#1724)
- gpio: add DummyPin (#1769)
- dma: add Mem2Mem to support memory to memory transfer (#1738)
- Add
uartwake source (#1727) #[ram(persistent)]option to replace the unsounduninitializedoption (#1677)- uart: Make
rx_timeoutoptional in Config struct (#1759) - Add interrupt related functions to
PeriodicTimer/OneShotTimer, addedErasedTimer(#1753) - Added blocking
read_bytesmethod toUartandUartRx(#1784) - Add method to expose
InputPin::is_interrupt_setinInput<InputPin>for use in interrupt handlers (#1829)
Fixed
- ESP32-S3: Fix DMA waiting check in LCD_CAM (#1707)
- TIMG: Fix interrupt handler setup (#1714)
- Fix
sleep_lightfor ESP32-C6 (#1720) - ROM Functions: Fix address of
ets_update_cpu_frequency_rom(#1722) - Fix
regi2c_*functions foresp32h2(#1737) - Improved
#[ram(zeroed)]soundness by adding abytemuck::Zeroabletype bound (#1677) - EESP32-S2 / ESP32-S3: Fix UsbDm and UsbDp for Gpio19 and Gpio20
- Fix reading/writing small buffers via SPI master async dma (#1760)
- Remove unnecessary delay in rtc_ctnl (#1794)
Changed
- Refactor
Dac1/Dac2drivers into a singleDacdriver (#1661) - esp-hal-embassy: make executor code optional (but default) again
- Improved interrupt latency on RISC-V based chips (#1679)
esp_wifi::initializeno longer requires running maximum CPU clock, instead check it runs above 80MHz. (#1688)- Move DMA descriptors from DMA Channel to each individual peripheral driver. (#1719)
- Allow users to easily name DMA channels (#1770)
- Support DMA chunk sizes other than the default 4092 (#1758)
- Improved interrupt latency on Xtensa based chips (#1735)
- Improve PCNT api (#1765)
Removed
- uart: Removed
configure_pinsmethods (#1592) - Removed
DmaError::Exhaustederror by improving the implementation of thepopfunction (#1664) - Unsound
#[ram(uninitialized)]option in favor of the newpersistentoption (#1677)
0.18.0 - 2024-06-04
Added
- i2c: implement
I2C:transactionforembedded-halandembedded-hal-async(#1505) - spi: implement
with_bit_order(#1537) - ESP32-PICO-V3-02: Initial support (#1155)
time::current_timeAPI (#1503)- ESP32-S3: Add LCD_CAM Camera driver (#1483)
embassy-usbsupport (#1517)- SPI Slave support for ESP32-S2 (#1562)
- Add new generic
OneShotTimerandPeriodicTimerdrivers, plus newTimertrait which is implemented forTIMGxandSYSTIMER(#1570) - Feature: correct
TRNGmechanism #1804
Fixed
- i2c: i2c1_handler used I2C0 register block by mistake (#1487)
- Removed ESP32 specific code for resolutions > 16 bit in ledc embedded_hal::pwm max_duty_cycle function. (#1441)
- Fixed division by zero in ledc embedded_hal::pwm set_duty_cycle function and converted to set_duty_hw instead of set_duty to eliminate loss of granularity. (#1441)
- Embassy examples now build on stable (#1485)
- Fix delay on esp32h2 (#1535)
- spi: fix dma wrong mode when using eh1 blocking api (#1541)
- uart: make
uart::UartRx::read_bytepublic (#1547) - Fix async serial-usb-jtag (#1561)
- Feeding
RWDTnow actually works (#1645)
Changed
- Removed unneeded generic parameters on
Usb(#1469) - Created virtual peripherals for CPU control and radio clocks, rather than splitting them from
SYSTEM(#1428) IO,ADC,DAC,RTC*,LEDC,PWMandPCNTdrivers have been converted to camel case format (#1473)- RNG is no longer TRNG, the
CryptoRngimplementation has been removed. To track this being re-added see #1499 (#1498) - Make software interrupts shareable (#1500)
- The
SystemPartsstruct has been renamed toSystemControl, and now has a constructor which takes theSYSTEMperipheral (#1495) - Timer abstraction: refactor
systimerandtimermodules into a commontimermodule (#1527) - Removed the
embassy-executor-threadandembassy-executor-interruptfeatures, they are now enabled by default whenembassyis enabled. (#1485) - Software interrupt 3 is now used instead of software interrupt 0 on the thread aware executor on multicore systems (#1485)
- Timer abstraction: refactor
systimerandtimermodules into a commontimermodule (#1527) - Refactoring of GPIO module, have drivers for Input,Output,OutputOpenDrain, all drivers setup their GPIOs correctly (#1542)
- DMA transactions are now found in the
dmamodule (#1550) - Remove unnecessary generics from PARL_IO driver (#1545)
- Use
Level enumin GPIO constructors instead of plain bools (#1574) - rmt: make ChannelCreator public (#1597)
Removed
- Removed the
SystemExttrait (#1495) - Removed the
GpioExttrait (#1496) - Embassy support (and all related features) has been removed, now available in the
esp-hal-embassypackage instead (#1595)
0.17.0 - 2024-04-18
Added
- Add
ADC::read_blockingto xtensa chips (#1293) - ESP32-C6 / ESP32-H2: Implement
ETMfor general purpose timers (#1274) interrupt::enablenow has a direct CPU enable counter part,interrupt::enable_direct(#1310)Delay::delay(time: fugit::MicrosDurationU64)- Added async support for TWAI (#1320)
- Add TWAI support for ESP32-C6 (#1323)
GpioPin::stealunsafe API (#1363)- Inherent implementions of GPIO pin
set_low,is_low, etc. - Warn users when attempting to build using the
devprofile (#1420) - Async uart now reports interrupt errors(overflow, glitch, frame error, parity) back to user of read/write. uart clock decimal part configured for c2,c3,s3 (#1168, #1445)
- Add mechanism to configure UART source clock (#1416)
GpioPingot a functionset_state(bool)(#1462)- Add definitions of external USB PHY peripheral I/O signals
- Expose e-hal ErrorKind::NoAcknowledge in I2C driver (#1454)
- Add remaining peripheral signals for LCD_CAM (#1466)
Fixed
- Reserve
esp32ROM stacks to prevent the trashing of dram2 section (#1289) - Fixing
esp-wifi+TRNGissue onESP32-S2(#1272) - Fixed core1 startup using the wrong stack on the esp32 and esp32s3 (#1286).
- ESP32: Apply fix for Errata 3.6 in all the places necessary. (#1315)
- ESP32 & ESP32-S2: Fix I²C frequency (#1306)
- UART's TX/RX FIFOs are now cleared during initialization (#1344)
- Fixed
LCD_CAM I8080driver potentially sending garbage to display (#1301) - The TWAI driver can now be used without requiring the
embedded-haltraits (#1355) - USB pullup/pulldown now gets properly cleared and does not interfere anymore on esp32c3 and esp32s3 (#1244)
- Fixed GPIO counts so that using async code with the higher GPIO number should no longer panic (#1361, #1362)
- ESP32/ESP32-S2: Wait for I2S getting out of TX_IDLE when starting a transfer (#1375)
- Fixed writes to SPI not flushing before attempting to write, causing corrupted writes (#1381)
- fix AdcConfig::adc_calibrate for xtensa targets (#1379)
- Fixed a divide by zero panic when setting the LEDC duty cycle to 0 with
SetDutyCycle::set_duty_cycle(#1403) - Support 192 and 256-bit keys for AES (#1316)
- Fixed MCPWM DeadTimeCfg bit values (#1378)
- ESP32 LEDC
set_duty_cycleused HighSpeedChannel for LowSpeedChannel (#1457)
Changed
- TIMG: Allow use without the embedded-hal-02 traits in scope (#1367)
- DMA: use channel clusters
- Remove
Ext32andRateExtU64from prelude - Prefer mutable references over moving for DMA transactions (#1238)
- Support runtime interrupt binding, adapt GPIO driver (#1231)
- Renamed
eh1feature toembedded-hal, feature-gatedembedded-hal@0.2.xtrait implementations (#1273) - Enable
embedded-halfeature by default, instead of theembedded-hal-02feature (#1313) Uartstructs now take aModeparameter which defines how the driver is initialized (#1294)Rmtcan be created in async or blocking mode. The blocking constructor takes an optional interrupt handler argument. (#1341)- All
Instancetraits are now sealed, and can no longer be implemented for arbitrary types (#1346) - DMA channels can/have to be explicitly created for async or blocking drivers, added
set_interrupt_handlerto DMA channels, SPI, I2S, PARL_IO, don't enable interrupts on startup for DMA, I2S, PARL_IO, GPIO (#1300) - UART: Rework
change_baudso it is possible to set baud rate even after instantiation (#1350) - Runtime ISR binding for SHA,ECC and RSA (#1354)
- Runtime ISR binding for I2C (#1376)
UsbSerialJtagcan be created in async or blocking mode. The blocking constructor takes an optional interrupt handler argument (#1377)- SYSTIMER and TIMG instances can now be created in async or blocking mode (#1348)
- Runtime ISR binding for TWAI (#1384)
- ESP32-C6: The
gpio::lp_gpiomodule has been renamed togpio::lp_ioto match the peripheral name (#1397) - Runtime ISR binding for assist_debug (#1395)
- Runtime ISR binding for software interrupts, software interrupts are split now, interrupt-executor takes the software interrupt to use, interrupt-executor is easier to use (#1398)
- PCNT: Runtime ISR binding (#1396)
- Runtime ISR binding for RTC (#1405)
- Improve MCPWM DeadTimeCfg API (#1378)
SystemTimer'sAlarmmethods now require&mut self(#1455)
Removed
- Remove package-level type exports (#1275)
- Removed
direct-vectoring&interrupt-preemptionfeatures, as they are now enabled by default (#1310) - Removed the
rtandvectoredfeatures (#1380) - Remove partial support for the ESP32-P4 (#1461)
0.16.1 - 2024-03-12
- Resolved an issue with the
defmtdependency/feature (#1264)
Changed
- Use ROM
memcpyover compiler builtins (#1255) - Do not ensure randomness or implement the
CryptoRngtrait for ESP32-P4/S2 (#1267)
0.16.0 - 2024-03-08
Added
- Add initial support for the ESP32-P4 (#1101)
- Implement
embedded_hal::pwm::SetDutyCycletrait forledc::channel::Channel(#1097) - ESP32-P4: Add initial GPIO support (#1109)
- ESP32-P4: Add initial support for interrupts (#1112)
- ESP32-P4: Add efuse reading support (#1114)
- ESP32-S3: Added LCD_CAM I8080 driver (#1086)
- Allow for splitting of the USB Serial JTAG peripheral into tx/rx components (#1024)
RngCoretrait is implemented (#1122)- Support Rust's
stack-protectorfeature (#1135) - Adding clock support for
ESP32-P4(#1145) - Implementation OutputPin and InputPin for AnyPin (#1067)
- Implement
estimate_xtal_frequencyfor ESP32-C6 / ESP32-H2 (#1174) - A way to push into I2S DMA buffer via a closure (#1189)
- Added basic
LP-I2Cdriver for C6 (#1185) - Ensuring that the random number generator is TRNG. (#1200)
- ESP32-C6: Add timer wakeup source for deepsleep (#1201)
- Introduce
InterruptExecutor::spawner()(#1211) - Add
InterruptHandlerstruct, which couples interrupt handlers and their priority together (#1299)
Fixed
- Fix embassy-time tick rate not set when using systick as the embassy timebase (#1124)
- Fix
get_raw_coreon Xtensa (#1126) - Fix docs.rs documentation builds (#1129)
- Fix circular DMA (#1144)
- Fix
hello_rgbexample for ESP32 (#1173) - Fixed the multicore critical section on Xtensa (#1175)
- Fix timer
nowfor esp32c3 and esp32c6 (#1178) - Wait for registers to get synced before reading the timer count for all chips (#1183)
- Fix I2C error handling (#1184)
- Fix circular DMA (#1189)
- Fix esp32c3 uart initialization (#1156)
- Fix ESP32-S2 I2C read (#1214)
- Reset/init UART if it's not the console UART (#1213)
Changed
- DmaDescriptor struct to better model the hardware (#1054)
- DMA descriptor count no longer needs to be multiplied by 3 (#1054)
- RMT channels no longer take the channel number as a generic param (#959)
- The
esp-hal-commonpackage is now calledesp-hal(#1131) - Refactor the
Tracedriver to be generic around its peripheral (#1140) - Auto detect crystal frequency based on
RtcClock::estimate_xtal_frequency()(#1165) - ESP32-S3: Configure 32k ICACHE (#1169)
- Lift the minimal buffer size requirement for I2S (#1189)
- Replaced
SystemTimer::TICKS_PER_SECwithSystemTimer::ticks_per_sec()(#1981)
Removed
- Remove
xtal-26mhzandxtal-40mhzfeatures (#1165) - All chip-specific HAL packages have been removed (#1196)
Breaking
ADCandDACdrivers now take virtual peripherals in their constructors, instead of splittingAPB_SARADC/SENS(#1100)- The
DACdriver's constructor is nownewinstead ofdac, to be more consistent with other APIs (#1100) - The DMA peripheral is now called
Dmafor devices with both PDMA and GDMA controllers (#1125) - The
ADCdriver's constructor is nownewinstead ofadc, to be more consistent with other APIs (#1133) embassy-executor'sintegrated-timersis no longer enabled by default.- Renamed
embassy-time-systicktoembassy-time-systick-16mhzfor use with all chips with a systimer, exceptesp32s2. Addedembassy-time-systick-80mhzspecifically for theesp32s2. (#1247)
0.15.0 - 2024-01-19
Added
- ESP32-C6: Properly initialize PMU (#974)
- Implement overriding base mac address (#1044)
- Add
rt-riscvandrt-xtensafeatures to enable/disable runtime support (#1057) - ESP32-C6: Implement deep sleep (#918)
- Add
embedded-iofeature to each chip-specific HAL (#1072) - Add
embassy-time-drivertoesp-hal-commondue to updatingembassy-timetov0.3.0(#1075) - ESP32-S3: Added support for 80Mhz PSRAM (#1069)
- ESP32-C3/S3: Add workaround for USB pin exchange on usb-serial-jtag (#1104).
- ESP32C6: Added LP_UART initialization (#1113)
- Add
place-spi-driver-in-ramfeature toesp-hal-common(#1096)
Changed
- Set up interrupts for the DMA and async enabled peripherals only when
asyncfeature is provided (#1042) - Update to
1.0.0releases of theembedded-hal-*packages (#1068) - Update
embassy-timeto0.3.0and embassy-executor to0.5.0release due to the release of theembedded-hal-*packages (#1075) - No longer depend on
embassy-time(#1092) - Update to latest
smart-leds-traitandsmart-ledspackages (#1094)
Fixed
- ESP32: correct gpio 32/33 in errata36() (#1053)
- ESP32: make gpio 4 usable as analog pin (#1078)
- Fix double &mut for the
SetDutyCycleimpl onPwmPin(#1033) - ESP32/ESP32-S3: Fix stack-top calculation for app-core (#1081)
- ESP32/ESP32-S2/ESP32-S3: Fix embassy-time-timg0 driver (#1091)
- ESP32: ADC readings are no longer inverted (#1093)
Removed
Breaking
- Unify the low-power peripheral names (
RTC_CNTLandLP_CLKRSTtoLPWR) (#1064)
0.14.1 - 2023-12-13
Fixed
- Fix SHA for all targets (#1021)
0.14.0 - 2023-12-12
Added
- ESP32-C6: LP core clock is configurable (#907)
- Derive
CloneandCopyforEspTwaiFrame(#914) - A way to configure inverted pins (#912)
- Added API to check a GPIO-pin's interrupt status bit (#929)
- A
embedded_io_async::Readimplementation 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-linkfeature gives zero-cost stack overflow protection (#1008)
Changed
- Improve DMA documentation & clean up module (#915)
- Only allow a single version of
esp-hal-commonto be present in an application (#934) - ESP32-C3/C6 and ESP32-H2 can now use the
zero-rtc-bssfeature 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-iotrait implementations are now gated behind theembedded-iofeature (#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) forembedded-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 neitherembassy-executor-thread, norembassy-executor-interruptis 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)
- ESP32-C6/H2: Fix disabling of interrupts (#1040)
Removed
- Direct boot support has been removed (#903).
- Removed the
mcu-bootfeature fromesp32c3-hal(#938) - Removed SpiBusController and SpiBusDevice in favour of embedded-hal-bus and embassy-embedded-hal implementataions. (#978)
Breaking
Spi::new/Spi::new_half_duplextakes no gpio pin now, instead you need to callwith_pinsto 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.
- When upgrading you must either remove these lines from your
- RSA driver now takes
u32words instead ofu8bytes. The expected slice length is now 4 times shorter. (#981)
0.13.1 - 2023-11-02
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 - 2023-10-31
Added
- Implement SetFrequencyCycle and PwmPin from embedded_hal for PwmPin of MCPWM. (#880)
- Added
embassy-time-systickto ESP32-S2 (#827) - Implement enabling/disabling BLE clock on ESP32-C6 (#784)
- Async support for RMT (#787)
- Implement
defmt::Formatfor 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
esp32chip - 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
defmtfeature to theesp-hal-smartledpackage (#846) - Support 16MB octal PS-RAM for ESP32-S3 (#858)
- RISCV TRACE Encoder driver for ESP32-C6 / ESP32-H2 (#864)
embedded_hal1InputPinandembedded_hal_asyncWaitimpls for open drain outputs (#905)
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
defmtfeature (#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)
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::newnow takes the&Clocksstruct to ensure baudrate is correct for CPU/APB speed. (#808)Uart::new_with_configtakes anConfiginstead ofOption<Config>. (#808)Alarm::set_periodtakes a period (duration) instead of a frequency (#812)Alarm::interrupt_clearis nowAlarm::clear_interruptto be consistent (#812)- The
PeripheralClockControlstruct is no longer public, drivers no longer take this as a parameter (#817) - Unify the system peripheral,
SYSTEM,DPORTandPCRare 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
spiandspi_slavemodules have been refactored into thespi,spi::master, andspi::slavemodules (#843) - The
WithDmaSpi2/WithDmaSpi3structs are no longer generic around the inner peripheral type (#853) - The
SarAdcExt/SensExttraits are now collectively namedAnalogExtinstead (#857) - Replace the
radiomodule with peripheral singleton structs (#852) - The SPI traits are no longer re-exported in the main prelude, but from preludes in
spi::master/spi::slaveinstead (#860) - The
embedded-hal-1andembedded-hal-asynctraits are no longer re-exported in the prelude (#860)
0.12.0 - 2023-09-05
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::uWritetrait 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
clockmodule documentation (#774) - Add
logfeature to enable log output (#773) - Add
defmtfeature 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).
Changed
- Update the
embedded-hal-*packages to1.0.0-rc.1and implement traits fromembedded-ioandembedded-io-async(#747) - Moved AlignmentHelper to its own module (#753)
- Disable all watchdog timers by default at startup (#763)
logcrate is now opt-in (#773)
Fixed
- Fix
psramavailability lookup inesp-hal-commonbuild script (#718) - Fix wrong
dram_seglength inesp32s2-hallinker 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)
Breaking
CpuControl::start_app_core()now takes anFnOnceclosure (#739)
0.11.0 - 2023-08-10
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::maxhelper for all chips (#701) - Added module-level documentation for all peripherals (#680)
- Implement sleep with some wakeup methods for
esp32-s3(#660) - Add
FlashSafeDmawrapper 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
CloneandCopytraits for theRngdriver (#650) - Use all remaining memory as core-0's stack (#716)
Fixed
- Fixed Async Uart
readwhenset_at_cmdis 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-zfeature fromesp32c3-hal(#654) - Remove the old
pulse_controldriver (#694)
Breaking
DmaTransfer::waitandI2sReadDmaTransfer::wait_receivenow returnResult(#665)gpio::Pinis now object-safe (#687)
0.10.0 - 2023-06-04
Added
- Add
WithDmaSpi3to 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-rtinto esp-hal (#578) - Add CRC functions from ESP ROM (#587)
- Add a
debugfeature to enable the PACs'impl-register-debugfeature (#596) - Add initial support for
I2Sin ESP32-H2 (#597) - Add octal PSRAM support for ESP32-S3 (#610)
- Add MD5 functions from ESP ROM (#618)
- Add embassy async
readsupport 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
asyncimplementation forUSB Serial/JTAG(#632)
Changed
- Simplify the
Delaydriver, deriveCloneandCopy(#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_clockfor all chips but ESP32 (#592) - Use both timers in
TIMG0for embassy time driver when able (#609) - Re-work
RadioExtimplementations, add support for ESP32-H2 (#627) - Improve examples documentation (#533)
- esp32h2-hal: added README (#585)
- Update
esp-hal-procmacrospackage dependencies and features (#628)
Fixed
- Corrected the expected DMA descriptor counts (#622, #625)
- DMA is supported for SPI3 on ESP32-S3 (#507)
change_bus_frequencyis now available onSpiDma(#529)- Fixed a bug where a GPIO interrupt could erroneously fire again causing the next
awaiton that pin to instantly returnPoll::Ok(#537) - Set
vecbaseon 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
.dataand.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
socmodule and the contents of theinterruptmodule at the package level (#607)
0.9.0 - 2023-05-02
Added
- Add bare-bones PSRAM support for ESP32-S2 (#493)
- Add
DEBUG_ASSISTfunctionality (#484) - Add RSA peripheral support (#467)
- Add PeripheralClockControl argument to
timg,wdt,sha,usb-serial-jtaganduartconstructors (#463) - Added API to raise and reset software interrupts (#426)
- Implement
embedded_hal_nb::serial::*traits forUsbSerialJtag(#498)
Fixed
- Fix
get_wakeup_causecomparison error (#472) - Use 192 as mclk_multiple for 24-bit I2S (#471)
- Fix
CpuControl::start_app_coresignature (#466) - Move
rwtextafter other RAM data sections (#464) - ESP32-C3: Disable
usb_pad_enablewhen 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)
Changed
- Update
embedded-hal-asyncandembassy-*dependencies (#488) - Update to
embedded-hal@1.0.0-alpha.10andembedded-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)
Removed
- Remove unnecessary generic from
UsbSerialJtagdriver (#492) - Remove
#[doc(inline)]from esp-hal-common re-exports (#490)