Autor Thema: Eine Antwort UHCI Setup-Control  (Gelesen 3696 mal)

Relbmessa

  • Beiträge: 73
    • Profil anzeigen
Gespeichert
« am: 25. February 2012, 15:23 »
Hallo
Antwort zu UHCI Setup-Transfer

Eine Antwort – nicht die Antwort Setup (Control)

Erfragen Get_Deskriptor

Die von mir verwendet Frame: 


Nr.05_A
001  00021000 00021010     002  00021010 00021020     003  00021020 00021030
1Fra 00021004                   00021014                   00021024          
     00021008                   00021018                   00021028
     0002100C          BUF      0002101C          BUF      0002102C          BUF

004  00021030 00021040     005  00021040 00021052 ZQH 006  00021050 00021090 ZTD1
     00021034                   00021044          QH       00021054 00000001  IRQ         
     00021038                   00021048                   00021058
     0002103C          BUF      0002104C          BUF      0002105C          BUF

007  00021060 00021070     008  00021070 0021080     009  00021080 00021090
     00021064                   00021074                   00021084          
     00021068                   00021078                   00021088
     0002106C BUF               0002107C 00120118 BUF      0002108C 00120140 BUF

010  00021090 000210A0     011  000210A0 000210B0     012  000210B0 000210C0
TD1  00021094              TD2  000210A4              TD3  000210B4          
     00021098                   000210A8                   000210B8
     0002109C 00120118 BUF      000210AC 00120140 BUF    000210BC 00120168 BUF

013  000210C0 000210E2 ZQH 014  000210D0 000210E0     015  000210E0 00000001
TD4  000210C4                   000210D4              QH   000210E4 00000001         
     000210C8                   000210D8                   000210E8
     000210CC 00120190 BUF      000210DC          BUF      000210EC          BUF

;;;;;;;;;;----Vorbereitung für Control-Transfer----------------------------1.Einstellung
;-------------TD-1---------------------------------------------------------
    mov dword [0x00021094] , 0x18800000 ;Reg 04-07h Control and Status
    mov dword [0x00021098] , 0x00E0002D ;Reg 08-0Bh Token Setup -> 2Dh
    mov dword [0x0002109C] , 0x00120118 ;Buffer-Pointer TD1
;-------------TD-2---------------------------------------------------------
    mov dword [0x000210A4] , 0x18800000 ;Reg 04-07h Control and Status
    mov dword [0x000210A8] , 0x02280069 ;Reg 08-0Bh Token DATA1 IN-> 69h
    mov dword [0x000210AC] , 0x00120140 ;Buffer-Pointer TD2
;----------------------------------------------------------------------------
;-------------TD-3-----------------------------------------------------------
    mov dword [0x000210B4] , 0x18800000 ;Reg 04-07h Control and Status
    mov dword [0x000210B8] , 0x02200069 ;Reg 08-0Bh Token DATA0  IN -> 69h ????
    mov dword [0x000210BC] , 0x00120168 ;Buffer Pointer TD3
;----------------------------------------------------------------------------
;-------------TD-4-----------------------------------------------------------
    mov dword [0x000210C4] , 0x18800000 ;Reg 04-07h Control and Status
    mov dword [0x000210C8] , 0x02280069 ;Reg 08-0Bh Token DATA1 IN-> 69h
    mov dword [0x000210CC] , 0x00120190 ;Buffer-Pointer TD4
;----------------------------------------------------------------------------
;---------Speicher-Einstellung-Buffer-Bereich erst mal Null------------------
    mov dword [0x00120118] , 0x01000680 ;Get_Deskriptor TD1
    mov dword [0x0012011C] , 0x00120000
;--------------------------------
    mov dword [0x00120140] , 0x0 ; TD2
    mov dword [0x00120144] , 0x0 ;
;-------------------------------
    mov dword [0x00120168] , 0x0 ; TD3
    mov dword [0x0012016C] , 0x0
;-------------------------------
    mov dword [0x00120190] , 0x0 ; TD4
    mov dword [0x00120194] , 0x0
;-------------------------------------------------------------------------
Frame-List Pointer

Code
;--------Frame List--TD-Pointer------------------ ----------------------------------------

