Our hw department tried their best to eliminate ESD problem. This kind of device is special case: metal fingerprint sensor touched directly by users. Unfortunately, it is most susceptible to ESD when finger detection is enabled (which makes sense, I guess) i.e. sensor in low power mode is able to detect finger touch and in this mode device is usually suspended. We were able to fix it in firmware; it resets port when host doesn’t respond to remote wakeup for some time. But now we have hw-only device with no firmware so host has to solve it somewhat.
I’m not sure how serious the problem is in the real world. It depends on both HC and users. But we’re able to reproduce disabled port with ESD gun.
It’s a pity port status can’t be checked with suspended device. This IOCTL should be taken as an exception because doesn’t really access device. Could you ask USB guys to improve it in the future?
Best regards,
Michal Vodicka
UPEK, Inc.
[xxxxx@upek.com, http://www.upek.com]
From: xxxxx@lists.osr.com[SMTP:xxxxx@lists.osr.com] on behalf of Doron Holan[SMTP:xxxxx@microsoft.com]
Reply To: Windows System Software Devs Interest List
Sent: Thursday, September 15, 2005 6:40 AM
To: Windows System Software Devs Interest List
Subject: RE: [ntdev] USB port status and selective suspend
No such notification exists. Is there anything you can in hw to limit
ESD? It sounds like your device is a bit busted in that respeted.
d
-----Original Message-----
From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com] On Behalf Of Michal Vodicka
Sent: Wednesday, September 14, 2005 8:00 PM
To: Windows System Software Devs Interest List
Subject: [ntdev] USB port status and selective suspend
We have an USB fingerprint sensor and have to solve ESD events which
users cause occasionally. Usually no problem but sometimes it is so
strong HC disables the USB port to which is device attached. Driver can
indentify this situation using IOCTL_INTERNAL_USB_GET_PORT_STATUS;
returned flags indicate port is connected but not enabled.
IOCTL_INTERNAL_USB_RESET_PORT usually solves the problem.
It works until device is powered off because of selective suspend. In
this case IOCTL_INTERNAL_USB_GET_PORT_STATUS returns
STATUS_DEVICE_POWERED_OFF. Well, it is right but I don’t want to access
device, just check the port to which it is connected. There is no need
to touch device at all, just read HC status register.
The problem is our device is suspended most of time. We enable special
finger detect mode, enable remote wakeup and suspend device. When user
touches sensor, device invokes remote wakeup to notify driver which
powers device up and reads data. Unfortunately, when user’s touch causes
ESD which in turn causes port disable, driver isn’t notified and port
can stay disabled forever. Periodical port status check would solve it
but because of above mentioned behaviour driver would have to wakeup
device, check status and suspend it again which means to send
IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION and when system calls the
callback, suspend device. Expensive and time consuming, not speaking
about race conditions in this path.
My question is if somebody knows about better way how driver can detect
USB port disable. Ideally some form of notification which’d inform
driver immediatelly.
Thanks.
Best regards,
Michal Vodicka
UPEK, Inc.
[xxxxx@upek.com, http://www.upek.com]
Questions? First check the Kernel Driver FAQ at
http://www.osronline.com/article.cfm?id=256
You are currently subscribed to ntdev as: unknown lmsubst tag argument:
‘’
To unsubscribe send a blank email to xxxxx@lists.osr.com
Questions? First check the Kernel Driver FAQ at > http://www.osronline.com/article.cfm?id=256
You are currently subscribed to ntdev as: unknown lmsubst tag argument: ‘’
To unsubscribe send a blank email to xxxxx@lists.osr.com