Question
In a current design of a medical device, i have to establish an isolated USB
connection between a PIC microcontroller and a host and I intend to use the
ADuM4160 for that purpose. My microcontroller therefore serves the role of an
USB 2.0 USB device.
However, I have some questions about the correct wiring/usage of some pins
between ADuM4160 and the microcontroller (PIC18F2550 / dsPIC33Exx).
1.) How to use the internal pullups of ADuM4160 together with pullups availabe
integrated into the microcontroller?
If I have understood the PIN input functionality correctly, the (ADuM-)internal
pullup serves two purposes: It is first used for signaling attachment to the
host. The internal uC pull-up can’t be used for this anymore because of the
isolation barrier and thus I have to use the PIN pin to enable the pull-ups on
the other side of the isolation barrier. That point is clear so far.
a.) The other thing the (uC or ADuM-)internal pull-ups can do is create the
idle state of the bus.
It isn’t clear to me if the internal pull-up in the ADuM4160 is required or not
in this case.
b.) The datasheet refers to lots of “smarts” and “control logic” that determine
the state of the isolation drivers. The microcontroller needs to see the idle
state and not the reset state. If the isolator control logic doesn’t allow the
idle state to be pushed back to the micro, then if I disable the internal micro
pull-ups, the device would not work. If the isolator does push the idle back to
the device, then I should be able to disable the internal pull-ups. Could you
give me an advice on how to use the PIN controlled pullup of the ADuM correctly
together with the micro-controller internal pullups?
2.) Powering the isolator (VBUSx)
a.) I want to use the micocontroller in a self-powered scenario, but the
upstream side of the isolator should derive its power from VBUS voltage of the
USB bus. Therefore, I use the following "voltage-setup" on the upstream side of
the Isolator: SPU, PDEN, VBUS1 as well as VDD1 are all connected to VBUS of the
USB port.
The question on the upstream side is: The datasheet notes that it is possible
to supply this side by only 5V on VBUS1 and Vdd1 open (internal regulator
establishes 3V3 on VDD1) or apply 3.3V on both VBUS1 and VDD1. It is also ok to
connect both VBUS1 and VDD1 to 5V as I described above?)
b.) Concerning the downstream side and usage of the PIN input:
Since the upstream side is powered from VBUS and the Isolator draws some
current from the bus, the USB spec says that I have 100ms time-span from the
time instance at which VBUS is established to pull the PIN high.
c.) I should not have PIN tied high when it is not connected to the bus. If I
connect PIN to the Vdd2 pin and VBUS2 to the VBUS of the USB port, I will meet
both requirements, but this is useless since I loose the isolation property If
i power both sides of the isolator by VBUS, right?
Therefore, I would run both VBUS2 and VDD2 pins on an seperated, device-side
3V3 supply. But how should i operate the PIN line?
d.)(If the peripheral would be comlpetey self-powered and draws no power from
the USB power, then i could set the PIN via the microcontrolelr at any time as
long as VBUS is detected, but since i supply the isolator upstream side via
VBUS of the USB port, I have to respond in time!?)
Answer
1.)
a.) The ADuM4160 can be thought of as creating two separate USB busses, one on
each side of the barrier. Each of these busses must have a pullup connected to
the appropriate data line to give the correct idle state and pull downs on both
lines to make sure that disconnected lines are pulled down properly. So the uC
can use its internal pullups and the downstream port of the ADuM4160 will
provide the pull downs.
b.) In the upstream side of the ADuM4160, we have internal pullups under the
control of SPU and PIN. SPD determines some buffer parameters and controls
which line is connected to the pullup. PIN will apply the pullup when it is
high. This allows the enumeration to be controlled with a logic pulse from the
downstream side. PIN can be either tied high or connected to a GPIO port on the
uC. It also allows the peripheral to force a re-enumeration by pulling PIN low
and the taking it high again. It looks to the host like the cable was
disconnected then reconnected.
2.)
a.) No, this will not harm the ADuM4160, but it will cause the I/O voltages to
have a 5V logic. This is not allowed by the USB standard.
b.) This is the time that the uC is allowed to answer the host. If the uC is
not pulling PIN high, then the host still thinks the cable is unplugged so
there is no time limit. It is 100uS from the time that D+ is pulled high by the
peripheral.
c.) Most customers simply tie the lines high. VDD1 to PDEN, and SPU and VDD2 to
SPD, and PIN and the USB works fine. The ADuM4160 will pull DD+ and DD- low
then to idle when side 1 has no power, side 2 goes to idle and wait till the
host pulls D+ and D- low to start enumeration. The enumeration process will
reset the interface when a cable with power is applied.
d.) No, the processor will detect the pullup as soon as the cable is inserted
and try to enumerate, this will be passed to the uC and it will reset and
enumerate. We have found very few instances where it is vital to know that
there is bus power. If you must know, use a Darlington optocoupler as a Vbus
detect.