Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ESP32-C6 USB Serial (CDC) not working correctly (IDFGH-10698) #11924

Closed
3 tasks done
thedevleon opened this issue Jul 20, 2023 · 8 comments
Closed
3 tasks done

ESP32-C6 USB Serial (CDC) not working correctly (IDFGH-10698) #11924

thedevleon opened this issue Jul 20, 2023 · 8 comments
Assignees
Labels
Resolution: NA Issue resolution is unavailable Status: Done Issue is done internally Type: Bug bugs in IDF

Comments

@thedevleon
Copy link

thedevleon commented Jul 20, 2023

Answers checklist.

  • I have read the documentation ESP-IDF Programming Guide and the issue is not addressed there.
  • I have updated my IDF branch (master or release) to the latest version and checked that the issue is present there.
  • I have searched the issue tracker for a similar issue and not found a similar issue.

IDF version.

release/v5.1

Operating System used.

Windows

How did you build your project?

VS Code IDE

If you are using Windows, please specify command line type.

PowerShell

Development Kit.

ESP32-C6-DevKitC-1-N8

Power Supply used.

USB

What is the expected behavior?

I am compiling the openthread cli sample (/examples/openthread/ot_cli), but instead of using the UART port, I want to use the native USB CDC serial port via the USB-port labeled USB. We want to build a product using the ESP32-C6 that will only require a single USB port for debugging and serial input/output.

Following the documentation, I enabled the USB CDC Serial console by setting CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG=y.

Everything compiles and flashes fine, and the output looks good initially. However, right after the cli task is started, the console is flooded with wierd characters.

Furthermore, if I connect via the UART port instead, I still get logging output (I would expect NO output at all), but I cannot enter any commands.

What is the actual behavior?

I would expect the CLI to work just like it does with the UART port, and I would expect the UART port not to send anything at all.

Steps to reproduce.

  1. Open the ot_cli example
  2. Run menuconfig and set the "Channel for console output" to "USB Serial/JTAG Controller" and "Channel for console secondary output" to "No secondary console".
  3. Build, Flash and Monitor
  4. Get garbage on the monitor after the cli thread has been started

Debug Logs.

