Skip to content

invert status never reset on serial0 after having been set to invert once #9896

@mha1

Description

@mha1

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.

serial0

running the test code on serial1 shows the expected behavior.

serial1

changing arduino-esp32/cores/esp32/esp32-hal-uart.c fixes the problem however it is unclear why the serial0 and serial1 behave differently.

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);
}
.

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

SuGlider commented on Jun 19, 2024

@SuGlider
Collaborator

Yes, confirmed. Thank for the issue report, @mha1!
I'll add a PR as suggested.

SuGlider

SuGlider commented on Jun 19, 2024

@SuGlider
Collaborator

About why Serial and Serial0 behave differently, I'll try to figure it out.

mha1

mha1 commented on Jun 28, 2024

@mha1
Author

@SuGlider any news?

SuGlider

SuGlider commented on Jun 28, 2024

@SuGlider
Collaborator

I'll work on it today.

SuGlider

SuGlider commented on Jun 28, 2024

@SuGlider
Collaborator

@mha1 - What is the Arduino Core version that you have used to detect that Serial0 can't invert / revert the RX/TX signals?

mha1

mha1 commented on Jun 28, 2024

@mha1
Author

framework-arduinoespressif32 @ 3.20011.230801 (2.0.11)

SuGlider

SuGlider commented on Jun 28, 2024

@SuGlider
Collaborator

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

SuGlider commented on Jun 28, 2024

@SuGlider
Collaborator

framework-arduinoespressif32 @ 3.20011.230801 (2.0.11)

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

mha1 commented on Jun 28, 2024

@mha1
Author

"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

SuGlider commented on Jun 28, 2024

@SuGlider
Collaborator

"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?

yes, correct.

27 remaining items

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Backport needed 🔙This fix or feature needs to be backported to one or more stable or legacy branches.Peripheral: UARTRelated to the UART peripheral or its functionality.Type: Bug 🐛All bugs

Type

No type

Projects

Status

Done

Relationships

None yet

Development

No branches or pull requests

Issue actions

    invert status never reset on serial0 after having been set to invert once · Issue #9896 · espressif/arduino-esp32