ESD protection on USB

Following my previous post

In short, in random interval, an exception occurs on the USBH_SerialUSB.Read function.
Sometimes after 2 minutes, sometimes after a few days.

2012-03-30 09:03:44.6789352 Serial   Read exception
2012-03-30 09:03:44.6956022 Serial   Exception was thrown: System.Exception
2012-03-30 09:03:44.7361696 Serial   268435461
    #### Exception System.Exception - 0xffffffff (6) ####
    #### Message: 
    #### GHIElectronics.NETMF.USBHost.USBH_SerialUSB::Read_Helper [IP: 0000] ####
    #### GHIElectronics.NETMF.USBHost.USBH_SerialUSB::Read [IP: 001a] ####
    #### MyProject.Serial::Read [IP: 000c] ####
    #### MyProject.Serial::SerialWorker [IP: 0028] ####

We’ve ran into the problem when we started to use Panda II boards. In the past we used Domino.
It took me some time to get the problem reproduced.
Eventually it’s getting reproduced when I rub the fabric of my chair and touch the table.
Probably some static electricity is discharged and the exception occurs.
Although it does not sound scientific, now it’s no problem to reproduce it and it happens 9 of 10 times I try.
On the Domino the exception also occurs, although not as often as on the Panda II.
Big difference is the Domino will only except one time, the next read will work again.
Once the Panda II gets an exception on the read, every next read will also except. Disconnecting and connecting the USB device again will resolve it and it’s possible to read again.

I’ve been reading about USB protection circuits and looked at some USB PCI cards and those PCI cards include some components (inductor, capacitor and resistor) located directly behind the USB Host.
For example something like this

As far I can see FEZ boards do not have any protection for ESD or surge on the board?
Is it necessary to use it?

Although rubbing the chair is not a real world situation, the exception occurs frequently on devices used in production environments.

Some more info about the device

  • Domino or Panda II (With USB Host changes)
  • FEZ Connect
  • I2C Display
    Input voltage is 9V, total power consumption is about 480mA.

What did I try;

  • Lower voltage to 7.5 (it will reduce heat)
  • External 5V power supply
  • Used Prolific and FTDI serial to USB converters

I’ve been strugling quite some time now with this issue and this issue is a real show stopper for the project the FEZ is used for.

Make sure everything is properly grounded.

ESD protection is to protect the chip from getting damaged. If you get static or noise, you will have problems no mater what ESD you add on USB.

Maybe ESD is not the correct term. But discharging can result in static or noise?
And what can be done to prevent this (besides grounding properly)?

Yes correct and there is not much you co do to prevent it.

But, Id onto think what you are seeing is related to ESD protection on USB.

Put everything in a metal cage/box :wink:

So watchdog is the only solution? FYI i have also expirienced this error on my Domino but never found a way to reproduce it (happens from time to time). I will have ro test my chair tommorow :wink:

@ Eric: Without any cables attached at all, that will work… :wink:

@ Gus: you have doubts if discharge is the cause of the problem at all?
I cannot think of somehting else that can link the rubbing over the fabric with the exceptions that follow.

With serial communication (232/422/485) an error once in a while is normal and the protocol should have some error detecting (or even correcting) mechanism.
But the issue on the USB is now communication is disturbed, and the device cannot continue without user intervention (disconnect and connect the USB device).

As for actual ESD, what are the thoughts on including PTC and ESD protectors on boards? Are these actually unnecessary?

I did not mention the error explicitly, but USBHostController.GetLastError returns 268435461 (CompletionCode_NoResponse).

@ Gralin, you also had the same error code for the USB GetLastError?

You have to be very careful trying to filter the USB data lines. There are common mode filters made for this purpose but the tact you take is dependant upon if you are using a high speed or full speed link. Take a look at Wurth for USB common mode filters.

@ pas2812: I didn’t check. I will try this tomorrow and let you know. I was using USB Host with prolific based adapter for XBee when i noticed rhis happenning from time to time

I’m glad you also experience this problem, cause I did not find any other posts about this issue or that could be relating.

We use the FEZ to connect to another device. The other device has two versions, an old with a serial DB9 connector, and a new with USB B connector (the device then includes a FTDI chip).

We use the USB-to-Serial converter to connect to the old version. The new version is connected directly with a USB cable. On both connections the exceptions occur, so I conclude it has to do with USB signal transmission.

I ended up using a call to USBHostController.Reset() when an exception occurs.

That way the FEZ will recover from an exception, although i hoped for a nicer solution.
But in the end it will do for the purpose it’s used for.