2025-12-17 8:12 PM
We have been playing with the NUCLEO-C071RB for a few weeks, waiting for our first revision of a board using the STM32C071KBT to be fabricated and assembled. We got most things going without issue, including USB CDC + HID. Power up of the custom board went smoothly in that there was no smoke, however getting basic things going has been a struggle.
Initial notes:
1. The MCU is connected to a DFP of a Microchip HUB (USB5744).
2. One of the goals was to ensure the HUB could startup / enumerate even when the MCU was blank, and hopefully end up in DFU mode, for initial programming (just enumerated under the HUB vs direct connect to HOST). As such, we did our best to ensure pins were connected such that they do not trigger one of the other boot loops (and for example, get stuck in UART, etc.), or cause odd behavior with the HUB especially. We reviewed AN2606 about a million times.
Issues and observations:
1. We can't seem to get the MCU USB to enumerate (at all). Doesn't show up as DFU (when blank), or when we are trying to run our initial application.
2. Still digging into it, but perhaps related... Is PC6 was connected to VBUS_DET of the HUB (with resistors to ensure only 3.3V maximum). There is zero mention of this pin in AN2606, so it was assumed HiZ. What it looks like, is that there is a 40K pull-down (which lines up with a "typical" pulldown for the IC)... which was initially keeping the HUB from enumerating. We modified resistor values so that at least when blank its ~2.7V which is sufficient for the HUB. This sort of works (HUB enumerates, although still strange behavior sometimes)...
When we try setting PC6 as input (with no PU or PD), the voltage remains at ~2.7V. Why? Is there something special about this pin we are missing? I couldn't find anything in the datasheet, errata, or boot document.
3. We tried cutting the PC6 trace (on one board) so VBUS_DET goes to 3.3V now, and some of the other strange behaviors are gone... needs more experimentation tomorrow.
4. On a board where we did not cut it (yet)... When we step through the code, as soon as we hit this:
/* Enabling DP Pull-UP bit to Connect internal PU resistor on USB DP line */
USBx->BCDR |= USB_BCDR_DPPU;We lose connection with the debugger, and we see a series of pulses on VBUS_DET:
Not observed on NUCLEO (we can step over this without issue - although its not connected to this HUB).
5. When the HUB is not misbehaving (due to the MCU), the UFP and all DFP's (minus the one going to the MCU) are fine - USB2 / 3 memory sticks enumerate to connected host as expected / desired.
We re-reviewed the NUCLEO-C071RB schematic again today... and the only thing that at all stuck out was the VBUS sense going to a different pin. It is unclear what the issue is, why this PC6 does not seem to behave like expected (no pull-down, and these odd pulses), or why enumeration is not working (as it did on the NUCLEO). Pretty sure we have everything connected as required:
I even went as far as applying 3.3V via external 1.5K pull-up to D+ today (holding MCU in reset)... HUB remained enumerated, however I got a device not recognized message in USBTreeView (which is expected because obviously there is no device to enumerate) - but I did see a series of toggles on D+, which is presumably the HUB trying to enumerate things.
Thoroughly stumped - any help or thoughts or insights - things I can try or report back on to help get this going? Would love to get the basics going before the holiday.
Thanks ahead of time!