I've been working on a PCB based on the ESP32-S3. I don't want to add buttons to it for boot selection, so I added a TagConnect footprint to allow me to enter DFU mode/flash using the ESPProg 2 board for the initial firmware upload.
It was my understanding that after flashing the first firmware with USB CDC On Boot enabled, I could then flash future firmware using the USB port.
Unfortunately, this doesn't seem to work. Even after flashing the first firmware successfully via RX/TX on ESPProg, the device doesn't appear at all on my mac when connected via USB. The ESPProg board appears, which is also ESP-based, so I don't think it is a driver issue.
When connected via USB (whether in DFU mode or otherwise), it's not recognized as a device at all and doesn't appear in `lsusb`. I have tried doing a power cycle after flashing, and I've tried both DFU and CDC modes by toggling BOOT/RESET via ESPProg when connected.
Schematic: https://imgur.com/s7zulbf
Layout: https://imgur.com/xoRpIvC
* The TC header is top left, this connects to RX/TX and IO0/EN
* Flashing via RX/TX works
* Entering DFU mode via the buttons on the ESPProg works
* The USB data pins go through and ESD diode straight to D+/D- on the ESP
* Good continuity between the USB data pins and the ESP
* Good power when connected via USB, stable 3.3v from the 5V input
* I'm using ESP32-S3-WROOM-1-N4
* I'm following these docs for enabling USB CDC: https://docs.espressif.com/projects/ard ... flash.html
* I've tested using the same cable as I use for the ESPProg USB, so it's definitely not a power-only cable
* I've tried enabling it via both Arduino IDE and PlatformIO
Any ideas?
ESP32-S3 USB CDC not working, no device detected
Re: ESP32-S3 USB CDC not working, no device detected
Just to take the firmware out of the equation, can you force IO0 low, reset (or power on) the chip, and try to connect then? That takes the chip into bootloader download mode and you should always see USB then.
Re: ESP32-S3 USB CDC not working, no device detected
Makes no difference, nothing even appears in lsusb.
My next guess was I fried the ESD chip while assembling, so I removed it to do some more testing. With the ESD chip removed and the board powered by USB, there is a steady 3.3v on the ESP D+ pin (0v on D-). With the ESD chip removed there is no obvious power path for this pin except through the ESP.
I disconnected the board and checked the pins for continuity. While unpowered, no continuity between D+ and the 3.3v rail, and no continuity between D+ and either of the neighboring pins.
The ESP itself works fine still, but potentially something inside is fried?
EDIT:
I just assembled another board to test in case it was an assembly or parts issue. This board has no firmware on it yet. When I power it by the USB port, I get a 3.3v on the ESP D+ pin which then drops to 0v and repeats, as the ESP boot loops with no firmware. If I enter bootloader mode, I get a constant 3.3v on the D+ pin which I think confirms this is coming from the ESP itself and not from a bridged contact.
There is still no devices shown when in bootloader mode.
I uploaded a basic sketch which sets the USB pin mode to input, which gives 0V on D+/D- when USB is connected as expected.
I also measured the voltage across D+ while connecting the USB. It oscillates between 3v and 1v for a few seconds before stabilizing at 3.1v.
My next guess was I fried the ESD chip while assembling, so I removed it to do some more testing. With the ESD chip removed and the board powered by USB, there is a steady 3.3v on the ESP D+ pin (0v on D-). With the ESD chip removed there is no obvious power path for this pin except through the ESP.
I disconnected the board and checked the pins for continuity. While unpowered, no continuity between D+ and the 3.3v rail, and no continuity between D+ and either of the neighboring pins.
The ESP itself works fine still, but potentially something inside is fried?
EDIT:
I just assembled another board to test in case it was an assembly or parts issue. This board has no firmware on it yet. When I power it by the USB port, I get a 3.3v on the ESP D+ pin which then drops to 0v and repeats, as the ESP boot loops with no firmware. If I enter bootloader mode, I get a constant 3.3v on the D+ pin which I think confirms this is coming from the ESP itself and not from a bridged contact.
There is still no devices shown when in bootloader mode.
I uploaded a basic sketch which sets the USB pin mode to input, which gives 0V on D+/D- when USB is connected as expected.
I also measured the voltage across D+ while connecting the USB. It oscillates between 3v and 1v for a few seconds before stabilizing at 3.1v.
Last edited by roomz98 on Mon Sep 15, 2025 11:52 pm, edited 3 times in total.
Re: ESP32-S3 USB CDC not working, no device detected
That is all expected behaviour. USB indicates a full-speed device using an 1.5K pull-up to 3.3V, this resistor is integrated in the ESP32-S3 and will turn on after reset. What I'd expect is your PC to detect this and try to negotiate with the device. Can you check the kernel messages (sudo dmesg) and see what that says? If that stays mute about the USB device, it's not seeing the D+ at all. If it gives you a heap of errors trying to associating an address / configuring, it means it sees the high D+ but cannot get communication going.
Re: ESP32-S3 USB CDC not working, no device detected
Ah okay, thanks. Here are the logs. I filtered to messages from IOPort, IOAccessory and IOService as they seemed the most relevant, but I can share unfiltered logs if needed (there was ~1k unfiltered in the same timespan!).
After connecting board
After disconnecting board
EDIT
This mornning I tried removing the ESD chip and soldering wires directly from D+/D- to the ESD input pads. It's now detected and I can upload this test sketch via USB:
I still don't see any log messages in the console, but at least firmware upload works which is something.
It looks like it must be a problem with the ESD chip then. Any ideas? It is a USBLC6-2 (https://www.lcsc.com/datasheet/C15999.pdf) which I've seen recommended by other people.
After connecting board
Code: Select all
default 04:40:08.820713+0100 kernel IOPortTransportState::setAuthenticationTimeout(): [Port-USB-C@3: USB3] authTimeout: 0 seconds
default 04:40:08.820719+0100 kernel IOPortTransportState::setDriverStatus(): [Port-USB-C@3: USB3] driverStatus: 1 [Not Ready]
default 04:40:08.820735+0100 kernel AppleNotificationQueue::_handleNotifications(): Handling notifications...
default 04:40:08.820744+0100 kernel IOPortTransportState::registerService(): [Port-USB-C@3: USB3] Registering service USB3@(null)... (transportType: 3, provider: Port-USB-C@3)
default 04:40:08.821261+0100 kernel IOPort::addTransport_block_invoke(): [Port-USB-C@3] Added transport! (transport: Port-USB-C@3/USB3)
default 04:40:08.823813+0100 kernel IOAccessoryTRM::_updateStatusGated(): Updating status...
default 04:40:08.823816+0100 kernel IOAccessoryTRM::_copyID(): ID bus info doesn't exist for this dock! (m_mgrPrimaryPortID: 259)
default 04:40:08.823827+0100 kernel IOAccessoryTRM::_updateStatusGated(): *** UAAA *** (m_mgrPrimaryPortID: 259)
default 04:40:08.823865+0100 kernel IOAccessoryTRM::_setPropertiesGated(): Setting USB Restricted Mode: NO... (m_mgrPrimaryPortID: 259)
default 04:40:08.823900+0100 kernel IOAccessoryTRM::_setPropertiesGated(): *** supervisedTransportsRestricted: NO *** (m_mgrPrimaryPortID: 259)
default 04:40:08.823903+0100 kernel IOAccessoryTRM::_setPropertiesGated(): Published RM status! (supervisedTransportsRestricted: NO, supervisedAccessoryAttached: YES, state: 1, gracePeriodReason: 1) (m_mgrPrimaryPortID: 259)
default 04:40:08.823921+0100 kernel IOAccessoryTRM::_handleNotificationGated(): Handling Attach/Detach/AccessoryDetected/ConfigChange/USBConnectChange notification... (m_mgrPrimaryPortID: 259)
default 04:40:08.823929+0100 kernel IOAccessoryTRM::_handleNotificationGated(): supervisedAccessoryAttached: YES, m_status.supervisedAccessoryAttached: YES (m_mgrPrimaryPortID: 259)
default 04:40:08.823936+0100 kernel IOAccessoryTRM::_handleNotificationGated(): Handling Attach/Detach/AccessoryDetected/ConfigChange/USBConnectChange notification... (m_mgrPrimaryPortID: 259)
default 04:40:08.823945+0100 kernel IOAccessoryTRM::_handleNotificationGated(): supervisedAccessoryAttached: YES, m_status.supervisedAccessoryAttached: YES (m_mgrPrimaryPortID: 259)
default 04:40:08.823977+0100 kernel IOServiceNotificationManager::sendMessages(): [Port-USB-C@3] Sending 1 message(s)... (m_propertyChanged: NO)
default 04:40:08.823998+0100 kernel IOAccessoryTRM::_handleNotificationGated(): Handling Attach/Detach/AccessoryDetected/ConfigChange/USBConnectChange notification... (m_mgrPrimaryPortID: 259)
default 04:40:08.824007+0100 kernel IOAccessoryTRM::_handleNotificationGated(): supervisedAccessoryAttached: YES, m_status.supervisedAccessoryAttached: YES (m_mgrPrimaryPortID: 259)
default 04:40:08.824012+0100 kernel IOAccessoryTRM::_handleNotifications(): Handling notifications...
default 04:40:08.824067+0100 kernel AppleNotificationQueue::_handleNotifications(): Handling notifications...
default 04:40:08.835972+0100 IOUIAgent messageType: kIOPort_Message_AuthorizationStateChange
default 04:40:08.875389+0100 kernel IOPortTransportState::setDriverStatus(): [Port-USB-C@3: USB3] driverStatus: 2 [Ready]
default 04:40:08.875483+0100 kernel IOServiceNotificationManager::sendMessages(): [Port-USB-C@3/USB3] Sending 2 message(s)... (m_propertyChanged: YES)
default 04:40:08.877403+0100 kernel IOPortTransportState::setDriverStatus(): [Port-USB-C@3: USB2] driverStatus: 2 [Ready]
default 04:40:08.877434+0100 kernel IOServiceNotificationManager::sendMessages(): [Port-USB-C@3/USB2] Sending 2 message(s)... (m_propertyChanged: YES)
default 04:40:08.923381+0100 kernel IOPortTransportState::handleStateChange(): [Port-USB-C@3: USB3] Handling state change...
default 04:40:08.923405+0100 kernel IOServiceNotificationManager::sendMessages(): [Port-USB-C@3/USB3] Sending 2 message(s)... (m_propertyChanged: YES)
default 04:40:08.923471+0100 kernel IOPortTransportState::handleStateChange(): [Port-USB-C@3: USB2] Handling state change...
default 04:40:08.923490+0100 kernel IOServiceNotificationManager::sendMessages(): [Port-USB-C@3/USB2] Sending 1 message(s)... (m_propertyChanged: NO)
default 04:40:08.923535+0100 kernel IOAccessoryTRM::_processNotifications(): Processing notifications...
default 04:40:08.923707+0100 kernel IOAccessoryTRM::_handleNotifications(): Handling notifications...
default 04:40:08.931850+0100 kernel IOAccessoryTRM::_handleNotificationGated(): Handling Attach/Detach/AccessoryDetected/ConfigChange/USBConnectChange notification... (m_mgrPrimaryPortID: 259)
default 04:40:08.931884+0100 kernel IOAccessoryTRM::_handleNotificationGated(): supervisedAccessoryAttached: YES, m_status.supervisedAccessoryAttached: YES (m_mgrPrimaryPortID: 259)
default 04:40:08.939820+0100 kernel IOPortTransportState::handleStateChange(): [Port-USB-C@3: USB3] Handling state change...
default 04:40:08.939846+0100 kernel IOServiceNotificationManager::sendMessages(): [Port-USB-C@3/USB3] Sending 2 message(s)... (m_propertyChanged: YES)
default 04:40:08.939915+0100 kernel IOPortTransportState::handleStateChange(): [Port-USB-C@3: USB2] Handling state change...
default 04:40:08.939925+0100 kernel IOServiceNotificationManager::sendMessages(): [Port-USB-C@3/USB2] Sending 1 message(s)... (m_propertyChanged: NO)
default 04:40:08.939963+0100 kernel IOAccessoryTRM::_processNotifications(): Processing notifications...
default 04:40:08.939977+0100 kernel IOAccessoryTRM::_handleNotifications(): Handling notifications...
default 04:40:08.941431+0100 kernel IOAccessoryTRM::_handleNotificationGated(): Handling Attach/Detach/AccessoryDetected/ConfigChange/USBConnectChange notification... (m_mgrPrimaryPortID: 259)
default 04:40:08.941448+0100 kernel IOAccessoryTRM::_handleNotificationGated(): supervisedAccessoryAttached: YES, m_status.supervisedAccessoryAttached: YES (m_mgrPrimaryPortID: 259)
default 04:40:08.950042+0100 kernel IOPortTransportState::handleStateChange(): [Port-USB-C@3: USB3] Handling state change...
default 04:40:08.950067+0100 kernel IOServiceNotificationManager::sendMessages(): [Port-USB-C@3/USB3] Sending 2 message(s)... (m_propertyChanged: YES)
default 04:40:08.950129+0100 kernel IOPortTransportState::handleStateChange(): [Port-USB-C@3: USB2] Handling state change...
default 04:40:08.950136+0100 kernel IOServiceNotificationManager::sendMessages(): [Port-USB-C@3/USB2] Sending 1 message(s)... (m_propertyChanged: NO)
default 04:40:08.950174+0100 kernel IOAccessoryTRM::_processNotifications(): Processing notifications...
default 04:40:08.950186+0100 kernel IOAccessoryTRM::_handleNotifications(): Handling notifications...
default 04:40:08.953872+0100 kernel IOPortTransportState::handleStateChange(): [Port-USB-C@3: USB3] Handling state change...
default 04:40:08.953892+0100 kernel IOServiceNotificationManager::sendMessages(): [Port-USB-C@3/USB3] Sending 2 message(s)... (m_propertyChanged: YES)
default 04:40:08.953954+0100 kernel IOPortTransportState::handleStateChange(): [Port-USB-C@3: USB2] Handling state change...
default 04:40:08.953963+0100 kernel IOServiceNotificationManager::sendMessages(): [Port-USB-C@3/USB2] Sending 1 message(s)... (m_propertyChanged: NO)
default 04:40:08.953999+0100 kernel IOAccessoryTRM::_processNotifications(): Processing notifications...
default 04:40:08.955513+0100 kernel IOAccessoryTRM::_handleNotificationGated(): Handling Attach/Detach/AccessoryDetected/ConfigChange/USBConnectChange notification... (m_mgrPrimaryPortID: 259)
default 04:40:08.955538+0100 kernel IOAccessoryTRM::_handleNotificationGated(): supervisedAccessoryAttached: YES, m_status.supervisedAccessoryAttached: YES (m_mgrPrimaryPortID: 259)
default 04:40:08.958178+0100 kernel IOPortTransportState::handleStateChange(): [Port-USB-C@3: USB3] Handling state change...
default 04:40:08.958201+0100 kernel IOServiceNotificationManager::sendMessages(): [Port-USB-C@3/USB3] Sending 2 message(s)... (m_propertyChanged: YES)
default 04:40:08.958283+0100 kernel IOPortTransportState::handleStateChange(): [Port-USB-C@3: USB2] Handling state change...
default 04:40:08.958292+0100 kernel IOServiceNotificationManager::sendMessages(): [Port-USB-C@3/USB2] Sending 1 message(s)... (m_propertyChanged: NO)
default 04:40:08.958327+0100 kernel IOAccessoryTRM::_processNotifications(): Processing notifications...
default 04:40:08.958329+0100 kernel IOAccessoryTRM::_processNotifications(): Thread call cancelled! (already pending)
default 04:40:08.958924+0100 kernel IOAccessoryTRM::_handleNotificationGated(): Handling Attach/Detach/AccessoryDetected/ConfigChange/USBConnectChange notification... (m_mgrPrimaryPortID: 259)
default 04:40:08.958944+0100 kernel IOAccessoryTRM::_handleNotificationGated(): supervisedAccessoryAttached: YES, m_status.supervisedAccessoryAttached: YES (m_mgrPrimaryPortID: 259)
default 04:40:08.958955+0100 kernel IOAccessoryTRM::_handleNotificationGated(): Handling Attach/Detach/AccessoryDetected/ConfigChange/USBConnectChange notification... (m_mgrPrimaryPortID: 259)
default 04:40:08.958964+0100 kernel IOAccessoryTRM::_handleNotificationGated(): supervisedAccessoryAttached: YES, m_status.supervisedAccessoryAttached: YES (m_mgrPrimaryPortID: 259)
default 04:40:08.959013+0100 kernel IOAccessoryTRM::_handleNotifications(): Handling notifications...
default 04:40:08.959037+0100 kernel IOPortTransportStateUSB2::setActive(): [Port-USB-C@3: USB2] active: YES
default 04:40:08.959044+0100 kernel IOPortTransportStateUSB2::setActive_block_invoke(): [Port-USB-C@3: USB2] active: 0 [NO] -> 1 [YES]
default 04:40:08.959050+0100 kernel IOPortTransportState::setActive(): [Port-USB-C@3: USB2] active: YES (transportType: 2 [USB2])
default 04:40:08.959063+0100 kernel IOPortTransportState::_updateTRMState(): [Port-USB-C@3: USB2] Updating TRM state...
default 04:40:08.959069+0100 kernel IOPortTransportStateUSB::calculateAuthorizationState(): [Port-USB-C@3: USB2] Calculating authorization state...
default 04:40:08.959080+0100 kernel IOPortTransportState::calculateAuthorizationState(): [Port-USB-C@3: USB2] Calculating authorization state...
default 04:40:08.959089+0100 kernel IOPortTransportState::calculateAuthorizationState_block_invoke(): [Port-USB-C@3: USB2] *** LTRR ***
default 04:40:08.959100+0100 kernel IOPortTransportState::handleStateChange(): [Port-USB-C@3: USB2] Handling state change...
default 04:40:08.959106+0100 kernel IOServiceNotificationManager::sendMessages(): [Port-USB-C@3/USB2] Sending 3 message(s)... (m_propertyChanged: YES)
default 04:40:08.959134+0100 kernel AppleNotificationQueue::processNotifications(): Processing 1 notification(s)...
default 04:40:08.959146+0100 kernel AppleNotificationQueue::_handleNotifications(): Handling notifications...
default 04:40:08.959156+0100 kernel IOServiceNotificationManager::handleServiceReregistration(): [Port-USB-C@3/USB2] Re-registering service...
default 04:40:08.959165+0100 kernel IOPortTransportState::registerService(): [Port-USB-C@3: USB2] Registering service USB2@(null)... (transportType: 2, provider: Port-USB-C@3)
default 04:40:08.959326+0100 kernel IOPortTransportState::setNominalSignalingFrequencies(): [Port-USB-C@3: USB2] Setting nominal signaling frequencies... (nominalSignalingFrequenciesHz: YES, nominalSignalingFrequenciesHz.count: 3)
default 04:40:08.959417+0100 kernel IOServiceNotificationManager::sendMessages(): [Port-USB-C@3] Sending 3 message(s)... (m_propertyChanged: YES)
default 04:40:08.961162+0100 IOUIAgent messageType: kIOPort_Message_AuthorizationStateChange
default 04:40:09.034251+0100 kernel IOPortTransportState::setNominalSignalingFrequencies(): [Port-USB-C@3: USB3] Setting nominal signaling frequencies... (nominalSignalingFrequenciesHz: YES, nominalSignalingFrequenciesHz.count: 1)
default 04:40:09.034347+0100 kernel IOPortTransportStateUSB3::setActive(): [Port-USB-C@3: USB3] active: YES
default 04:40:09.034351+0100 kernel IOPortTransportStateUSB3::setActive_block_invoke(): [Port-USB-C@3: USB3] active: 0 [NO] -> 1 [YES]
default 04:40:09.034359+0100 kernel IOPortTransportState::setActive(): [Port-USB-C@3: USB3] active: YES (transportType: 3 [USB3])
default 04:40:09.034373+0100 kernel IOPortTransportState::_updateTRMState(): [Port-USB-C@3: USB3] Updating TRM state...
default 04:40:09.034379+0100 kernel IOPortTransportStateUSB::calculateAuthorizationState(): [Port-USB-C@3: USB3] Calculating authorization state...
default 04:40:09.034392+0100 kernel IOPortTransportState::calculateAuthorizationState(): [Port-USB-C@3: USB3] Calculating authorization state...
default 04:40:09.034400+0100 kernel IOPortTransportState::calculateAuthorizationState_block_invoke(): [Port-USB-C@3: USB3] *** LTRR ***
default 04:40:09.034424+0100 kernel IOPortTransportState::handleStateChange(): [Port-USB-C@3: USB3] Handling state change...
default 04:40:09.034431+0100 kernel IOServiceNotificationManager::sendMessages(): [Port-USB-C@3/USB3] Sending 3 message(s)... (m_propertyChanged: YES)
default 04:40:09.034471+0100 kernel AppleNotificationQueue::processNotifications(): Processing 1 notification(s)...
default 04:40:09.034482+0100 kernel AppleNotificationQueue::_handleNotifications(): Handling notifications...
default 04:40:09.034503+0100 kernel IOServiceNotificationManager::handleServiceReregistration(): [Port-USB-C@3/USB3] Re-registering service...
default 04:40:09.034512+0100 kernel IOPortTransportState::registerService(): [Port-USB-C@3: USB3] Registering service USB3@(null)... (transportType: 3, provider: Port-USB-C@3)
default 04:40:09.034739+0100 kernel IOServiceNotificationManager::sendMessages(): [Port-USB-C@3] Sending 2 message(s)... (m_propertyChanged: YES)
default 04:40:09.061218+0100 kernel IOPortTransportState::handleStateChange(): [Port-USB-C@3: USB3] Handling state change...
default 04:40:09.061245+0100 kernel IOServiceNotificationManager::sendMessages(): [Port-USB-C@3/USB3] Sending 2 message(s)... (m_propertyChanged: YES)
default 04:40:09.061351+0100 kernel IOAccessoryTRM::_processNotifications(): Processing notifications...
default 04:40:09.061368+0100 kernel IOAccessoryTRM::_handleNotifications(): Handling notifications...
default 04:40:09.062999+0100 kernel IOAccessoryTRM::_handleNotificationGated(): Handling Attach/Detach/AccessoryDetected/ConfigChange/USBConnectChange notification... (m_mgrPrimaryPortID: 259)
default 04:40:09.063019+0100 kernel IOAccessoryTRM::_handleNotificationGated(): supervisedAccessoryAttached: YES, m_status.supervisedAccessoryAttached: YES (m_mgrPrimaryPortID: 259)
default 04:40:09.223217+0100 kernel IOPortTransportState::setNominalSignalingFrequencies(): [Port-USB-C@3: USB2] Setting nominal signaling frequencies... (nominalSignalingFrequenciesHz: YES, nominalSignalingFrequenciesHz.count: 1)
default 04:40:10.136122+0100 kernel IOPortTransportState::setNominalSignalingFrequencies(): [Port-USB-C@3: USB3] Setting nominal signaling frequencies... (nominalSignalingFrequenciesHz: YES, nominalSignalingFrequenciesHz.count: 1)
default 04:40:10.136156+0100 kernel IOPortTransportStateUSB3::setActive(): [Port-USB-C@3: USB3] active: NO
default 04:40:10.136158+0100 kernel IOPortTransportStateUSB3::setActive_block_invoke(): [Port-USB-C@3: USB3] active: 1 [YES] -> 0 [NO]
default 04:40:10.136166+0100 kernel IOPortTransportState::setActive(): [Port-USB-C@3: USB3] active: NO (transportType: 3 [USB3])
default 04:40:10.136173+0100 kernel IOPortTransportState::setHash(): [Port-USB-C@3: USB3] hash: NO
default 04:40:10.136190+0100 kernel IOPortTransportState::handleMetadataChanges(): [Port-USB-C@3: USB3] Handling metadata changes... (shouldReregisterService: NO, m_handleMetadataChangesRecursionCount: 0)
default 04:40:10.136195+0100 kernel IOPortTransportState::_updatePreDefinedMetadataProperties(): [Port-USB-C@3: USB3] Updating pre-defined metadata properties...
default 04:40:10.136230+0100 kernel IOPortTransportState::setAuthenticationStatus(): [Port-USB-C@3: USB3] authenticationStatus: 0 [Idle]
default 04:40:10.136234+0100 kernel IOPortTransportState::_updateTRMState(): [Port-USB-C@3: USB3] Updating TRM state...
default 04:40:10.136239+0100 kernel IOPortTransportStateUSB::calculateAuthorizationState(): [Port-USB-C@3: USB3] Calculating authorization state...
default 04:40:10.136244+0100 kernel IOPortTransportState::calculateAuthorizationState(): [Port-USB-C@3: USB3] Calculating authorization state...
default 04:40:10.136248+0100 kernel IOPortTransportState::calculateAuthorizationState_block_invoke(): [Port-USB-C@3: USB3] *** LTNART ***
default 04:40:10.136257+0100 kernel IOPortTransportState::handleStateChange(): [Port-USB-C@3: USB3] Handling state change...
default 04:40:10.136264+0100 kernel IOServiceNotificationManager::sendMessages(): [Port-USB-C@3/USB3] Sending 2 message(s)... (m_propertyChanged: NO)
default 04:40:10.136284+0100 kernel AppleNotificationQueue::processNotifications(): Processing 1 notification(s)...
default 04:40:10.136296+0100 kernel AppleNotificationQueue::_handleNotifications(): Handling notifications...
default 04:40:10.136343+0100 kernel IOServiceNotificationManager::sendMessages(): [Port-USB-C@3] Sending 2 message(s)... (m_propertyChanged: YES)
default 04:40:10.224307+0100 kernel IOPortTransportState::setNominalSignalingFrequencies(): [Port-USB-C@3: USB2] Setting nominal signaling frequencies... (nominalSignalingFrequenciesHz: YES, nominalSignalingFrequenciesHz.count: 3)
default 04:40:10.345758+0100 kernel IOPortTransportState::setNominalSignalingFrequencies(): [Port-USB-C@3: USB2] Setting nominal signaling frequencies... (nominalSignalingFrequenciesHz: YES, nominalSignalingFrequenciesHz.count: 1)
default 04:40:11.347074+0100 kernel IOPortTransportState::setNominalSignalingFrequencies(): [Port-USB-C@3: USB2] Setting nominal signaling frequencies... (nominalSignalingFrequenciesHz: YES, nominalSignalingFrequenciesHz.count: 3)
default 04:40:11.528738+0100 kernel IOPortTransportState::setNominalSignalingFrequencies(): [Port-USB-C@3: USB2] Setting nominal signaling frequencies... (nominalSignalingFrequenciesHz: YES, nominalSignalingFrequenciesHz.count: 1)
default 04:40:12.529943+0100 kernel IOPortTransportState::setNominalSignalingFrequencies(): [Port-USB-C@3: USB2] Setting nominal signaling frequencies... (nominalSignalingFrequenciesHz: YES, nominalSignalingFrequenciesHz.count: 3)
default 04:40:12.772881+0100 kernel IOPortTransportState::setNominalSignalingFrequencies(): [Port-USB-C@3: USB2] Setting nominal signaling frequencies... (nominalSignalingFrequenciesHz: YES, nominalSignalingFrequenciesHz.count: 1)
default 04:40:13.774384+0100 kernel IOPortTransportState::setNominalSignalingFrequencies(): [Port-USB-C@3: USB2] Setting nominal signaling frequencies... (nominalSignalingFrequenciesHz: YES, nominalSignalingFrequenciesHz.count: 3)
default 04:40:14.063138+0100 kernel IOPortTransportState::handleMetadataChanges(): [Port-USB-C@3: CC] Handling metadata changes... (shouldReregisterService: NO, m_handleMetadataChangesRecursionCount: 0)
default 04:40:14.063150+0100 kernel IOPortTransportState::_updatePreDefinedMetadataProperties(): [Port-USB-C@3: CC] Updating pre-defined metadata properties...
default 04:40:14.063230+0100 kernel IOServiceNotificationManager::handleServiceReregistration(): [Port-USB-C@3/CC] Re-registering service...
default 04:40:14.063237+0100 kernel IOPortTransportState::registerService(): [Port-USB-C@3: CC] Registering service CC@(null)... (transportType: 1, provider: Port-USB-C@3)
default 04:40:14.067331+0100 kernel IOPortFamily::handleMetadataChanges(): [Port-USB-C@3/CC/SOP'] Handling metadata changes... (shouldReregisterService: NO)
default 04:40:14.067337+0100 kernel IOPortFamily::_updatePreDefinedMetadataProperties(): [Port-USB-C@3/CC/SOP'] Updating pre-defined metadata properties...
default 04:40:14.067501+0100 kernel IOPortFamily::_updatePreDefinedMetadataProperties(): [Port-USB-C@3/CC/SOP'] Updating pre-defined metadata properties...
default 04:40:14.067540+0100 kernel IOPortFamily::registerService(): [Port-USB-C@3/CC/SOP'] Registering service... (providerPath: IOService:/AppleARMPE/arm-io/AppleT600xIO/i2c0@9B040000/AppleS5L8940XI2CController/hpmBusManager@6B/AppleHPMBusController/hpm2/AppleHPMARMI2C/AppleHPMDevice@3B/Port-USB-C@3/CC, options: 0)
default 04:40:14.067676+0100 kernel IOPortFamily::handleMetadataChanges(): [Port-USB-C@3/CC/SOP'] Handling metadata changes... (shouldReregisterService: NO)
default 04:40:14.067679+0100 kernel IOPortFamily::_updatePreDefinedMetadataProperties(): [Port-USB-C@3/CC/SOP'] Updating pre-defined metadata properties...
default 04:40:14.067717+0100 kernel IOPortFamily::handleMetadataChanges(): [Port-USB-C@3/CC/SOP'] Handling metadata changes... (shouldReregisterService: NO)
default 04:40:14.067719+0100 kernel IOPortFamily::_updatePreDefinedMetadataProperties(): [Port-USB-C@3/CC/SOP'] Updating pre-defined metadata properties...
default 04:40:14.067733+0100 kernel IOServiceNotificationManager::handleServiceReregistration(): [Port-USB-C@3/CC/SOP'] Re-registering service...
default 04:40:14.067778+0100 kernel IOPortFamily::_updatePreDefinedMetadataProperties(): [Port-USB-C@3/CC/SOP'] Updating pre-defined metadata properties...
default 04:40:14.067790+0100 kernel IOPortFamily::registerService(): [Port-USB-C@3/CC/SOP'] Registering service... (providerPath: IOService:/AppleARMPE/arm-io/AppleT600xIO/i2c0@9B040000/AppleS5L8940XI2CController/hpmBusManager@6B/AppleHPMBusController/hpm2/AppleHPMARMI2C/AppleHPMDevice@3B/Port-USB-C@3/CC, options: 0)
default 04:40:14.068262+0100 kernel IOServiceNotificationManager::handleServiceReregistration(): [Port-USB-C@3/CC/SOP'] Re-registering service...
default 04:40:14.068295+0100 kernel IOPortFamily::registerService(): [Port-USB-C@3/CC/SOP'] Registering service... (providerPath: IOService:/AppleARMPE/arm-io/AppleT600xIO/i2c0@9B040000/AppleS5L8940XI2CController/hpmBusManager@6B/AppleHPMBusController/hpm2/AppleHPMARMI2C/AppleHPMDevice@3B/Port-USB-C@3/CC, options: 0)
default 04:40:14.071171+0100 kernel IOPortTransportProtocolAppleUVDM::start - [Port-USB-C@3/CC/SOP'/AppleUVDM] uvdmlog boot-arg: 0x1, uvdmdebug boot-arg: 0x0
default 04:40:14.071455+0100 kernel IOPortTransportProtocolAppleUVDM::setPowerState - [Port-USB-C@3/CC/SOP'/AppleUVDM] Setting power state to 0x1
default 04:40:14.073415+0100 kernel IOPortTransportProtocolAppleUVDM::poweredStart - [Port-USB-C@3/CC/SOP'/AppleUVDM] AUVDM mode not active
default 04:40:14.073422+0100 kernel IOPortTransportProtocolAppleUVDM::terminate - [Port-USB-C@3/CC/SOP'/AppleUVDM] terminating
default 04:40:14.073430+0100 kernel IOPortFamily::terminate(): [Port-USB-C@3/CC/SOP'/AppleUVDM] Terminating Port-USB-C@3/CC/SOP'/AppleUVDM...
default 04:40:14.073899+0100 kernel IOPortTransportProtocolAppleUVDM::poweredStart - [Port-USB-C@3/CC/SOP'/AppleUVDM] Start time: 1757994014s,71471us, finish time: 1757994014s,73899us, status=0xE00002C7
default 04:40:14.074018+0100 kernel IOPortTransportProtocol::stop(): [Port-USB-C@3/CC/SOP'/AppleUVDM] Stopping protocol...
default 04:40:14.074033+0100 kernel IOPortFamily::stop(): [Port-USB-C@3/CC/SOP'/AppleUVDM] Stopping Port-USB-C@3/CC/SOP'/AppleUVDM...
default 04:40:14.078206+0100 kernel IOPortTransportState::setNominalSignalingFrequencies(): [Port-USB-C@3: USB2] Setting nominal signaling frequencies... (nominalSignalingFrequenciesHz: YES, nominalSignalingFrequenciesHz.count: 1)
default 04:40:15.079035+0100 kernel IOPortTransportState::setNominalSignalingFrequencies(): [Port-USB-C@3: USB2] Setting nominal signaling frequencies... (nominalSignalingFrequenciesHz: YES, nominalSignalingFrequenciesHz.count: 3)
default 04:40:15.444782+0100 kernel IOPortTransportState::setNominalSignalingFrequencies(): [Port-USB-C@3: USB2] Setting nominal signaling frequencies... (nominalSignalingFrequenciesHz: YES, nominalSignalingFrequenciesHz.count: 1)
default 04:40:16.446249+0100 kernel IOPortTransportState::setNominalSignalingFrequencies(): [Port-USB-C@3: USB2] Setting nominal signaling frequencies... (nominalSignalingFrequenciesHz: YES, nominalSignalingFrequenciesHz.count: 3)
default 04:40:16.871942+0100 kernel IOPortTransportState::setNominalSignalingFrequencies(): [Port-USB-C@3: USB2] Setting nominal signaling frequencies... (nominalSignalingFrequenciesHz: YES, nominalSignalingFrequenciesHz.count: 1)
default 04:40:17.872587+0100 kernel IOPortTransportState::setNominalSignalingFrequencies(): [Port-USB-C@3: USB2] Setting nominal signaling frequencies... (nominalSignalingFrequenciesHz: YES, nominalSignalingFrequenciesHz.count: 3)
default 04:40:18.184192+0100 kernel IOPortTransportState::handleStateChange(): [Port-USB-C@3: USB3] Handling state change...
default 04:40:18.184225+0100 kernel IOServiceNotificationManager::sendMessages(): [Port-USB-C@3/USB3] Sending 2 message(s)... (m_propertyChanged: YES)
default 04:40:18.184343+0100 kernel IOAccessoryTRM::_processNotifications(): Processing notifications...
default 04:40:18.184357+0100 kernel IOAccessoryTRM::_handleNotifications(): Handling notifications...
default 04:40:18.186002+0100 kernel IOAccessoryTRM::_handleNotificationGated(): Handling Attach/Detach/AccessoryDetected/ConfigChange/USBConnectChange notification... (m_mgrPrimaryPortID: 259)
default 04:40:18.186022+0100 kernel IOAccessoryTRM::_handleNotificationGated(): supervisedAccessoryAttached: YES, m_status.supervisedAccessoryAttached: YES (m_mgrPrimaryPortID: 259)
default 04:40:18.359183+0100 kernel IOPortTransportState::setNominalSignalingFrequencies(): [Port-USB-C@3: USB2] Setting nominal signaling frequencies... (nominalSignalingFrequenciesHz: YES, nominalSignalingFrequenciesHz.count: 1)
Code: Select all
default 04:42:31.040214+0100 kernel IOPortTransportState::setNominalSignalingFrequencies(): [Port-USB-C@3: USB2] Setting nominal signaling frequencies... (nominalSignalingFrequenciesHz: YES, nominalSignalingFrequenciesHz.count: 3)
default 04:42:31.067797+0100 kernel IOPortFeaturePower::removePowerSources(): [Port-USB-C@3/Power In] Removing all power sources...
default 04:42:31.068538+0100 kernel IOPortTransportState::handleMetadataChanges(): [Port-USB-C@3: CC] Handling metadata changes... (shouldReregisterService: NO, m_handleMetadataChangesRecursionCount: 0)
default 04:42:31.068546+0100 kernel IOPortTransportState::_updatePreDefinedMetadataProperties(): [Port-USB-C@3: CC] Updating pre-defined metadata properties...
default 04:42:31.068597+0100 kernel IOServiceNotificationManager::handleServiceReregistration(): [Port-USB-C@3/CC] Re-registering service...
default 04:42:31.068605+0100 kernel IOPortTransportState::registerService(): [Port-USB-C@3: CC] Registering service CC@(null)... (transportType: 1, provider: Port-USB-C@3)
default 04:42:31.068837+0100 kernel IOPortTransportState::handleMetadataChanges(): [Port-USB-C@3: CC] Handling metadata changes... (shouldReregisterService: NO, m_handleMetadataChangesRecursionCount: 0)
default 04:42:31.072423+0100 kernel IOPort::_removeTransport_block_invoke(): [Port-USB-C@3] Removed transport! (transport: Port-USB-C@3/USB2)
default 04:42:31.072459+0100 kernel IOPortFamily::handleMetadataChanges(): [Port-USB-C@3] Handling metadata changes... (shouldReregisterService: NO)
default 04:42:31.072464+0100 kernel IOPortFamily::_updatePreDefinedMetadataProperties(): [Port-USB-C@3] Updating pre-defined metadata properties...
default 04:42:31.072480+0100 kernel IOPort::_updateConnectionActive_block_invoke(): [Port-USB-C@3] m_connectionActive: NO, m_connectionCount: 57, m_connectionUUID: NULL
default 04:42:31.072490+0100 kernel IOServiceNotificationManager::sendMessages(): [Port-USB-C@3] Sending 2 message(s)... (m_propertyChanged: YES)
default 04:42:31.072530+0100 kernel IOPort::_setUserAuthorizationStatus(): [Port-USB-C@3] userAuthorizationStatus: 0 [Not Required]
default 04:42:31.072568+0100 kernel IOServiceNotificationManager::sendMessages(): [Port-USB-C@3] Sending 3 message(s)... (m_propertyChanged: YES)
default 04:42:31.072741+0100 kernel IOPortFamily::registerService(): [Port-USB-C@3] Registering service... (providerPath: IOService:/AppleARMPE/arm-io/AppleT600xIO/i2c0@9B040000/AppleS5L8940XI2CController/hpmBusManager@6B/AppleHPMBusController/hpm2/AppleHPMARMI2C/AppleHPMDevice@3B, options: 8)
default 04:42:31.072788+0100 kernel IOAccessoryTRM::_processNotifications(): Processing notifications...
default 04:42:31.072802+0100 kernel IOAccessoryTRM::_handleNotifications(): Handling notifications...
default 04:42:31.072916+0100 kernel IOAccessoryTRM::_processNotifications(): Processing notifications...
default 04:42:31.073060+0100 kernel IOPortFamily::registerService(): [Port-USB-C@3] Registering service... (providerPath: IOService:/AppleARMPE/arm-io/AppleT600xIO/i2c0@9B040000/AppleS5L8940XI2CController/hpmBusManager@6B/AppleHPMBusController/hpm2/AppleHPMARMI2C/AppleHPMDevice@3B, options: 8)
default 04:42:31.073091+0100 kernel IOAccessoryTRM::_processNotifications(): Processing notifications...
default 04:42:31.073092+0100 kernel IOAccessoryTRM::_processNotifications(): Thread call cancelled! (already pending)
default 04:42:31.077683+0100 IOUIAgent messageType: kIOPort_Message_AuthorizationStateChange
default 04:42:31.082401+0100 kernel IOPortFeaturePower::removePowerSources(): [Port-USB-C@3/Power In] Removing all power sources...
default 04:42:31.082470+0100 kernel IOServiceNotificationManager::sendMessages(): [Port-USB-C@3] Sending 2 message(s)... (m_propertyChanged: YES)
default 04:42:31.082479+0100 kernel IOAccessoryTRM::_handleNotificationGated(): Handling Attach/Detach/AccessoryDetected/ConfigChange/USBConnectChange notification... (m_mgrPrimaryPortID: 259)
default 04:42:31.082488+0100 kernel IOAccessoryTRM::_handleNotificationGated(): supervisedAccessoryAttached: NO, m_status.supervisedAccessoryAttached: YES (m_mgrPrimaryPortID: 259)
default 04:42:31.082493+0100 kernel IOAccessoryTRM::_updateStatusGated(): Updating status...
default 04:42:31.082503+0100 kernel IOAccessoryTRM::_updateStatusGated(): *** UAAA *** (m_mgrPrimaryPortID: 259)
default 04:42:31.082545+0100 kernel IOAccessoryTRM::_setPropertiesGated(): Setting USB Restricted Mode: NO... (m_mgrPrimaryPortID: 259)
default 04:42:31.082586+0100 kernel IOAccessoryTRM::_setPropertiesGated(): *** supervisedTransportsRestricted: NO *** (m_mgrPrimaryPortID: 259)
default 04:42:31.082587+0100 kernel IOAccessoryTRM::_setPropertiesGated(): Published RM status! (supervisedTransportsRestricted: NO, supervisedAccessoryAttached: NO, state: 1, gracePeriodReason: 1) (m_mgrPrimaryPortID: 259)
default 04:42:31.082607+0100 kernel IOAccessoryTRM::_handleNotificationGated(): Handling Attach/Detach/AccessoryDetected/ConfigChange/USBConnectChange notification... (m_mgrPrimaryPortID: 259)
default 04:42:31.082608+0100 kernel IOAccessoryTRM::_handleNotificationGated(): supervisedAccessoryAttached: NO, m_status.supervisedAccessoryAttached: NO (m_mgrPrimaryPortID: 259)
default 04:42:31.082617+0100 kernel IOAccessoryTRM::_handleNotificationGated(): Handling Attach/Detach/AccessoryDetected/ConfigChange/USBConnectChange notification... (m_mgrPrimaryPortID: 259)
default 04:42:31.082621+0100 kernel IOAccessoryTRM::_handleNotificationGated(): supervisedAccessoryAttached: NO, m_status.supervisedAccessoryAttached: NO (m_mgrPrimaryPortID: 259)
default 04:42:31.082624+0100 kernel IOAccessoryTRM::_handleNotifications(): Handling notifications...
default 04:42:31.082787+0100 kernel IOPortTransportComponent::stop(): [Port-USB-C@3/CC/SOP'] Stopping component...
default 04:42:31.082803+0100 kernel IOPortFamily::stop(): [Port-USB-C@3/CC/SOP'] Stopping Port-USB-C@3/CC/SOP'...
default 04:42:31.082990+0100 kernel IOPortTransportStateUSB3::stop(): [Port-USB-C@3: USB3] Stopping IOPortTransportStateUSB3...
default 04:42:31.082998+0100 kernel IOPortTransportStateUSB::stop(): [Port-USB-C@3: USB3] Stopping IOPortTransportStateUSB3...
default 04:42:31.083004+0100 kernel IOPortTransportState::stop(): [Port-USB-C@3: USB3] Stopping IOPortTransportStateUSB3... (this: USB3@(null), provider: Port-USB-C@3)
default 04:42:31.083014+0100 kernel AppleNotificationQueue::disableNotifications(): Disabling notifications...
default 04:42:31.083022+0100 kernel AppleNotificationQueue::dropAllNotifications(): Dropping all 0 notifications...
default 04:42:31.083107+0100 kernel IOPortTransportStateUSB2::stop(): [Port-USB-C@3: USB2] Stopping IOPortTransportStateUSB2...
default 04:42:31.083112+0100 kernel IOPortTransportStateUSB::stop(): [Port-USB-C@3: USB2] Stopping IOPortTransportStateUSB2...
default 04:42:31.083116+0100 kernel IOPortTransportState::stop(): [Port-USB-C@3: USB2] Stopping IOPortTransportStateUSB2... (this: USB2@(null), provider: Port-USB-C@3)
default 04:42:31.083121+0100 kernel AppleNotificationQueue::disableNotifications(): Disabling notifications...
default 04:42:31.083126+0100 kernel AppleNotificationQueue::dropAllNotifications(): Dropping all 0 notifications...
error 04:42:31.241689+0100 kernel [ERROR] [@: USB2] Transport has been terminated, ignoring method invocation!
default 04:42:31.241708+0100 kernel IOPortTransportState::setNominalSignalingFrequencies(): [@: USB2] Setting nominal signaling frequencies... (nominalSignalingFrequenciesHz: NO, nominalSignalingFrequenciesHz.count: 0)
error 04:42:31.241715+0100 kernel [ERROR] [@: USB2] Transport has been terminated, ignoring method invocation!
EDIT
This mornning I tried removing the ESD chip and soldering wires directly from D+/D- to the ESD input pads. It's now detected and I can upload this test sketch via USB:
Code: Select all
void setup() {
Serial.begin(115200);
delay(1000);
}
void loop() {
Serial.println("USB Test");
delay(1000);
}
It looks like it must be a problem with the ESD chip then. Any ideas? It is a USBLC6-2 (https://www.lcsc.com/datasheet/C15999.pdf) which I've seen recommended by other people.
Last edited by roomz98 on Tue Sep 16, 2025 3:11 pm, edited 1 time in total.
Re: ESP32-S3 USB CDC not working, no device detected
Ah, sorry, for some reason I thought I read you were on Linux; the kernel messages are a lot more informative for USB debugging there.
On the ESD chip: That's odd indeed. You sure you didn't accidentally get an USBLC6-4 instead of an USBLC6-2? Also, in your layout, I don't see a connection for the 'gnd' pin of that chip, bit I can't really see how that'd interfere with USB communications.
On the ESD chip: That's odd indeed. You sure you didn't accidentally get an USBLC6-4 instead of an USBLC6-2? Also, in your layout, I don't see a connection for the 'gnd' pin of that chip, bit I can't really see how that'd interfere with USB communications.
-
toybuilder
- Posts: 9
- Joined: Thu Jan 31, 2019 6:02 pm
Re: ESP32-S3 USB CDC not working, no device detected
It looks schematically correct and layout looks like it should be fine.* The USB data pins go through and ESD diode straight to D+/D- on the ESP
I once accidentally substituted USBLC6-4 and it took me a day or two to realize what had happened. You can't sub -2 and -4 with each other.
Who is online
Users browsing this forum: Google [Bot], Semrush [Bot] and 4 guests
