We are using the ADuM4160 on several PCBs to isolate full-speed USB peripherals. As we are facing some enumeration problems I was investigating a little bit on the ADuM4160 and didn't see the expected Pull-Up behavior on it's upstream D+ line.
On upstream-side (Host) we have 5V connected through a 10R series resistor to VBus1, decoupled by 100nF to GND1. VDD1 is also decoupled by 100nF to GND1, PDEN is connected to VDD1, SPU is also connected to VDD1 and series termination 24R resistors are added to upstream USB-lines. On downstream-side (Peripheral) we have 3.3V connected through a 10R series resistor to VBus2 and VDD2. Both are decoupled by 100nF to GND2 each. SPD is connected to VDD2 and PIN is connected through a 10k Pull-Up to VDD2.
I would expect to see an active Pull-Up on upstream D+ in this configuration but I can't see it on my scope. I've already isolated the ADuM4160 from all USB-lines so I would expect to see a static high level on Upstream D+ but it is always low. Only at power-up I can see a short 1-2 us pulse (no clear high-level) on it, which is to short to be recognized as a connection signal (USB2.0 specification requires a high level of at least 2us on D+ for connection signaling) on HUB side. I've also removed the 10R series resistors in the power supplies and tied the PIN input directly to VDD2 but this seems not to change anything.
If there is some device present on downstream-side which pulls it's D+ line high enumeration starts but if I'm right we shouldn't need a Pull-Up on downstream-side using ADuM's Pull-Up capability.
What I'm missing? Isn't the ADuM's upstream Pull-Up always active if PIN is tied to VDD2?
When you enable the pull-up with the PIN input, it applies the appropriate pull-up based on the SP pin on the upstream side. If PIN is deselected it forces the upstream side pull-up to be disconnected. If you do not have a pull-up or device present on the downstream side, the inputs are pulled low by the pull down resistors, forcing a single ended 0. That is transmitted to the upstream side where the output drives the output to SE0 against the applied pull-up. In other words, if you have no peripheral plugged into the downstream side, it makes the upstream side look like an disconnected port. Otherwise the host would be trying to enumerate with no peripheral present. I think it is working properly.
Reading your statement I'm a little bit confused about the sense of ADuM's integrated pull-up feature. If I'm summing up correctly:
I've made some tests and on my opinion the functionality of the PIN input looks like to behave more as upstream-side enable than only a pull-up enable.
So if my observations are right, we should leave the PIN input connected to VDD2 and use the integrated pull-up of the device connected to ADuM's downstream-side to control USB connect/disconnect?
Sorry for the delay, I went back and talked to the designer to get a more detailed and nuanced explanation. The PIN function will stop transmission internally in the isolator and it puts the upstream buffers into high Z mode. I neglected this point in my earlier message. Since the cable has pull down on the upstream side, it pulls the UD+ and UD- to ground. This effectively looks like a disconnected cable from the host point of view. So the PIN function will disconnect the peripheral and then allow it to re-enumerate when it is reapplied.
So to your scenarios;
No device on downstream side, if PIN is asserted it initially goes to an idle J due to the pullup, which you have seen, this is transmitted to the downstream side where it is a driven J for a while but times out and goes Idle. Since there is no pull up present the 15kohm pull downs draw it to single ended 0. This is seen as a transition and driven back to the upstream side. Since this is not an idle state it will continue to be driven pulling UD+/UD- to SE0.. If PIN is not asserted, then it is SE0 because UD+/UD- are high z with no pull up and the pull downs pull It there. This is desirable behavior since an empty downstream port should look like a disconnected cable to the host, not an idle J.
Device with integrated pull up. Will go to J if PIN is asserted and the enumeration process will begin, to SE0 if not looking like a disconnected cable.
Device with no pull-up, same as the first case, it looks like an unconnected downstream device that eventually looks like a single ended 0 to the host.
The function of PIN is to delay or restart enumeration, it is not really intended to be used for control of the pullup during data transfer. The ADuM4160 does not have enough intelligence to respond directly to a host, it is meant to get as much out of the way as possible and its functions can not be considered independently of the peripheral it is working with.
I hope this clarifies the operation.
Thank you for your clarification.