;----------------------------------------------------------------------------------------
 
    mov eax , 0x00020000+4 ;+1 siehe Erster FLP /Ziel  Framme List
    mov ebx , 0x00023001 ;Inhalt Frame List -> Link -Pointer 
    mov ecx , 1024-1
Frame_List:
      mov [eax] , ebx
      add eax , 0x04 ;Abstand 4-Byte Frame Pointer
;      add ebx , 0x10 ;Abstand Link-Pointer 16-Byte (10h)
    loop Frame_List
;-------Link-Pointer-TD-1------------------------------------------------
      mov eax , 0x00021000 ;Ziel TD-2 Pointer
      mov ebx , 0x00021010 ;Link-Pointer
      mov ecx , 1024
Link_Pointer_1:
      mov [eax] , ebx
      add eax , 0x10
      add ebx , 0x10
    loop Link_Pointer_1

;--------------Frame-List-Pointer------------------------------------------------
     mov dword [0x00020000] , 0x00021000 ;Erster Frame-List-Pointer   
     mov dword [0x00020004] , 0x00021090 ;Zeiger 2
;---------------------------------------------------------------------------------
     mov dword [0x00020008] , 0x00021090 ;Zeiger 3


 Mit dieser Konfiguration melden sich die meisten Geräte

Ausnahmen bestätigen die Regel – Acer 1Giga und Cruzer 4Giga
melden sich meist nicht – keine Ahnung  warum??

Mit der folgenden Konfiguration habe ich dieses Problem gelöst

;;;;;;;;;;----Vorbereitung für Control-Transfer----------------------------
;-------------TD-1---------------------------------------------------------
    mov dword [0x00021094] , 0x18800000 ;Reg 04-07h Control and Status
    mov dword [0x00021098] , 0x00E0002D ;Reg 08-0Bh Token Setup -> 2Dh
    mov dword [0x0002109C] , 0x00120118 ;Buffer-Pointer TD1
;-------------TD-2---------------------------------------------------------
    mov dword [0x000210A4] , 0x18800000 ;Reg 04-07h Control and Status
    mov dword [0x000210A8] , 0x02200069 ;Reg 08-0Bh Token DATA0 IN-> 69h
    mov dword [0x000210AC] , 0x00120140 ;Buffer-Pointer TD2
;----------------------------------------------------------------------------
;-------------TD-3-----------------------------------------------------------
    mov dword [0x000210B4] , 0x18800000 ;Reg 04-07h Control and Status
    mov dword [0x000210B8] , 0x02280069 ;Reg 08-0Bh Token DATA1  IN -> 69h ????
    mov dword [0x000210BC] , 0x00120168 ;Buffer Pointer TD3
;----------------------------------------------------------------------------
;-------------TD-4-----------------------------------------------------------
    mov dword [0x000210C4] , 0x18800000 ;Reg 04-07h Control and Status
    mov dword [0x000210C8] , 0x02200069 ;Reg 08-0Bh Token DATA0 IN-> 69h
    mov dword [0x000210CC] , 0x00120190 ;Buffer-Pointer TD4
;----------------------------------------------------------------------------
;---------Speicher-Einstellung-Buffer-Bereich erst mal Null------------------
    mov dword [0x00120118] , 0x01000680 ;Get_Deskriptor TD1
    mov dword [0x0012011C] , 0x00120000
;--------------------------------
    mov dword [0x00120140] , 0x0 ; TD2
    mov dword [0x00120144] , 0x0 ;
;-------------------------------
    mov dword [0x00120168] , 0x0 ; TD3
    mov dword [0x0012016C] , 0x0
;-------------------------------
    mov dword [0x00120190] , 0x0 ; TD4
    mov dword [0x00120194] , 0x0
;-------------------------------------------------------------------------

Diskussion erwünscht , aber nicht Bedingung

Viel Spaß und Erfolg beim Programmieren

Relbmessa

PS
Wollte ein wenig Farbe in die Gestaltung bringen.
Wie Funktioniert das?-> ist aber nicht wichtig!!
« Letzte Änderung: 25. February 2012, 17:36 von Relbmessa »

rizor

  • Beiträge: 521
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 26. February 2012, 15:31 »
Welche Devices hast du denn derzeit probiert?
Ich bezweifel, dass sich die meisten Devices so melden.

