| Autor |
Nachricht |
Erhard Henkes
Mitglied
Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 12177
|
Erhard Henkes Mitglied
21:47:03 07.09.2011 Titel: |
USB Weiterentwicklung in PrettyOS mit EHCI / UHCI / OHCI |
Zitieren |
Inzwischen wurden die Grundlagen gelegt für UHCI (Intel, VIA) und OHCI (Rest). Nun wurde mit Rev. 1258 auch ein Mechnismus zum Wechsel des Besitzes eines Ports ("Port Routing") zwischen EHCI und Companion HC (UHCI oder OHCI) eingerichtet:
Beim Start:
| C++: | // OpRegs->CONFIGFLAG = 0; // Write a 0 to CONFIGFLAG register to default-route only to cHC (no high-speed!)
OpRegs->CONFIGFLAG = CF; // Write a 1 to CONFIGFLAG register to default-route all ports to the EHCI
// The EHCI can temporarily release control of the port to a cHC
// by setting the PortOwner bit in the PORTSC register to a one
//... | |
Beim Attach und Erkennen der Geschwindikeit (bits 11:10):
| C++: | if (((OpRegs->PORTSC[j]>>10)&3) == 1) // K-state, release ownership of port
{
OpRegs->PORTSC[j] |= PSTS_COMPANION_HC_OWNED; // release it to the cHC
} | |
Beim Deattach:
| C++: | | OpRegs->PORTSC[j] &= ~PSTS_COMPANION_HC_OWNED; // port is given back to the EHCI | |
Ergänzung: Eine Fullspeed-Maus wird als J-State erkannt. Daher werden nun ab Rev. 1159 K- und J-State abgegeben. Dies ist in der EHCI Spezifikation m.E. falsch beschrieben.
| C++: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | static void ehci_checkPortLineStatus(uint8_t j)
{
#ifdef _EHCI_DIAGNOSIS_
textColor(LIGHT_CYAN);
printf("\nport %u: %xh, line: %yh ",j+1,OpRegs->PORTSC[j],(OpRegs->PORTSC[j]>>10)&3);
#endif
switch ((OpRegs->PORTSC[j]>>10)&3)
{
case 0: // SE0
{
writeInfo(0, "Port: %u, hi-speed device attached", j+1);
if ((OpRegs->PORTSC[j] & PSTS_POWERON) && (OpRegs->PORTSC[j] & PSTS_ENABLED) && (OpRegs->PORTSC[j] & ~PSTS_COMPANION_HC_OWNED))
{
#ifdef _EHCI_DIAGNOSIS_
textColor(IMPORTANT); printf(", power on, enabled, EHCI owned"); textColor(TEXT);
#endif
if (USBtransferFlag && enabledPortFlag && (OpRegs->PORTSC[j] & (PSTS_POWERON | PSTS_ENABLED | PSTS_CONNECTED)))
{
setupUSBDevice(j);
}
}
break;
}
case 1: // K-state, release ownership of port (in EHCI spec 1.0 this is recommended)
case 2: // J-state, release ownership of port (in EHCI spec 1.0 this is not recommended) <--- keine gute Idee, wie sich später heraus stellt ;)
OpRegs->PORTSC[j] |= PSTS_COMPANION_HC_OWNED; // release it to the cHC
break;
case 3: // undefined
{
textColor(ERROR);
printf("\nline state: undefined");
textColor(TEXT);
break;
}
}// switch
} | | |
_________________ OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Zuletzt bearbeitet von Erhard Henkes am 00:04:17 20.09.2011, insgesamt 2-mal bearbeitet |
|
 |
Erhard Henkes
Mitglied
Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 12177
|
Erhard Henkes Mitglied
10:19:47 10.09.2011 Titel: |
|
Zitieren |
Als Aufgaben stehen nun die Schaffung einer ehci_t Struktur an, damit die globalen/statischen Variablen weitgehend verschwinden können (erledigt).
Ansonsten muss wohl die enge Verzahnung zwischen usb-Modul und ehci-QH/qTD Strukturen durch eine Zwischenschicht getrennt werden, um auch uhci/ohci integrieren zu können. Vielleicht kann man das jetzt vorhandene usb-Modul als Zwischenschicht verwenden und darüber ein von dem jeweiligen HC abstrahiertes Modul schaffen.
Auf user-Seite (und auch für das zu schaffende abstrakte Modul) könnte wohl die libusb http://libusb.org/browser/libusb/libusb/libusb.h als Leitlinie verwendet werden. |
_________________ OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Zuletzt bearbeitet von Erhard Henkes am 16:31:51 10.09.2011, insgesamt 1-mal bearbeitet |
|
 |
