Enable I2S tests on ESP32 and work around first sample issue (#2194)

* Enable I2S tests on ESP32 and work around first sample issue

* Fix sample->channel assignment inconsistency

* Add to changelog
This commit is contained in:
Dániel Buga 2024-09-19 17:13:25 +02:00 committed by GitHub
parent d9d771706f
commit 25eff6a255
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 13 additions and 9 deletions

View File

@ -57,6 +57,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Fix I2C ending up in a state when only re-creating the peripheral makes it useable again (#2141)
- Fix `SpiBus::transfer` transferring data twice in some cases (#2159)
- Fixed UART freezing when using `RcFast` clock source on ESP32-C2/C3 (#2170)
- I2S: on ESP32 and ESP32-S2 data is now output to the right (WS=1) channel first. (#2194)
### Removed

View File

@ -1137,10 +1137,15 @@ mod private {
// Short frame synchronization
w.tx_short_sync().bit(false);
w.rx_short_sync().bit(false);
w.tx_msb_right().clear_bit();
w.rx_msb_right().clear_bit();
w.tx_right_first().clear_bit();
w.rx_right_first().clear_bit();
// Send MSB to the right channel to be consistent with ESP32-S3 et al.
w.tx_msb_right().set_bit();
w.rx_msb_right().set_bit();
// ESP32 generates two clock pulses first. If the WS is low, those first clock
// pulses are indistinguishable from real data, which corrupts the first few
// samples. So we send the right channel first (which means WS is high during
// the first sample) to prevent this issue.
w.tx_right_first().set_bit();
w.rx_right_first().set_bit();
w.tx_mono().clear_bit();
w.rx_mono().clear_bit();
w.sig_loopback().clear_bit()

View File

@ -51,11 +51,9 @@ macro_rules! common_test_pins {
cfg_if::cfg_if! {
if #[cfg(any(esp32s2, esp32s3))] {
($io.pins.gpio9, $io.pins.gpio10)
}
else if #[cfg(esp32)] {
} else if #[cfg(esp32)] {
($io.pins.gpio26, $io.pins.gpio27)
}
else {
} else {
($io.pins.gpio2, $io.pins.gpio3)
}
}

View File

@ -3,7 +3,7 @@
//! This test uses I2S TX to transmit known data to I2S RX (forced to slave mode
//! with loopback mode enabled).
//% CHIPS: esp32c3 esp32c6 esp32h2 esp32s2 esp32s3
//% CHIPS: esp32 esp32c3 esp32c6 esp32h2 esp32s2 esp32s3
//% FEATURES: generic-queue
#![no_std]