Some points to note about the 22k vs 10k resistor pullup (Rp) and its potential affects on devices.
- 22k results in idle 0.88V. Idle is the voltage between CC messages.
- 10k results in idle 1.6V. Idle is the voltage between CC messages.
- the CC messages swing between 0 and 1.2V
- Current = V / (Rp + Rd)
5V / (22k + 5.1k) = 0.184mA
5V / (10k + 5.1k) = 0.331mA - Current affects noise immunity. More current == better noise immunity. So the 10k case is about twice as noise immune as the 22k case. Note: lot of other factors also affect noise immunity, this is just one of them.
- Using idle of 0.88V makes the detection of the first bit of the CC message difficult to get right. It sometimes adds an extra bit, sometimes drops the first bit.
- Every non-FW laptop I tested with uses the 1.6V idle option. I have only found the FW16 laptop using the 0.88V idle option.
- Every USB device I have negotiates the power using the CC messages. I don’t have any devices that only used the 22k/10k to decide how much power to draw.
- Only USB-C has CC messaging, so the 22k/10k only affects things one plugs into USB-C ports. Those are all normally modern components and thus unlikely to only use the 22k/10k to decide on current draw.
- The CC message detection logic in USB-C chips is normally done in hardware so firmware updates are unlikely to make them better at detecting CC messages. There are a lot of problematic USB-C chips out there.
- When problem cycling devices are instead plugged into USB-A ports, they have worked OK. My theory on that, is that USB-A does not have CC messages, and thus the Rp resistor is not involved at all with USB-A, so those obviously will work. E.g. the problem iPhone noted in other threads. USB-A uses different pins for negotiation messages and also different modulation.
USB-A uses: Frequency Shift Key (FSK) modulation coupled onto the VBUS wire.
USB-C uses: Bi-phase mark code (BMC) encoding onto the CC1/CC2 wire. - I don’t exactly know why the USB-C standard chose BMC. FSK is much better at noise immunity than BMC. It is interesting to note the USB-C supports both. It says all devices must do BMC and FSK is optional, but it might be worth the FW16 falling back to FSK if the BMC negotiation fails.
Summary:
My advice to FW, for design future main-boards, is to design them so that they can all use the 10k Rp and have associated over current protection so if devices draw too much, it will not damage the main-board. This will make the future FW main-boards have better compatibility with a wider range of USB-C devices.
As a work around, but just for me, I will be adding an EC command, so that I can change the Rp on one of the USB-C ports to output idle 1.6V. So that I can connect these problematic cycling USB-C devices to that one port and at least they will connect and not cycle.