ESP-ROM:esp32c6-20220919
Build:Sep 19 2022
rst:0x15 (USB_UART_HPSYS),boot:0xc (SPI_FAST_FLASH_BOOT)
Saved PC:0x408007fe
SPIWP:0xee
mode:DIO, clock div:2
load:0x4086c410,len:0xd14
load:0x4086e610,len:0x2cc4
load:0x40875720,len:0x17ec
entry 0x4086c410
I (23) boot: ESP-IDF v5.1-dirty 2nd stage bootloader    
I (23) boot: compile time Jul 20 2023 16:09:11
I (24) boot: chip revision: v0.0
I (26) boot.esp32c6: SPI Speed      : 40MHz
I (31) boot.esp32c6: SPI Mode       : DIO
I (36) boot.esp32c6: SPI Flash Size : 2MB
I (40) boot: Enabling RNG early entropy source...
I (46) boot: Partition Table:
I (49) boot: ## Label            Usage          Type ST Offset   Length
I (57) boot:  0 nvs              WiFi data        01 02 00009000 00006000
I (64) boot:  1 phy_init         RF data          01 01 0000f000 00001000
I (71) boot:  2 factory          factory app      00 00 00010000 00120000
I (79) boot:  3 ot_storage       Unknown data     01 3a 00130000 00002000
I (87) boot: End of partition table
I (91) esp_image: segment 0: paddr=00010020 vaddr=420c8020 size=2ee90h (192144) map
I (137) esp_image: segment 1: paddr=0003eeb8 vaddr=40800000 size=01160h (  4448) load
I (139) esp_image: segment 2: paddr=00040020 vaddr=42000020 size=c435ch (803676) map
I (301) esp_image: segment 3: paddr=00104384 vaddr=40801160 size=0e798h ( 59288) load
I (315) esp_image: segment 4: paddr=00112b24 vaddr=4080f900 size=01ef0h (  7920) load
I (321) boot: Loaded app from partition at offset 0x10000
I (322) boot: Disabling RNG early entropy source...
I (324) cpu_start: Unicore app
I (328) cpu_start: Pro cpu up.
W (343) clk: esp_perip_clk_init() has not been implemented yet
I (343) cpu_start: Pro cpu start user code
I (343) cpu_start: cpu freq: 160000000 Hz
I (347) cpu_start: Application information:
I (352) cpu_start: Project name:     esp_ot_cli
I (357) cpu_start: App version:      16.0-161-ga20267713-dirty
I (364) cpu_start: Compile time:     Jul 20 2023 16:08:34
I (370) cpu_start: ELF file SHA256:  f1978c9c6d1de358...
I (376) cpu_start: ESP-IDF:          v5.1-dirty
I (381) cpu_start: Min chip rev:     v0.0
I (386) cpu_start: Max chip rev:     v0.99 
I (391) cpu_start: Chip rev:         v0.0
I (395) heap_init: Initializing. RAM available for dynamic allocation:
I (403) heap_init: At 4081D850 len 0005EDC0 (379 KiB): D/IRAM
I (409) heap_init: At 4087C610 len 00002F54 (11 KiB): STACK/DIRAM
I (416) heap_init: At 50000010 len 00003FF0 (15 KiB): RTCRAM
I (423) spi_flash: detected chip: generic
I (427) spi_flash: flash io: dio
W (431) spi_flash: Detected size(8192k) larger than the size in the binary image header(2048k). Using the size in the binary image header.
I (444) sleep: Configure to isolate all GPIO pins in sleep state
I (451) sleep: Enable automatic switching of GPIO sleep configuration
I (458) coexist: coex firmware version: ebddf30
I (458) coexist: coexist rom version 5b8dcfa
I (458) app_start: Starting scheduler on CPU0
I (463) main_task: Started on CPU0
I (463) main_task: Calling app_main()
I (463) phy_init: phy_version 202,b4b3263,May 17 2023,20:14:14
I(523) OPENTHREAD:[I] ChildSupervsn-: Timeout: 0 -> 190
I(553) OPENTHREAD:[I] Settings------: Read NetworkInfo {rloc:0x0c00, extaddr:2673f218d1d0e168, role:router, mode:0x0f, version:4, keyseq:0x0, ...
I(553) OPENTHREAD:[I] Settings------: ... pid:0x6c1c6c04, mlecntr:0x7d3, maccntr:0x3ef, mliid:9f36949781737877}
> I (553) OPENTHREAD: OpenThread attached to netif
I (553) ot_esp_cli: creating cli task...
I (553) main_task: Returned from app_main()
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
> ����

More Information.

I have tried compiling with the latest master branch, however the sample does no longer compile. I get the following error:

