View previous topic :: View next topic |
Author |
Message |
E_Blue
Joined: 13 Apr 2011 Posts: 417
|
USB CDC it's being detached and reattached itself. |
Posted: Fri Jun 16, 2017 12:52 pm |
|
|
If the Main program, outside of any interrupt, have a huge delay, like 2 seconds, the USB CDC will be detached and reattached itself, without actually being unplugged?
I'm using USB CDC library on a PIC18f67J50 and initializing USB calling usb_init_cs(); from the Main and have a connection sense pin defined.
Also I periodically call usb_task(); except when a routine that turn on a special device; at that moment I can hear a sound in the PC that indicates that an USB device was unplugged.
Two seconds later the PC play another sound indicating that an USB device was plugged.
I thought that the routine usb_task(); only check the connection sense pin to attach and detach the device properly.
Can be this delay the problem or I should check something more? _________________ Electric Blue |
|
|
temtronic
Joined: 01 Jul 2010 Posts: 9229 Location: Greensville,Ontario
|
|
Posted: Fri Jun 16, 2017 1:12 pm |
|
|
It 'could' be the PC depending on what OS, what version of OS and which USB drivers you're using..... not to mention what other programs(aps) are active or dormant on the PC.... even an unwanted 'update' in the background can change 'things'...sigh
Unlike the good old days of REAL RS-232... USB can be a bloody nightmare to debug.
I got rid of 99.9944% of them problems by cutting PC code in Delphi. |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19520
|
|
Posted: Fri Jun 16, 2017 1:27 pm |
|
|
Is your USB interrupt driven?.
Is this interrupt enabled?.
If the USB interrupt is being handled, then 'yes' in normal use after enumeration, usb_task only needs to be called to handle a few bits of housekeeping. First the multiple enumeration that can occur particularly on USB3 systems during boot. Then handling overflows in the usb buffers. Then handling the power management events. One thing that can make this last occur, is 'selective suspend'. This might be causing your problem. You need to get to the power management settings and disable this. Otherwise if your code is not directly talking to the usb device, Windows can decide to set it to idle. The recovery from this is handled by usb_task if it happens.
<https://www.tenforums.com/tutorials/73187-turn-off-usb-selective-suspend-windows-10-a.html>
How quickly this triggers depends on the machine and drivers, but can be only a few mSec on current versions of Windows. Basically as soon as the port is deemed 'idle'. |
|
|
E_Blue
Joined: 13 Apr 2011 Posts: 417
|
|
Posted: Fri Jun 16, 2017 1:58 pm |
|
|
Yes, the USB interrupt driven, that's why I'm amazed about the fact that the PC is detaching my device.
The USB interrupt is being activated not by my code but by USB CDC library.
I'm using Windows 7 x64 and the other PC's mostly are Windows 7 x32.
I tried disabling selective suspend but nothing seems to change in the behavior, anyway, thanks for the tip. _________________ Electric Blue |
|
|
temtronic
Joined: 01 Jul 2010 Posts: 9229 Location: Greensville,Ontario
|
|
Posted: Fri Jun 16, 2017 3:46 pm |
|
|
There was a similar 'thread' some months ago and it appears there are 4 or 5 (maybe more...) programs that have some control over USB in a PC. EACh and every one has to be looked at and properly configured AND somehow 'locked' to NOT be altered by anyone or any program from then on. PITA programming at it's finest...
Maybe search the forum ? (USB shutting down or similar keywords...)
Jay |
|
|
|