The new pi has been released and it has a USB Type-C connector for power however people are finding some chargers are not working with it (notably macbook chargers). Some have speculated that this is due to a manufacturer limitation on the power supplies however it is actually due to the incorrect detection circuitry on the Pi end of the USB connection.
For those looking for a solution for the problem and and aren’t interested in the technical details a set of potential solutions are given at the end of this post
The root cause of the problem is the shared cc pull down resistor on the USB Type-C connector. looking at the reduced pi schematics we can see it as R79 which connects to both the CC lines in the connector.
With most chargers this wont be an issue as basic cables only use one CC line which is connected through the cable and as a result the pi will be detected correctly and receive power. The problem comes in with e-marked cables which use both CC connections. To understand this lets look at the Type C specification document.
Per the spec the source device doesn’t provide power on the connector until it detects a sink device being attached. which is done by the presence of the Rd resistor (5.1K ohms) to ground. Active cables also signal their presence using another value or resistor Ra (800 ohms – 1200 ohms). The Type-C specification has a table for looking up what is connected based on the state of the CC lines.
In the correct operation the charger will sense the Rd resistor (Or Rd Ra cobination) and turn on the power. The problem comes when an active cable which presents an Ra at both ends is used. On the source side one CC pin will be connected to the Ra resistor in the cable and the other to the CC line to the Pi. The Pi has connected both lines together so presents the combination of the Ra at the pi end of the cable and the Rd pulldown. Calculating the presented resistance assuming a average value of Ra still gives a value well within the Ra range (also note Ra resistances are permitted to go below 800 when cable electronics are drawing power so a resistance lower than 800 will also likely be detected as Ra).
With effectively two Ra values presented to the Source end it will detect the Pi as an “Audio Adaptor Accessory”. These are analogue audio interfaces to allow for headphones to be connected to phones for example (although some phones use headphones/adaptors with inbuilt sound-cards which appear as USB devices). The audio adaptor accessory also allows the phone to be charged through the adaptor. This means the the device should not provide power on the Vbus pins which means no power for the Pi.
In order to test this I attempted to power the pi with a macbook charger and its e-marked cable and it didn’t receive power. Two other chargers (a pixel 3 charger and an office electrics desk charger) where tested with the macbooks active cable and none powered the pi. When tested with a couple of non e-marked cables the pi was powered by all the chargers. This lines up with what is expected.
With regards to manufacturer limitations it is possible for chargers and devices to limit which devices they will use however this is only applicable for power deliver modes (higher voltages and currents) as the basic detection doesn’t give scope for such communication to occur.
While this write-up focuses on units with detachable e marked cables as this has a clear set of detection steps when the CC lines are shorted. the problem could also happen with integrated cables if they are interfacing with both CC lines and dislike them being connected.
Now onto some solutions. Assuming the issue you are having is caused by the problem discussed above, using a non e-marked cable (most USB-C phone charger cables are likely this type) rather than an e-marked cable (many laptop charger/thunderbolt cables and any 5A capable cable will be in this category) will allow for the pi to be powered. In addition using older chargers with A-C cables or micro B to C adaptors will also work if they provide enough power as these don’t require CC detection to provide power. Ultimately though the best solution in the long run will be for there to be a board revision for the pi 4 which adds the 2nd CC resistor and fixes the problem.
In conclusion. If you want your USB Type-C devices to work correctly then you need to have two independent CC resistors. If you are interested in adding Type-C connector to your project and don’t want to read the whole spec to do so I have previously written a guide on how to do so.
Since this was published Eben Upton from the Raspberry pi foundation has commented that he expects this will be fixed in a future board revision in comments reported on Techrepublic, no word yet on timings on the release of this revision though.
* 2019/06/28: Added additional information on solutions.
* 2019/07/04: Added test results and checked details on a pi.
* 2019/07/08: Added link to conformation from raspberry pi foundation