Ziel: USB-Treiber


  • Mod

    Der USB2-Standard ist mittlerweile 10 Jahre alt. Geräte und Mainboards mit dem Nachfolger-Standard USB3 sind seit Anfang des Jahres erhältlich. Die Kompatibilität bleibt gewahrt. Man kann sowohl USB3 Geräte an USB2 Buchsen betreiben, wie auch umgekehrt. In den Genuss der 10-fachen Geschwindigkeit von USB3 kommt man so allerdings nicht.

    Theoretische Übertragungsrate:
    USB2: 480 MBit/s
    USB3: 5000 MBit/s


  • Mod

    Nachdem die Floppy Disk zuverlässig und halbwegs brauchbar als Speichermedium zum Laden von Dateien verwendet werden kann, kann ich mich - hoffentlich unterstützt durch andere OS-Developer - u.a. dem Thema USB-Treiber zuwenden.

    Als Simulationsumgebung kann man z.B. Sun VirtualBox einsetzen, hier ein Beispiel der Erkennung und des Auslesens von USB-Devices mittels PCI-Scan (Rev. 0.0.0.107):
    http://www.henkessoft.de/OS_Dev/Bilder/Rev107_SunVB_USB.PNG


  • Mod



  • Hallo,

    Erhard Henkes schrieb:

    Nachdem die Floppy Disk zuverlässig und halbwegs brauchbar als Speichermedium zum Laden von Dateien verwendet werden kann,

    das ist doch was feines, wer diesen verkorksten DMA-Mist hin bekommt kann doch unmöglich an USB scheitern 😃 😉

    Erhard Henkes schrieb:

    - hoffentlich unterstützt durch andere OS-Developer -

    Ich hoffe ich verspreche Dir jetzt nichts was ich später dann nicht halten kann, aber an USB würde ich mich schon gerne beteiligen (dann hab ich es später leichter wenn ich mit meinem Projekt an dieser Stelle bin). Ich werde mir mal die 3 Host-Controller-Specs genau reinziehen.

    Seit ihr den der Meinung das PrettyOS reif genug für einen richtigen Treiber-Stack ist?

    Grüße
    Erik



  • erik.vikinger schrieb:

    Hallo,

    Erhard Henkes schrieb:

    Nachdem die Floppy Disk zuverlässig und halbwegs brauchbar als Speichermedium zum Laden von Dateien verwendet werden kann,

    das ist doch was feines, wer diesen verkorksten DMA-Mist hin bekommt kann doch unmöglich an USB scheitern 😃 😉

    🙄

    *facepalm*



  • erik.vikinger schrieb:

    Erhard Henkes schrieb:

    Nachdem die Floppy Disk zuverlässig und halbwegs brauchbar als Speichermedium zum Laden von Dateien verwendet werden kann,

    das ist doch was feines, wer diesen verkorksten DMA-Mist hin bekommt kann doch unmöglich an USB scheitern

    USB ist hinreichend komplex um einen Entwickler einige Monate zu beschäftigen. Ihr solltet euch ausserdem beeilen, der nächste USB-Standard ist bereits im Anflug. 😃



  • Hallo,

    Z schrieb:

    USB ist hinreichend komplex um einen Entwickler einige Monate zu beschäftigen.

    Ich glaube das hat sich in zwischen unter allen Beteiligten herumgesprochen.

    Z schrieb:

    Ihr solltet euch ausserdem beeilen, der nächste USB-Standard ist bereits im Anflug. 😃

    USB 3 kann man IMHO auch einzeln implementieren, ist ein neues Parallel-Universum, im Gegensatz zum Verhältnis von USB 1 und USB 2. Nur das USB-Basis-Gerüst muss zwischen den einzelnen Standards unterscheiden.
    Für ein Hobby-OS könnte man sich vielleicht auch erst mal nur auf USB 2 und EHCI beschränken.

    Grüße
    Erik



  • Z schrieb:

    Ihr solltet euch ausserdem beeilen, der nächste USB-Standard ist bereits im Anflug. 😃

    In Linux schon implementiert. 😉

    erik.vikinger schrieb:

    Für ein Hobby-OS könnte man sich vielleicht auch erst mal nur auf USB 2 und EHCI beschränken.

    Man kann sich bei einem Hobby-OS vielleicht erstmal auch auf USB 1.x beschränken, imo.


  • Mod

    Das Primärziel besteht darin, permanenten Speicher via USB anzusprechen, um Daten dort ablegen und von dort laden zu können.



  • Hallo,

    XanClic schrieb:

    erik.vikinger schrieb:

    Für ein Hobby-OS könnte man sich vielleicht auch erst mal nur auf USB 2 und EHCI beschränken.

    Man kann sich bei einem Hobby-OS vielleicht erstmal auch auf USB 1.x beschränken, imo.

    Bei USB 1 brauchst Du aber 2 verschiedene Host-Controller die der CPU auch nur wenig Arbeit abnehmen, und wenn ich das richtig verstanden hab spart sich Intel in den neuesten Chipsätzen auch die USB 1 Host-Controller ganz (damit stünde PrettyOS wieder im Regen). Wenn man ein Low-/Full-Speed-Device über einen HUB anschließt werden die USB 1 Host-Controller sowieso nicht mehr benötigt, dann läuft alles über diese Split-Transactions, ich vermute Intel hat in den Root-Hub so ein Umsetz-(TT)-Mechanismus eingebaut. Für USB 2 braucht man nur einen Host-Controller, der auch mehr Arbeiten selber erledigt, und zusätzlich die 40-fache Geschwindigkeit anbietet. Für nur Mass-Storage ist das IMHO der bessere Einstieg, später kann man dann in den Hub-Treiber noch Unterstützung für die TTs implementieren und hat USB 1 gleich noch mit erledigt.

    Ich werde mir so bald als möglich mal die 3 Host-Controller-Specs reinziehen und kann dann hoffentlich etwas genaueres sagen.

    Grüße
    Erik



  • erik.vikinger schrieb:

    Bei USB 1 brauchst Du aber 2 verschiedene Host-Controller

    Bei USB 2.0 brauch ich drei.

    erik.vikinger schrieb:

    und wenn ich das richtig verstanden hab spart sich Intel in den neuesten Chipsätzen auch die USB 1 Host-Controller ganz (damit stünde PrettyOS wieder im Regen). Wenn man ein Low-/Full-Speed-Device über einen HUB anschließt werden die USB 1 Host-Controller sowieso nicht mehr benötigt, dann läuft alles über diese Split-Transactions, ich vermute Intel hat in den Root-Hub so ein Umsetz-(TT)-Mechanismus eingebaut.

    Das wird vermutlich praktisch funktionieren, aber ist nicht USB-2.0-konform. Da müsste Intel erstmal USB 2.1 oder so rausbringen, in der definiert ist, dass es keine Companion Controller gibt.



  • Hallo,

    XanClic schrieb:

    Bei USB 2.0 brauch ich drei.

    Nein, Du kannst mit einem auskommen, es funktionieren dann nur keine Low-/Full-Speed-Devices die direkt am Host (ohne Hub dazwischen) angeschlossen sind. Hinter dem ersten Hub (falls man diese Split-Transactions unterstützt, was die USB 2 Spec ja eh verlangt) funktioniert dann trotzdem alles.

    XanClic schrieb:

    Das wird vermutlich praktisch funktionieren,

    Es funktioniert angeblich mit allen relevanten OS.

    XanClic schrieb:

    aber ist nicht USB-2.0-konform.

    Nein, die USB-Spec sagt nichts über den Host-Controller. Ich kann mir auch nen völlig neuen Host-Controller entwickeln der direkt angeschlossene Low-/Full-Speed-Devices auch auf neue Art integriert und verstoße damit nicht gegen die USB-Spec.

    XanClic schrieb:

    Da müsste Intel erstmal USB 2.1 oder so rausbringen, in der definiert ist, dass es keine Companion Controller gibt.

    Das müsste wenn dann in der EHCI-Spec stehen. Trotzdem bin ich davon überzeugt das man diesen Trick hinbekommt ohne irgendeine software-sichtbare Änderung an USB oder EHCI vornehmen zu müssen.

    Grüße
    Erik



  • OK, ich hab mir jetzt mal die EHCI-Spec runtergeladen und da steht tatsächlich:

    Spezifikation schrieb:

    A USB 2.0 Host Controller includes one high-speed mode host controller and 0 or more USB 1.1 host controllers (see Figure 1-2). The high-speed host controller implements an EHCI interface. It is used for all high-speed communications to high-speed-mode devices connected to the root ports of the USB 2.0 host controller. This specification allows communications to Full- and Low-speed devices connected to the root ports of the USB 2.0 host controller to be provided by companion USB 1.1 host controllers. If an implementation does not include companion host controllers, the host controller must include a high-speed device permanently attached to each of the EHCI ports the implementation is planning to utilize. The EHCI controller cannot work with a Full- or Low-speed device.

    Also muss ich mich geschlagen geben. 🙂

    Das Problem ist aber auch: Um zu dieser Spezfikation kompatibel zu sein, muss man Companion Controller unterstützen ("includes [...] 0 or more USB 1.1 host controllers").
    Somit muss man alle drei Host Controller unterstützen, um voll kompatibel zu sein, und kann sich nicht darauf verlassen, dass der EHCI einen Hub benutzt, um mit Low- und Full-Speed-Geräten zu kommunizieren.



  • Hallo,

    XanClic schrieb:

    Somit muss man alle drei Host Controller unterstützen, um voll kompatibel zu sein, und kann sich nicht darauf verlassen, dass der EHCI einen Hub benutzt, um mit Low- und Full-Speed-Geräten zu kommunizieren.

    Da hast Du zwar recht aber mein Vorschlag ist ja eben nicht voll kompatibel zu allen USB-Geräten zu sein sondern nur zu den High-Speed-Geräten (alle Mass-Storage-Devices sind High-Speed) und eventuelle Kompatibilität zu Low-/Full-Speed gibt es dann nur hinter einem externen Hub. Das ist zwar eine Einschränkung (außer bei neuen Intel-Chipsätzen, andere Hersteller folgen vielleicht) aber mit der kann man IMHO gut leben wenn es vorrangig nur um Mass-Storage-Devices geht.

    Grüße
    Erik



  • Hallo,

    @XanClic:
    Ich hab mal etwas wegen USB 2 µC-Board gesucht.

    Der LPC2888 von NXP gefällt mir sehr gut. http://www.nxp.com/pip/LPC2880_LPC2888.html Für den UART kann der DMA so das man auch große Logging-Daten ohne viel CPU-Arbeit senden kann.
    Von Olimex gibt es ein interessantes Board dazu. http://www.olimex.com/dev/lpc-h2888.html Das braucht nichts weiter als das USB-Kabel und ein RS232-Kabel + Pegel-Umsetzer (MAX232) als Debug-Schnittstelle zum PC. Selbst die Firmware kann man per USB reinladen (der Boot-Loader kann sich als spezielles USB-Device melden und ein spezieller Treiber schickt dann die Firmware).
    Da der LPC2888 High-Speed kann und das Olimex-Board 32MByte-SDRAM hat könnte man damit als Übungssystem ein USB-Stick mit 24MB simulieren und hätte ein Mass-Storage-Device das jegliche USB-Kommunikation zum Logging an den PC schickt. Mit so einer Basis könnte man die Entwicklung des USB-Stack vom Host-Controller-Treiber bis zum generischen Mass-Storage-Treiber komplett unterstützen, man macht einfach so lange bis das Log-File vom eigenen System genau so aussieht wie das von Linux/Windows.

    Ich weiß das für solches Spielzeug über 100 Euronen fällig sind aber deutlich billiger wird man ein µC-Board in der Klasse kaum finden. Ich schau trotzdem mal ob ich noch was finde wo auch die RS232-Schnittstelle schon fertig drauf ist.

    Grüße
    Erik



  • Vielen Dank für die Suche! 🙂

    Ich schaus mir mal an, mal sehen, wie weit ich bis zu meinem Geburtstag komme. 😃



  • Hallo,

    XanClic schrieb:

    mal sehen, wie weit ich bis zu meinem Geburtstag

    Wann ist denn der? 😃

    Ein richtiges Board mit ordentlichem RS232 hab ich noch nicht gefunden, hatte heute kaum Zeit.
    Falls man nen RS232-Pegel-Umsetzer selber bauen müsste, wie fit bist Du am Lötkolben?
    Ich würde auch gerne ein Board für den LPC2888 selber entwickeln aber das BGA-Gehäuse kann man nicht händisch löten und nen Reflow-Ofen aus einer alten Fritöse frickeln will ich auch nicht.

    Grüße
    Erik


  • Mod

    Vielleicht sollten wir noch eine Hardware-Ecke aufmachen?



  • erik.vikinger schrieb:

    XanClic schrieb:

    mal sehen, wie weit ich bis zu meinem Geburtstag

    Wann ist denn der? 😃

    Mitte April. 😉

    erik.vikinger schrieb:

    Falls man nen RS232-Pegel-Umsetzer selber bauen müsste, wie fit bist Du am Lötkolben?

    *hust*

    Ähm, mal in der vierten Klasse einen in der Hand gehabt...



  • Hallo,

    XanClic schrieb:

    erik.vikinger schrieb:

    Falls man nen RS232-Pegel-Umsetzer selber bauen müsste, wie fit bist Du am Lötkolben?

    *hust*

    Ähm, mal in der vierten Klasse einen in der Hand gehabt...

    also erst im gerade vergangenen ersten Halbjahr 😃 das ist ja noch ziemlich frisch 🤡

    Im Ernst, falls sich kein gescheites Board finden lässt und Du möchtest mach ich was passendes fertig.
    Ich hab mal hier http://www.mikrocontroller.net/topic/168335 eine Anfrage gestellt.

    Erhard Henkes schrieb:

    Vielleicht sollten wir noch eine Hardware-Ecke aufmachen?

    Für welches Thema genau? 😉

    Grüße
    Erik


Anmelden zum Antworten