USB 2.0 Billboard means the cable is charge-only
Plugged an ESP32-class dev board into the Mac. Instead of a serial port, macOS showed it as a USB 2.0 BILLBOARD device from VLI Inc., vendor ID 0x2109. No /dev/cu.usbmodem* to be found.
What was happening
$ ls /dev/cu.*
/dev/cu.Bluetooth-Incoming-Port
$ ioreg -p IOUSB -l -w 0 | grep -A2 -i 'billboard\|cp210\|ch9102'
+-o USB 2.0 BILLBOARD@01100000 <class IOUSBHostDevice...
| "USB Vendor Name" = "VLI Inc."
| "Product ID" = 0x2109
No CP210x. No CH9102. No serial port at all. The device had power, the LEDs came up, but there was nothing on the USB bus to talk to.
What I found
A Billboard device is what USB-C cables report when the alternate-mode negotiation fails. It's the spec's way of saying "I'm a cable that can't do what you tried to do." For a dev board, that almost always means data lines are missing in the cable. Charge-only USB-C cables only wire the two power pairs and CC; they leave the USB 2.0 D+/D- and the SuperSpeed pairs unpopulated. The device powers up, but the host enumerates the cable as a passive Billboard device instead of letting the chip downstream of it speak USB.
Cables I've confirmed work fine in this scenario:
- The cable that ships in the box with a MagSafe charger for recent iPhones
- iPad and iPad Pro USB-C cables
- Cables that come in the box with the reTerminal or similar dev boards
- Apple Studio Display / Thunderbolt cables
Cables that have consistently failed:
- Generic "fast charge" USB-C cables from the cheap end of Amazon
- Braided travel cables that only advertise wattage, not data
- Anything labeled "100W charging" with no mention of USB 2.0 or USB 3.x
The fix
Swap the cable. That's the whole fix. If you still get a Billboard device with a known-good data cable, then it's worth troubleshooting the device — try force-download mode (usually a button combo specific to the board), check whether the onboard USB-serial chip is healthy, etc.
Diagnostic one-liner I keep around:
ioreg -p IOUSB -l -w 0 | grep -B1 -A4 -i 'billboard'
If anything shows up, the cable is lying to your computer.
What I'd do differently
I now keep two cables physically zip-tied to my dev bench labeled "DATA" so I don't grab the wrong one off the desk. Sounds dumb, but I've burned an hour more than once on this exact problem.