USB device Enumeration problem

Status
Not open for further replies.

shmd

Newbie level 2
Joined
Jun 9, 2013
Messages
2
Helped
0
Reputation
0
Reaction score
0
Trophy points
1
Activity points
24
Hi,
I'm coding a FSM to be enumerated by host using Altera de2-115 and communication daughter board which has a USB3300 PHY chipset,

also I use quartus signalTap ii to observe signals.

the state machine starts with resetting the PHY and after that wait for a cable connection, then, waits for getDescription setup packet, and SetAddress setup packet,

FSM steps:

1- wait for token packets,
- SETUP
- OUT
- IN
2- after receive a SETUP
- wait for DATA0
3- after receive data sends ACK

4- there is an IN token now

5- send Device_Descriptor to host

6- wiats for out token

7- there is an OUT token but this is incomplete, I can get OUT_token_PID then first byte Address_Endpoint but before receiveing the second packe EndP_CRC the
dir_signal will be dropped,
8- these steps repeat several times then windows7 X64 or windows XP will report a malfunction USB device.


i have no idea how to solve this problem or what is the problem.


thanks
 

Is it that you have defined a sequence of operations?? as in a pre-defined sequence in which packets should be received?? If thats the case, then I'm afraid USB does not send descriptors in a sequential fashion. They can come randomly.
 

Is it that you have defined a sequence of operations?? as in a pre-defined sequence in which packets should be received?? If thats the case, then I'm afraid USB does not send descriptors in a sequential fashion. They can come randomly.

there is no pre-defined sequence, setup packets are assessing independently, because they have data that explain, what is the next step. I process the setup transactions and wait for any token packet like IN_TOKENS, OUT_TOKENS, based on what i got from setup stage, i can decide about the next operation.
based on windows enumeration steps (from windows usb team blog), firstly i should see the setup packet and following it an IN_TOKEN (from USB2.0 specs chapter 6) then i'll send the DATA1 followed by a Device_Descriptor, after that i have to get an OUT_TOKEN next a DATA1 from Host with no data and just 16 bits of CRC(0 value),
after that i have to send an ACK to Host.
this is the first step after this i have to get a Set_Address, the only thing i can get, is an incomplete OUT_TOKEN after i send my Device_Descriptor, so i serve every TOKEN not in any pre-defined order , but if it was random i should see some other TOKENS randomley?
and if you think it's random, how can I recognize?
 

Status
Not open for further replies.
Cookies are required to use this site. You must accept them to continue using the site. Learn more…