> Just to be entirely clear: While a cheap cable may be wrong, good (i.e. fully featured) cables will always work in all combinations.
Per the spec, yes. But devices may have hardware design issues making this untrue, as in the article. As I understand it, the Pi 4 works correctly with cheaper cables, but not with more expensive ones:
> When combined with more capable cables (handling SuperSpeed data, or 5A power) this configuration will cause compliant chargers to provide 0V instead of 5V to the Pi.
> But devices may have hardware design issues making this untrue, as in the article.
Yes, but defective devices do not really go into the USB-C complexity consideration. They go into the trash bin.
We can't blame USB-C for people disregarding the spec, especially as this is not a hard part of it. We can only blame it for the fact that we do have different "classes" of devices, where the main way out is to only get the highest class.
Having run all-USB-C (and not using Apple products) for a few years now, I have never myself bumped into a product that was defective. Everything always worked as advertised.
The spec does try and make it simple to build compliant devices for basic features. It's only if you want higher power or bandwidth than the existing USB 2.0 that you need any kind of digital logic.
For instance, a USB-C analog headphone adaptor is just some resistors and the connectors themselves, and a USB A-C cable just requires a single extra resistor so the USB C device knows there is a USB A plug on the other end and not to draw too much current. Unfortunately, dodgy manufacturers got even that wrong, see https://www.extremetech.com/computing/217556-google-engineer...
Simple to build simple devices is the wrong metric. The goal should have been that simple devices would be cheap enough at scale and, critically, the the correct way to build a simple device would be at least as easy as the lazy way that sort of works.
The spec sure is a mouthful, but I find strong evidence that the spec isn't at fault.
The reason is the most common type of error: USB type A to type C cables using a wrong termination resistor value, signalling far too high current. We're talking about a table of currents to resistors with 3 rows: Default USB current (56K), 1.5A (22K) and 3.0A (10K).
Now, if the mistake had been in the parts that deal with orientation detection, PD protocol, alternate modes, or just dealing with the high speed signals pumping up to 40Gb/s through these cables, then we could agree that it might be complicated.
But if you can't pick a resistor from 3 values, then I don't know how one would write a spec that would be readable to you.
As far as I can tell, the spec could have been designed so that having so resistor at all would indicate a baseline cable. Since no resistor is cheaper than a resistor, the cheap cables would omit the resistor and all would be well.
> As far as I can tell, the spec could have been designed so that having so resistor at all would indicate a baseline cable.
Isn't that exactly how the spec is? AFAIK, a baseline cable has no resistor, the resistors are on the devices on either end. Only "electronic marked" cables have a resistor, and that's where the RPi4 fails: they shorted together the pin which has the configuration wire to the other end (where the device on the other end has one of its pair of resistors) with the pin which on a baseline cable has nothing at all, but which on a more advanced cable has a resistor connected to ground. So when there's no resistor at all (baseline cable) it works; when there's a resistor, the current flows through a wrong path and the voltage ends up in the range for a different kind of device.
It could not. I presume that by "baseline", you refer to a USB2.0 Type A to Type C cable.
USB type C is designed to remain passive until it knows if something is connected, and what it is. For most cable types, orientation must also be detected.
This means that there must be something in the cable/plug. This could of course have been a short, but to do that, those pins would have to be dedicated to detecting dumb cables.
Having no pins to waste, a resistor is used instead, which allows not only allows for multiple values for detection, but leaves the pins usable for transmission while detect resistors are in place (Power Delivery, Alternate Modes).
And there is absolutely no issue in that resistor. Everyone found the table, but either failed to read the 3 values, or decided "Hey, more amps is better!", ignoring whether or not the type A end would actually be able to supply it.
Any spec will always have some way of building devices that violate the spec but happen to work some of the time. There's no way around that, which means that blaming the spec and complaining that you "need to throw out working devices" isn't going to help you.
You were talking about how many combinations there were of cables, which is always solvable by choosing the good cables. There is no cable type for defective devices, so that does not change anything.
What the rPI did would be akin to a micro-USB device using data pins for power. Such device would be defective, and not "another type" of micro-USB.
The mistake they made is really easy to make accidentally. The USB-C spec is complicated and cables aren't marked. Many folks still don't know there are multiple types of cables.
To be honest, the complicated parts are not where the mistakes are made. Routing 40Gb/s is hard. Placing one or two resistors is not.
But agreed that marking could be better—maybe marking lower cables as "charge" cable somehow. At least Thunderbolt cables are distinctly marked, and will become merged in USB4.
> good (i.e. fully featured) cables will always work in all combinations.
AIUI, that's actually what's going wrong here. It only works if the charger+cable combo are both dumb enough. If there's enough fully-featured components to try to negotiate properly, the pi can't negotiate and it fails.
Using usb-c for power should have been a win. But they didn't - they just used a usb-c socket for power. There's a difference.
I'd love to know then why my Nintendo switch(very expensive) doesn't charge at all when using the genuine OnePlus USB A-C cable(very expensive) and their own OnePlus charger(also pretty expensive). It's not just cheap mislabeled crap that sometimes doesn't work - it's proper hardware from big companies that failed the simple "if the cable fits then it has to work" test.
OnePlus has had their own proprietary charger game running for quite a while now. It's likely related to that. The Switch uses stock USB-C Power Delivery, so Macbook and Pixel chargers would be fine.
A compliant "full featured" cable could very well disable high voltage or high current negotiation. It's impossible for all cables to work in all combos.
Having gone all in on Type-C, I have only ever gotten a "bad" cable as a cheap charge cable, and have never had issues with cable incompatibilities.