USB

Straka Matus magpie
Středa Březen 17 11:50:33 CET 2004


> >Rad by som sa spytal nieco ohladne enumeracie.
>
> Lepsi bude rovnou se zeptat. Kdyz nikdo neodpovi, muzete to povazovat za
> odpoved na tuto uvodni otazku.
>

O.K. Tak ja si dovolim sa spytat:

Radice USB su rozne (nieco je od Cypressu - EZ-USB, nieco od Phillips - D12,
nieco robil aj ScanLogic - SL11 a kopa inych) a od cipu sa lisi aj mnozstvo
funkcii, ktore su "zvonka" pristupne. USBN9603 od National Semiconducotr
patri k tym "hlupejsim", t.j. vsetko treba robit v obsluhe prerusenia na
zaklade hodnot z registrov, len ACK je generovany hardwarovo.

Mam zapojenie s USBN9603. Podla standardu USB po pripojeni zariadenia na
zbernicu zacina enumeracia. Na 10ms pride Reset (nastavim adresu zariadenia
nula), reset skonci, pride RX prerusenie - GetDescriptor Event. Podla
specifikacie sa odpoveda Device Descriptorom - standardna dlzka 18 bytov.
O.K. Naplnim FIFO prvymi 8mimi bytmi. Zacne prenos, po 8 bytoch host povie
ze mu staci (chcel len 8. byte - dlzka fifo pre endpoint nula). Preto pride
NAK, na zaklade ktoreho vypnem TX a zapnem RX pre endpoint 0. Kedze je uz
zapnuty prijem, pride ZeroLengthPacket, ktory ukoncil povodny prenos
descriptora. Nasledne prijde podla specifikacie USB znovu Reset. V poriadku.
Po skonceni Resetu by vsak mal pri SetAddress event, ktory vsak nepride, a
namiesto neho pride znovu postupnost Reset-GetDescriptor-Nak-ZLP-Reset. Po
tretom raze USB host skonci, pretoze predpoklada, ze zariadenie je chybne.
USBView z MS DDK98 hlasi DeviceEnumerationFailed.

Moj firmware je postaveny na priklade z site www.national.com, kde je
priklad v C a kde som zmenil len rutiny na komunikaciu s USBN9603 obvodom z
Microwire na parallel non-multiplexed.

Teraz otazky:

1) Cim to moze byt, ze SetAddress nepride ?

2) Ten ZeroLengthPacket, ktory pride po NAK, ma sa potvrdit tiez
ZeroLenghtPacket (vysiela Device, prijima Host?) tommuto potvrdzovaniu vobec
nerozumiem a taktiez nie ako a kedy sa prepinaju bity PID pri datovom
prenose (DATA0, DATA1).

3) Podla prestudovanych informacii z www.usb.org by mal byt problem s
obsahom descriptora, ze obsahuje nejake blbe hodnoty. Ale ja som si na 99%
isty, ze mu posielam dobry decriptor. Moze byt problem aj inde?

4) Stiahol so si aj z www.usb-by-example.com DUET drivery, ale nedokazem ich
naistalovat, pretoze neviem prinutit windowsy, aby pri enumeracii mojho
zariadenia pouzili nejaky . INF subor (kedze je zariadenie Uknown), kde by
som Windowsy prinutil pouzit DUET drivery.

5) Staci pri obsluhe USB obsluhovat prerusenia (od USB) jedno za druhym
alebo musim byt schopny prerusit uz beziacu rutinu prerusenia (od USB) a
zacat obsluhovat novy event (teda napr. pri obsluhe Reset Event by chopny sa
znovu prerusit a obsluzit RX Event, alebo to staci po skonceni Reset Event)?


Vdaka vopred.

Mt







Další informace o konferenci Hw-list