Giter VIP home page Giter VIP logo

Comments (12)

SuGlider avatar SuGlider commented on June 2, 2024

Is this about USB Serial Device (CDC-ACM) signals?

from arduino-esp32.

SuGlider avatar SuGlider commented on June 2, 2024

@ChrGri - please keep in mind that DTR and RTS signals of the USB CDC port actually control "reset" and "boot mode" signals of the ESP32-S3.

from arduino-esp32.

SuGlider avatar SuGlider commented on June 2, 2024

It may be putting the S3 into download mode... "freezing/halting" the S3 firmware execution...

from arduino-esp32.

SuGlider avatar SuGlider commented on June 2, 2024

@ChrGri - Please read this: #6762 (comment)

image

from arduino-esp32.

SuGlider avatar SuGlider commented on June 2, 2024

This behaviour can be disabled permanently by burning the correct eFuse.

from arduino-esp32.

ChrGri avatar ChrGri commented on June 2, 2024

@SuGlider Thank you very much. I understood, that to enter the download mode on a regular ESP, one has to execute a specific DTR/RTS sequence, as shown below
image.

From the documentation you referenced, I understood that only the download mode flag is toggled, but the chip is never asked to reset:
image

I think setting Serial.enableReboot(false) has improved the behaviour and the USB HID output is continuous independent of the DTR state. However, simultaneous USB HID and serial output while RTS/DTR sates beeing const. are still buggy and both stall after some time. Single output of serial data or single output of USB HID data works fine though.

BR
Chris

from arduino-esp32.

SuGlider avatar SuGlider commented on June 2, 2024

However, simultaneous USB HID and serial output while RTS/DTR sates beeing const. are still buggy and both stall after some time. Single output of serial data or single output of USB HID data works fine though.

I see that you are using PlatformIO. What is the Arduino Core version used with it?
If possible, could you test it with Arduino IDE using Arduino Core 3.0.0-RC1?

from arduino-esp32.

ChrGri avatar ChrGri commented on June 2, 2024

However, simultaneous USB HID and serial output while RTS/DTR sates beeing const. are still buggy and both stall after some time. Single output of serial data or single output of USB HID data works fine though.

I see that you are using PlatformIO. What is the Arduino Core version used with it? If possible, could you test it with Arduino IDE using Arduino Core 3.0.0-RC1?

I've changed the platformIO as shown below. No difference.
image

You can find the sample code here. I've played around with Serial.setTxTimeoutMs(0); and Serial.flush(); without success. The observation is always, as soon as USB HID and serial output are activated together, the output will stall at some point.

BR
Chris

from arduino-esp32.

ChrGri avatar ChrGri commented on June 2, 2024

One thing which helped a lot, was adding a delay between the serial write and USB HID output command, as such
image.

Wit that delay, the serial and USB HID output don't seem to stall immediately. Reducing the delays to 1ms will make the output stall eventually. I'm a bit confused, that replacing the delays with Serial.flush() doesn't seem to have the same effect.

BR
Chris

from arduino-esp32.

SuGlider avatar SuGlider commented on June 2, 2024

I understand that your project uses USB OTG and TinyUSB for both, HID and CDC.
The delay seems to give TinyUSB some room to run different tasks from those 2 endpoints and/or their tasks...

It may be necessary to run a deep investigation of this issue.

from arduino-esp32.

ChrGri avatar ChrGri commented on June 2, 2024

I understand that your project uses USB OTG and TinyUSB for both, HID and CDC. The delay seems to give TinyUSB some room to run different tasks from those 2 endpoints and/or their tasks...

It may be necessary to run a deep investigation of this issue.

Yes, CDC and HID. Do you have an idea, why Serial.flush() apparently doesn't give that room too?

Is there something I can to help to find a proper fix?

Edit:
Btw. setting the first delay to 500ms and disabling the second delay results in a stall again. Seems to be purely related to the immediate HID output call after the serial write call.

BR
Chris

from arduino-esp32.

SuGlider avatar SuGlider commented on June 2, 2024

I'd need to analyse it better and try to understand why it could fail.

Regarding Serial. Flush(), it actually just waits until all the data is sent to the USB Host.
By other hand, delay(time_ms) releases the FreeRTOS Scheduler to run another task while waiting for that time to pass.

Arduino has a 1 ms time slice defined for FreeRTOS.
delay(5); means waiting for 5 time slices while other tasks could be executed - maybe something related to HID...
This is the "room" that I've mentioned about.

It is necessary to see the whole picture and try to understand the sequence of actions and possible reasons for the issue.

from arduino-esp32.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.