Description
Board
esp32-s3-devkitc-1
Device Description
esp32-s3-devkitc-1
Hardware Configuration
Pin 3 (UART0 TX) and GND are connected to a logic analyzer.
Please refer to the test code below. Expected output is an alternating output of non-inverted and inverted serial signals.
For serial0 the logic analyzer trace shows non-inverted, inverted, inverted, ...
which is wrong.
running the test code on serial1 shows the expected behavior.
changing arduino-esp32/cores/esp32/esp32-hal-uart.c
fixes the problem however it is unclear why the serial0 and serial1 behave differently.
arduino-esp32/cores/esp32/esp32-hal-uart.c
Lines 517 to 520 in 99750cd
if (retCode && inverted) {
// invert signal for both Rx and Tx
retCode &= ESP_OK == uart_set_line_inverse(uart_nr, UART_SIGNAL_TXD_INV | UART_SIGNAL_RXD_INV);
}
else
{
// reset invert
retCode &= ESP_OK == uart_set_line_inverse(uart_nr, UART_SIGNAL_INV_DISABLE);
}
Version
latest master (checkout manually)
IDE Name
VSCode/platformio
Operating System
Windows 10
Flash frequency
40Mhz
PSRAM enabled
yes
Upload speed
921600
Description
It should be possible to change serial transmission from non-inverted to inverted and back to non-inverted. This doesn't work on serial0. Please refer to the test code I attached.
Sketch
#include <Arduino.h>
#include <HardwareSerial.h>
HardwareSerial serial(0); // use serial(1) for comparison
void setup() {}
void loop() {
serial.begin(115200, SERIAL_8N1, 3, 1, false);
serial.write("hello");
serial.flush();
serial.end();
serial.begin(115200, SERIAL_8N1, 3, 1, true);
serial.write("hello");
serial.flush();
serial.end();
}
Debug Message
see attached logic analyzer trace
Other Steps to Reproduce
No response
I have checked existing issues, online documentation and the Troubleshooting Guide
- I confirm I have checked existing issues, online documentation and Troubleshooting guide.
Activity
SuGlider commentedon Jun 19, 2024
Yes, confirmed. Thank for the issue report, @mha1!
I'll add a PR as suggested.
SuGlider commentedon Jun 19, 2024
About why Serial and Serial0 behave differently, I'll try to figure it out.
mha1 commentedon Jun 28, 2024
@SuGlider any news?
SuGlider commentedon Jun 28, 2024
I'll work on it today.
SuGlider commentedon Jun 28, 2024
@mha1 - What is the Arduino Core version that you have used to detect that Serial0 can't invert / revert the RX/TX signals?
mha1 commentedon Jun 28, 2024
framework-arduinoespressif32 @ 3.20011.230801 (2.0.11)
SuGlider commentedon Jun 28, 2024
Ok... There are a few bugs with Serial and 2.0.11. Please try 2.0.17 instead.
Or try 3.0.2.
The PR will fix it for 3.0.3 and I can apply it in the Arduino
release/v2.x
branch.SuGlider commentedon Jun 28, 2024
This explains why it works with Serial1 and not with Serial0.
Many bug fixes within HardwareSerial and ESP32 UART HAL were applied after 2.0.11
It may be necessary to update your Arduino Core code, manually or using some PlatformIO setup.
mha1 commentedon Jun 28, 2024
"Ok... There are a few bugs with Serial and 2.0.11. Please try 2.0.17 instead.
Or try 3.0.2."
You mean other bugs besides the invert one, aren't you?
You're fixing the invert bug with 3.0.3, correct?
SuGlider commentedon Jun 28, 2024
yes, correct.
SuGlider commentedon Jun 28, 2024
@mha1 - You can copy the HardSerial and HAL from
release/v2.x
into your local Arduino Core files.https://github.com/espressif/arduino-esp32/blob/release/v2.x/cores/esp32/HardwareSerial.cpp
https://github.com/espressif/arduino-esp32/blob/release/v2.x/cores/esp32/HardwareSerial.h
https://github.com/espressif/arduino-esp32/blob/release/v2.x/cores/esp32/esp32-hal-uart.c
https://github.com/espressif/arduino-esp32/blob/release/v2.x/cores/esp32/esp32-hal-uart.h
After that, fix manually the Inversion...
27 remaining items