C:/Users/thele/esp/esp-idf/components/esp_hw_support/sleep_modes.c: In function 'light_sleep_uart_prepare':
C:/Users/thele/esp/esp-idf/components/esp_hw_support/sleep_modes.c:149:61: error: 'CONFIG_ESP_CONSOLE_UART_BAUDRATE' undeclared (first use in this function); did you mean 'CONFIG_ESP_CONSOLE_UART_NUM'?
  149 | #define UART_FLUSH_US_PER_CHAR              (10*1000*1000 / CONFIG_ESP_CONSOLE_UART_BAUDRATE)
      |                                                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:/Users/thele/esp/esp-idf/components/esp_hw_support/sleep_modes.c:503:113: note: in expansion of macro 'UART_FLUSH_US_PER_CHAR'
  503 |             (sleep_duration < (int64_t)((UART_LL_FIFO_DEF_LEN - uart_ll_get_txfifo_len(CONSOLE_UART_DEV) + 1) * UART_FLUSH_US_PER_CHAR) + SLEEP_UART_FLUSH_DONE_TO_SLEEP_US)) {
      |                                                                                                                 ^~~~~~~~~~~~~~~~~~~~~~
C:/Users/thele/esp/esp-idf/components/esp_hw_support/sleep_modes.c:149:61: note: each undeclared identifier is reported only once for each function it appears in
  149 | #define UART_FLUSH_US_PER_CHAR              (10*1000*1000 / CONFIG_ESP_CONSOLE_UART_BAUDRATE)
      |                                                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:/Users/thele/esp/esp-idf/components/esp_hw_support/sleep_modes.c:503:113: note: in expansion of macro 'UART_FLUSH_US_PER_CHAR'
  503 |             (sleep_duration < (int64_t)((UART_LL_FIFO_DEF_LEN - uart_ll_get_txfifo_len(CONSOLE_UART_DEV) + 1) * UART_FLUSH_US_PER_CHAR) + SLEEP_UART_FLUSH_DONE_TO_SLEEP_US)) {
      |                                     
@thedevleon thedevleon added the Type: Bug bugs in IDF label Jul 20, 2023
@espressif-bot espressif-bot added the Status: Opened Issue is new label Jul 20, 2023
@github-actions github-actions bot changed the title ESP32-C6 USB Serial (CDC) not working correctly ESP32-C6 USB Serial (CDC) not working correctly (IDFGH-10698) Jul 20, 2023
@thedevleon
Copy link
Author

I also tried compiling the examples/system/console/basic sample, which compiles fine in it's stock configuration, but as soon as I change to the "USB Serial/JTAG Controller" for "Channel for console output" in menuconfig, I again get the following error:

C:/Users/thele/esp/esp-idf/components/esp_hw_support/sleep_modes.c: In function 'light_sleep_uart_prepare':
C:/Users/thele/esp/esp-idf/components/esp_hw_support/sleep_modes.c:134:61: error: 'CONFIG_ESP_CONSOLE_UART_BAUDRATE' undeclared (first use in this function); did you mean 'CONFIG_ESP_CONSOLE_UART_NUM'?
  134 | #define UART_FLUSH_US_PER_CHAR              (10*1000*1000 / CONFIG_ESP_CONSOLE_UART_BAUDRATE)
      |                                                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:/Users/thele/esp/esp-idf/components/esp_hw_support/sleep_modes.c:460:113: note: in expansion of macro 'UART_FLUSH_US_PER_CHAR'
  460 |             (sleep_duration < (int64_t)((UART_LL_FIFO_DEF_LEN - uart_ll_get_txfifo_len(CONSOLE_UART_DEV) + 1) * UART_FLUSH_US_PER_CHAR) + SLEEP_UART_FLUSH_DONE_TO_SLEEP_US)) {
      |                                                                                                                 ^~~~~~~~~~~~~~~~~~~~~~
C:/Users/thele/esp/esp-idf/components/esp_hw_support/sleep_modes.c:134:61: note: each undeclared identifier is reported only once for each function it appears in
  134 | #define UART_FLUSH_US_PER_CHAR              (10*1000*1000 / CONFIG_ESP_CONSOLE_UART_BAUDRATE)
      |                                                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:/Users/thele/esp/esp-idf/components/esp_hw_support/sleep_modes.c:460:113: note: in expansion of macro 'UART_FLUSH_US_PER_CHAR'
  460 |             (sleep_duration < (int64_t)((UART_LL_FIFO_DEF_LEN - uart_ll_get_txfifo_len(CONSOLE_UART_DEV) + 1) * UART_FLUSH_US_PER_CHAR) + SLEEP_UART_FLUSH_DONE_TO_SLEEP_US)) {
      |  

@thedevleon thedevleon changed the title ESP32-C6 USB Serial (CDC) not working correctly (IDFGH-10698) ESP32-C6 USB Serial (CDC) not working correctly with ot-cli (IDFGH-10698) Jul 20, 2023
@thedevleon
Copy link
Author

thedevleon commented Jul 20, 2023

I was able to get the examples/system/console/basic sample to work by fixing the offending line in sleep_modes.c to

// hotfix?
#ifndef CONFIG_ESP_CONSOLE_UART_BAUDRATE
#define UART_FLUSH_US_PER_CHAR              0
#else
#define UART_FLUSH_US_PER_CHAR              (10*1000*1000 / CONFIG_ESP_CONSOLE_UART_BAUDRATE)
#endif

The UART port still shows logs however:

--- Using \\.\COM9 instead...
--- idf_monitor on \\.\COM9 115200 ---
--- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
ESP-ROM:esp32c6-20220919
Build:Sep 19 2022
rst:0x1 (POWERON),boot:0xc (SPI_FAST_FLASH_BOOT)
SPIWP:0xee
mode:DIO, clock div:2
load:0x4086c410,len:0xb24 
load:0x4086e610,len:0x2a54
load:0x40875720,len:0x12e8
entry 0x4086c410
I (208) cpu_start: Unicore app
I (209) cpu_start: Pro cpu up.
W (218) clk: esp_perip_clk_init() has not been implemented yet
I (218) cpu_start: Pro cpu start user code
I (219) cpu_start: cpu freq: 160000000 Hz
I (223) cpu_start: Application information:
I (228) cpu_start: Project name:     console
I (232) cpu_start: App version:      16.0-161-ga20267713-dirty
I (239) cpu_start: Compile time:     Jul 20 2023 17:00:57
I (245) cpu_start: ELF file SHA256:  892ea90c9b11ce80... 
I (251) cpu_start: ESP-IDF:          v5.1-231-ga7b62bbcaf
I (257) cpu_start: Min chip rev:     v0.0
I (262) cpu_start: Max chip rev:     v0.99 
I (267) cpu_start: Chip rev:         v0.0
I (271) heap_init: Initializing. RAM available for dynamic allocation:
I (279) heap_init: At 4081C220 len 000603F0 (384 KiB): D/IRAM
I (285) heap_init: At 4087C610 len 00002F54 (11 KiB): STACK/DIRAM
I (292) heap_init: At 50000068 len 00003F80 (15 KiB): RTCRAM     
I (299) spi_flash: detected chip: generic
I (303) spi_flash: flash io: dio
W (307) spi_flash: Detected size(8192k) larger than the size in the binary image header(4096k). Using the size in the binary image header.
I (320) sleep: Configure to isolate all GPIO pins in sleep state
I (327) sleep: Enable automatic switching of GPIO sleep configuration
I (334) app_start: Starting scheduler on CPU0

Furthermore, the ot-cli sample still prints garbage with this fix. So it has to be something related to the ot-cli sample.

@thedevleon thedevleon changed the title ESP32-C6 USB Serial (CDC) not working correctly with ot-cli (IDFGH-10698) ESP32-C6 USB Serial (CDC) not working correctly (IDFGH-10698) Jul 20, 2023
@igrr
Copy link
Member

igrr commented Jul 20, 2023

Hi @thedevleon, ot_cli example doesn't support USB_SERIAL_JTAG peripheral as console, please see the recent discussion in #11896 (comment).

Thank you for reporting the compilation failure for examples/system/console/basic for C6 with CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG=y, we have missed adding a test for such combination. Will fix this soon!

@thedevleon
Copy link
Author

I see, thanks. Can you point out to me on how I might be able to add USB_SERIAL_JTAG support for the ot-cli example?

I guess in esp_openthread_uart.c, esp_openthread_uart_init or esp_openthread_uart_init_port would need to be adjusted to support calls to usb_serial_jtag_driver_install?

@thedevleon
Copy link
Author

thedevleon commented Jul 20, 2023

Also, it seems the UART port is still used for bootloader output. I remember seeing that there are eFuses to burn to disable this output, but I can't find the documentation for it. Can you link me to this?

Also, can I use the pins for UART as soon as the bootloader is finished writing output? Or does the output need to be disabled via the eFuses so that those pins are freed up for other uses?

@igrr
Copy link
Member

igrr commented Jul 20, 2023

I guess in esp_openthread_uart.c, esp_openthread_uart_init or esp_openthread_uart_init_port would need to be adjusted to support calls to usb_serial_jtag_driver_install?

@chshu could you please help with this question?

Also, it seems the UART port is still used for bootloader output. I remember seeing that there are eFuses to burn to disable this output, but I can't find the documentation for it. Can you link me to this?

This should probably be EFUSE_UART_PRINT_CONTROL efuse field, it should be described in the ESP32-C6 technical reference manual.

However, the simpler option might to use a different UART TX pin for communicating with your external device. Since UART pins can be freely configured, you can pass a different TX GPIO number when initializing the UART driver in your app after the boot process is finished. This way you will still be able to access UART logs (just in case) but the UART TX line going to the external device will not be disturbed by the boot process.

@espressif-bot espressif-bot added Status: Reviewing Issue is being reviewed and removed Status: Opened Issue is new labels Jul 20, 2023
@chshu
Copy link
Collaborator

chshu commented Jul 21, 2023

@thedevleon Could you apply this patch: ot_cli_usb.patch, by excuting git apply ot_cli_usb.patch under the esp-idf folder. Then the ot_cli should work with the USB port.

We will merge the change to esp-idf soon.

@thedevleon
Copy link
Author

@thedevleon Could you apply this patch: ot_cli_usb.patch, by excuting git apply ot_cli_usb.patch under the esp-idf folder. Then the ot_cli should work with the USB port.

We will merge the change to esp-idf soon.

Thank you so much for the patch, it can confirm that it works on my side.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Resolution: NA Issue resolution is unavailable Status: Done Issue is done internally Type: Bug bugs in IDF
Projects
None yet
Development

No branches or pull requests

4 participants