Isolated USB Connection Project
While working heavily with microcontroller projects in the past, I learned that computer USB ports can be fragile things. Simply shorting dozens of volts across the port just kills them dead—and there are so many other creative ways to destroy USB functionality on a motherboard!
I’ve seen USB isolation devices on the market which solve precisely these sorts of problems (developers doing bad with their devices), however, I never really got around to buying one. It always seemed too expensive...until the next USB port died. Eventually, you get to the point where you’re looking at having to get a new motherboard, and end up realizing those devices are probably worth the money in the long run.
That being said, for the past two years, I’ve had the idea of just building my own USB isolator. You can readily buy digital isolator ICs that handle USB 2.0 full speed, and you can also buy isolated power supplies that output the same voltage they run off of. So in this article, I’m going to make my dream of having a USB port isolation device come true—it’s certainly long overdue.
This should be a fairly simple article discussing a fairly simple build, but if you’re anything like me and you tend to break things in new and creative ways when working on projects, I feel as though you might find this useful. Like all my other projects, this project will, of course, be available on GitHub and be open source, so you can do with it as you wish; make one, sell one, or use the design to add USB isolation to your own project.
For this project, I’m back to using my open source Altium Library, so there are no included library files in this project’s GitHub repository, as has been the case in my previous projects. You can find the SchLib and PcbLib files in the library repository, or get a free account to access the library if you want to implement this design in your own project.
I’m only looking at USB 2.0, as all my ARM programmers and dev kits run on USB 2.0. At this point in time, nothing I own runs on USB 3.0, and ARM JTAG/Single Wire Debug devices don’t need more bandwidth than they already have. This might change in the future, but for now, a USB 2.0 isolator will provide all the isolation I require to hopefully save my USB ports from further harm.
Isolating the USB port is going to be a two IC/device process, as we need to isolate both the power and the data lines. Something burning out on the dev board could allow high voltages or transients to go back into the computer and cause problems. Noise can also go down the power connection and wreak havoc with the computer’s other peripherals if we’re working on a ‘not quite there yet’ RF board, or some other board with a lot of potential electrical noise.
Because of these issues, I’m looking for something that can provide total electrical isolation to save the computer from the bad stuff (engineering term) I tend to throw at it. In past projects, I’ve had great success with the Murata NXE and NXJ series of voltage isolation modules. They are nice little assemblies that include everything required to completely isolate power. The NXE2 series is of particular interest, as with 2 watts of power rating, it’s almost able to provide the full 500mA of the USB 2.0 specification. I haven’t maxed out a USB port with a dev board before, well, at least not with normal usage, so I feel this should be sufficient. The price for these is right and their isolation specifications are excellent.
To provide 5V to 5V isolation, I’m going to use the Murata NXE2S0505MC.
The NXE2S0505MC power isolation schematic
The manual recommends a 15uH inductor combined with a 4.7uF capacitor as an input filter for this regulator model to ensure electromagnetic compliance, which is extremely important. The output filter is also as recommended in the manual for the voltage isolator, reducing voltage ripple on the output which I value for my RF based projects.
In order to tell when something has gone horribly wrong, I’ve added two LEDs to the schematic as well. The green one on the input side will tell us that there is power coming from the computer, and that we haven’t caused the USB port to shut down from over current limiting. The blue one will tell us that we haven’t (yet) killed the voltage isolator.
I’m limiting these LEDs to 5mA of current, as developer tools almost always have blindingly bright LEDs and I don’t want my board to be part of my vision problems. This does have one downside to it: I won’t be able to claim that the dev tools’ LEDs were so bright I couldn’t see that my oscilloscope probe had drifted off the pad I was inspecting and shorted out the USB line!
Isolating USB Data
With the power lines isolated, we need an IC that can isolate the USB data lines and still allow the full data rate through them. Analog Devices make some very nice isolation devices, and among them, ADUM4160BRIZ is one specifically designed for 12Mbps bidirectional USB data. With magnetic coupling and 5000Vrms of isolation, even the most creative engineer will be struggling to destroy their USB ports through this device.
The ADUM4160BRIZ USB signal isolation schematic
We are powering both sides of the device through the 5V USB supply, so the VDD pins need to have a bypass/decoupling capacitor for stable operation. I’m also pulling up the speed setting pins so this will operate at full USB speed.
As I’m expecting to run at full USB speed, we need to have 24ohm termination resistors on both data lines on both sides of the device too. That’s really all there is to isolating a USB data connection—so simple!
A Little Extra Protection
With the data lines and power isolated, you might feel that it’s time to layout the board—but we’re not done yet. There’s one more little bit of protection to add to the board, and that is a USB-specific TVS Diode from Nexperia. This should help prevent electrostatic discharge from causing problems.
The PRTR5V0U2X,215 ESD protection schematic
I’ve also added a little extra capacitance to the voltage lines with a 1uF ceramic capacitor. Both the input and output of the isolators have the same TVS diode.
For connectors, I’m adding a USB Micro-B connector for the computer side, as it’s probably the most common cable a user of this device is likely to have on their desk despite the rise of USB-C.
For the output side, I feel as though a USB 2.0 A connection will work best. This will allow me to use the most common cables I have to make the most of this isolator.
With so few components required to build this board, building layout for most of them is pretty quick and painless. I could make this board smaller, but then I would need to move the TVS diodes, which would potentially reduce their effectiveness. Having lived in a very dry climate for several years, I came to greatly appreciate TVS diodes for protecting electronics from harm, so I’d prefer to have the board the extra 10mm longer and maximize the ability of the TVS diodes to do what they do best.
With everything laid out, now we need to move on to impedance control and routing
The USB lines should have a differential pair with 90Ω differential impedance. We can set up the impedance profile in the layer stack manager, but first, we need to set the layer stack up. I will be making these boards in 0.8mm FR-4, so I set the layer stack up as such.
A simple stack with an FR-4 dielectric coated in 1oz copper on both sides
Then, we can use the Impedance tab at the bottom to create a new USB Differential pair for 90Ω.
Our impedance profile, D90 (USB), has a differential impedance of 90Ω with a 10% tolerance
For a board such as this with just one differential pair impedance, I find it easier to use the filter for Diff Pair Class rather than a specific diff pair. This allows me to match all differential pairs with one rule. Applying the impedance profile we set up in the layer manager is as simple as clicking the Use Impedance Profile checkbox.
The PCB Rules and Constraints Editor can be accessed through the menu Design > Rules
To maintain isolation, we should also specify the new Creepage Distance rule that was introduced with Altium Designer® 20. This rule will ensure that the distance between separate ground levels across the board is never less than 2.5mm. I am using 2.5mm specifically as it is the minimum creepage offered by my two isolating devices on the board.
Altium Designer 20’s new Creepage Distance rule in the rules editor
Next, we can set the clearance rule to be the same 2.5mm. The new rule’s priority needs to be increased to have any effect. In the screenshot below, you can see it is towards the bottom of the list which will mean it is superseded by the other rules.
Note the order of the design rules in the left side of this screenshot
As I was laying out the board, I decided to move the connectors onto the centerline of the board for aesthetic reasons. The new snake routing style works really great with differential pairs like USB tracks. Unfortunately, my USB traces are not quite perfect, as I had to drop the microcontroller side down to the bottom layer to get it to the isolator pin. This shouldn’t affect the operation of the isolator or the USB performance, as it’s quite a short deviation.
The USB data lines are snake routed
At this point, the board looks quite complete, however, it could do with a couple of mounting holes. This will allow the use of standoffs, or perhaps a future enclosure to further protect against ESD.
Two mounting holes could be handy to have
In 3D view, I can see the inductor is perhaps a bit too close to that mounting hole!
With a small nudge, everything looks to have good clearances and be easy to assemble.
Final 3D view of the board
Despite the simplicity of this project, I feel it's going to be a board that saves me some real headaches. You can find the Altium Designer files for this board on GitHub if you’d like to build your own. I’ll be ordering a few boards to make some extra Christmas presents for friends who are prone to using electronics under development as weapons against their computers as well.
Would you like to find out more about how Altium can help you with your next PCB design? Talk to someone today.