Erhard Henkes
Mitglied
Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 12177
|
Erhard Henkes Mitglied
00:51:51 19.09.2011 Titel: |
|
Zitieren |
Auf der Ebene der HCs und Ports ist die Abstraktion schon weitgehend gewonnen (thx to MrX für sein Transfer-/Transaktions-Modell). OHCI wurde nun versuchsweise in USB eingekoppelt, was auch funktioniert. Es sieht so aus, dass man ein gemeinsames Modul für USB 1 und USB 2 verwenden kann. |
_________________ OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
|
|
 |
Erhard Henkes
Mitglied
Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 12177
|
Erhard Henkes Mitglied
00:01:50 20.09.2011 Titel: |
|
Zitieren |
ohci, uhci und ehci hängen nun über die gleiche schnittstelle an usb. Mittels des Emulators Oracle VM VirtualBox soll nun im nächsten Schritt das ohci-Innenleben für usb-transfers (usb 1.1) mit ohci aufgebaut und getestet werden. |
_________________ OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
|
|
 |
Erhard Henkes
Mitglied
Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 12177
|
Erhard Henkes Mitglied
19:06:06 02.10.2011 Titel: |
|
Zitieren |
Nun ist der erste erfolgreiche ohci-Transfer (getDevice) gelungen.
Allerdings ist der Gesamtzustand noch unbrauchbar (PC läuft nicht). |
_________________ OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
|
|
 |
Erhard Henkes
Mitglied
Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 12177
|
Erhard Henkes Mitglied
20:34:25 04.10.2011 Titel: |
|
Zitieren |
Meilenstein: Die USB 1.1 control-Transfers (mit ohci) laufen auf VBox! |
_________________ OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
|
|
 |
Erhard Henkes
Mitglied
Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 12177
|
Erhard Henkes Mitglied
16:54:51 07.10.2011 Titel: |
|
Zitieren |
Die bulk-Transfers mit ohci ebenso. Ist kein großer Unterschied. |
_________________ OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
|
|
 |
Erhard Henkes
Mitglied
Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 12177
|
Erhard Henkes Mitglied
00:32:59 11.10.2011 Titel: |
|
Zitieren |
Ich halte USB und Netzwerk von Anfang an für zukunftsweisend. Daher werden diese Module mit Priorität weiter entwickelt. Die Spezifikation für xHCI (Superspeed) liegt nun ebenfalls vor.
Der EHCI-Treiber wurde deutlich beschleunigt durch Beobachtung des active Bit im qTD, allerdings gibt es mit wenigen Sticks in Kombination mit PCs nun Probleme. Der OHCI-Treiber ist stabil (zumindest auf VBox). Der UHCI-Treiber wird gerade ausgebaut und an das abstrakte usb-Modul angedockt. Damit wird PrettyOS bald alle bisherigen HC für usb mass storage devices (MSD) bedienen können, ein wohl eher ungewöhnliches Feature für ein Hobby-OS. |
_________________ OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Zuletzt bearbeitet von Erhard Henkes am 00:34:29 11.10.2011, insgesamt 1-mal bearbeitet |
|
 |
Erhard Henkes
Mitglied
Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 12177
|
Erhard Henkes Mitglied
10:24:47 22.10.2011 Titel: |
|
Zitieren |
Das Toggle-System wurde überarbeitet und das Toggle-Switchen an die inzwischen richtige Stelle, nämlich in die Transaction, verlagert. Damit können nun auch von 512 Byte mps abweichende Datentransfers wie sie bei full speed bzw. low speed üblich sind (8, 16, 32, 64 Byte) beherrscht werden, ohne dass sich die Toggles "verhaken" (vorher Datenverlust oder NAK). |
_________________ OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
|
|
 |
|
Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.
|
|
|
|
|