|
|
View previous topic :: View next topic |
Author |
Message |
Wizard
Joined: 27 Mar 2006 Posts: 9
|
USB enumerated sense function |
Posted: Tue Jun 06, 2006 5:16 am |
|
|
Hi there, I'm using a 18F4550 with an USB connection.
I have came to the conclusion that If I don't use the sense pin (100k resistor to ground and 100k to the pin, from the Vbus), the
function has a bug, because it inform when the pic has been enumerated by the host(PC), but not when I disconnect the device from the PC and it's no more enumerated, in that case the function still gives a 1.
the descripction of the funtion in the library is as follows:
Code: |
/* usb_enumerated()
/*
/* Input: Global variable USB_Curr_Config
/* Returns: Returns a 1 if device is configured / enumerated,
/* Returns a 0 if device is un-configured / not enumerated.
|
I'm having problems because I want to know when the device it's no more enumerated by the PC, but I'm not using the sense PIN.
Any ideas you guys??
Any ideas you guys, _________________ Tomas L. |
|
|
Ttelmah Guest
|
|
Posted: Tue Jun 06, 2006 6:33 am |
|
|
You need the sense pin to do this. Once a device is connected, it _is_ 'enumerated', and this remains true, even if the device is then disconnected. This is normal behaviour for USB devices (even hubs and things respond the same in this regard). 'Enumeration', does not mean that there is a live connection, but that the device has been connected to a system that recognised it, and loaded drivers to support it.
If you don't have a spare pin (which is presumably why you don't want to use connection sense), then consider having the PC driver code send a transfer at regular intervals. Then have a timer on the USB device, which flags an error if a transfer is not received in a reasonable time.
Best Wishes |
|
|
daveh Guest
|
|
Posted: Wed May 14, 2008 2:25 pm |
|
|
*Solved - see end*
Is there any way to reset the enumeration flag?
I am using a sense pin however that only indicates that 5v is present. If the device is plugged into a powered hub not connected to a computer or a computer when it's starting up/shutting down or a computer that doesn't yet have the driver installed there will be 5v present. Once I sense that the 5v is removed i'd like to reset the usb_enumerated() flag.
I have a red & green LED, Red indicates that the USB is plugged in (sense pin high) and Green indicates a valid connection (sense pin high AND enumerated) both are off if there's no connection.
If I initially plug this in to a powered hub (not connected to computer) it works correctly (red light) however if I plug it into a computer (get the green light) then plug it into the unconnected powered hub I still get green. If I re-issue the usb_init() command it resets ok.
I notice that when I plug this into a computer it goes from red to green, then when I unplug it and re-plug it in it goes Green then red then green. So it appears to be re-enumerating?
Is there a way to reset the usb_enumerated() w/o using the full usb_init()? Or maybe it is best to re-initalize it?
Ok with a little more research I found the answer. With the connection sense pin defined as "USB_CON_SENSE_PIN" I periodically call usb_task(). |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|