Normalerweise läuft das Init mit den Devices so ab,
dass die Devices gefragt werden und dann angeben was sie können.

z.B. Fragt das OS als erstes was es für ein Device ist, wie viele EPs das Device hat, etc.

Anhand der ersten Antwort kannst du schon erkennen, was für ein Device es ist.
Es muss angeben, ob es Vendor- oder Class-Specific ist.
Anhand dessen lässt sich schon viel ermitteln.

Kann auch nicht direkt dein Problem erkennen.

Grüße,
rizor
Programmiertechnik:
Vermeide in Assembler zu programmieren wann immer es geht.

Relbmessa

  • Beiträge: 73
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 26. February 2012, 17:10 »
Hallo rizor

Alle meine Geräte haben sich gemeldet.

zB

Philips USB DVD        058F:6387
8Giga Transcend        058F:6387
1Giga     dt.
4Giga Kingston          0951:1625
Lexar                         05DC:A400
ACER                         0204:6025
Cruzer                       0781:5406
Lexar Media 128MB  05DC:0080
USB Webcam            046D:08DA
USB-Floppy               057B:0000
Siemens USB Wlan   129B:1667
BrotherUSB Drucker 04F9:0037

und noch zwei usb Festplatten
Ergebnisse habe ich mit Linux abgeglichen.

Jetzt geht es zum zweiten Schritt der Enumeration

Gruss
Relbmessa 





 
« Letzte Änderung: 26. February 2012, 17:19 von Relbmessa »

rizor

  • Beiträge: 521
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 26. February 2012, 20:26 »
Was meinst du mit gemeldet?

Naja, die Device-Enumeration findest du ja über den Device-Descriptor raus.
Da wird dir ja sogar mitgeteilt, was für einen Treiber du verwenden musst.
Also, ob es ein Class-Driver sein kann oder ob du alle geladenen Treiber fragen musst.

Grüße,
rizor
Programmiertechnik:
Vermeide in Assembler zu programmieren wann immer es geht.

Relbmessa

  • Beiträge: 73
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 26. February 2012, 21:17 »
Hallo

Mit gemeldet meine ich, dass mit der oben verwendeten Frame
der Geräte Deskriptor ausgelesen wird.(Erster Schritt der Enumeration)
Ich bin dabei für mein OS USB-Driver zu programieren.

Gruss
Relbmessa

rizor

  • Beiträge: 521
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 26. February 2012, 22:09 »
Und manche Devices melden sich nicht?
Dann fragst du sie nicht.

USB ist immer Ping-Pong, wobei der Traffic immer vom OS (Host-Controller) ausgeht.
Oder du fragst sie falsch und sie können nichts mit dem Request anfangen.

Ansonsten ist die Device-Enumeration ja nicht so schwer.
Programmiertechnik:
Vermeide in Assembler zu programmieren wann immer es geht.

Relbmessa

  • Beiträge: 73
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 26. February 2012, 22:28 »
Hallo
vielleicht habe ich mich falsch ausgedrückt?
Melden tun sich alle Geräte -> nur Acer und Cruzer muss ich anders befragen. (siehe Anfang)
Darüber wundere ich mich-> den ich dachte die erste Anfrage ist immer gleich ??

Gruß
Relbmessa

rizor

  • Beiträge: 521
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 28. February 2012, 17:54 »
Ich habe mir deinen Frame jetzt nicht genau angeschaut, aber ich vermute mal, dass darin ein Fehler ist.
Du wirst mit den anderen Devices nur glück haben.
Programmiertechnik:
Vermeide in Assembler zu programmieren wann immer es geht.

Relbmessa

  • Beiträge: 73
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 29. February 2012, 12:42 »
Hallo
danke für die Vermutung.
Ich bin noch auf der suche nach dem Fehler.
Wie gesagt , es ist der erste Entwurf.

Gruß
Relbmessa

PS

Habe den Fehler beim Auslesen der ersten 8 Byte Get_Deskriptor gefunden.
Ohne Status Phase geht es halt nicht.
TD -> Setup DATA0
TD -> IN       DATA1
TD->  Out    DATA1
so geht es!
« Letzte Änderung: 29. February 2012, 15:18 von Relbmessa »

 

Einloggen