USB als lokaler Bus in einem eingebetteten System

Ist USB eine vernünftige Wahl für einen lokalen Bus?

Was sind Vor- und Nachteile?

Welche Zuverlässigkeitsbedenken gibt es?

Anzahl der Busspezifikationsgeräte ~4; Peripheriegeräte sind permanent mit derselben Platine wie der Host verbunden (gelötet oder über Stiftleisten).

Manche Geräte sind mickrig, zB serielle Schnittstelle oder Temperatursensor, manche sind komplex, zB ein LTE-Modem oder Ethernet oder WLAN. Peripheriegeräte sind solche, die als eigenständige USB-Geräte verfügbar sind, oder es werden dieselben Chips in solchen Geräten verwendet. Linux soll schon alle Treiber haben.

Idealerweise würde ich der Einfachheit halber nur einen Bus (ggf. mit Hubs) verwenden und eventuell Änderungen ohne einige Komponenten und mit anderen Komponenten mit niedriger Geschwindigkeit vornehmen.

Systemspezifikation ARM, Linux, DC-betrieben, entspricht in etwa einem Android-Tablet.

Beachten Sie, dass USB zwar viele Daten schnell übertragen kann, aber eine erschreckend hohe Latenz hat. Wenn Sie also Peripheriegeräte oder Interaktionen mit niedriger Latenz benötigen oder jemals erwarten, stellen Sie sicher, dass dies nicht Ihr einziger Weg ist, etwas von Ihrem Prozessor abzuhängen.
Bedenken hinsichtlich der Zuverlässigkeit: USB ist ein schrecklich komplizierter Haufen Mist. Der Vierdrahtbus selbst ist einfach, aber dann ist da noch die Software.
@Kaz, ich teile Ihre Besorgnis auf anekdotischer Ebene. Wenn Sie technische Details und Zahlen haben, um Ihre Behauptung zu untermauern, wie wäre es, wenn Sie Ihren Kommentar in eine vollwertige Antwort umwandeln?

Antworten (4)

Was Sie sehen, ist ein Problem, das ich gerne als Bushierarchie bezeichne .

Sie haben Hochgeschwindigkeitsgeräte, die einen schnellen Pfad mit geringer Latenz zur CPU benötigen (wie das LTE-Modem), und langsame Geräte wie den Temperatursensor. Der Anschluss eines vollwertigen LTE-Modems über I2C führt zu einem ernsthaften Engpass des Systems. Und das Anschließen eines Temperatursensors an USB ist ein ernsthafter Overkill. Sie müssen Prioritäten setzen.

Auf welche Geräte soll am häufigsten zugegriffen werden? Welche müssen schnell reagieren? Und welche brauchen nicht so viel Bandbreite?

Fühlen Sie sich frei, Ihre Frage zu bearbeiten.


Bearbeiten:

USB ist vielleicht doch nicht so ein Overkill. Nur in den neuesten Versionen davon (2.0, 3.0) hat es den Eindruck bekommen, dass es nur auf schnelle Peripheriegeräte abzielt. Davor war es einfach ein Universal Serial Bus .

Das ändert nichts daran, dass der Implementierungsaufwand oft zu hoch ist.

Das sind die Worte, die ich versucht habe zu finden.
Bearbeitet. Zum Beispiel integriert Himbeerpi Ethernet über USB, Erweiterbarkeit bzgl. verschiedene Versionen des Produkts und idealerweise nur ein Bus ist die Grundidee. Die Frage ist, ob die Idee sinnvoll ist.
Tatsächlich verbraucht diese Ethernet-USB-Kombination so viel Strom, dass Pi für batteriebetriebene Anwendungen unbrauchbar ist.
Wenn ein Temperatursensor an USB übertrieben ist, was macht das dann zu einer USB-Tastatur? Ein Verbrechen gegen die Menschlichkeit? Low-Data-Low-Power-Geräte wie Kajaks, Mäuse und Temperatursensoren sind der Grund, warum USB 1.1 Low Speed ​​erfunden wurde.
Gutes Argument. Ich werde die Antwort bearbeiten.
@Passerby Es gibt einen signifikanten Unterschied zwischen einer Tastatur und einem Temperatursensor, da eine Tastatur ein Verbraucherprodukt ist, das "Plug-and-Play" benötigt, der Temperatursensor jedoch ein fest verdrahtetes Gerät ist. Es ist den zusätzlichen Aufwand wert, eine Tastatur benutzerfreundlich zu gestalten; Ich denke nicht, dass USB für einen Temperatursensor sinnvoll ist.
@joehass erklärt, dass USB für Tastaturen und Touchpads verwendet wird, die in Laptops eingebettet sind, wo Plug-and-Play nicht erforderlich ist und es sich nicht um ein typisches Verbraucherprodukt handelt, bei dem USB eine Benutzerfreundlichkeit hinzufügt. Warum dann keine direkte Schnittstelle?
@Passerby Sobald die Skaleneffekte eine USB-Schnittstelle zu einer Tastatur oder einem Touchpad sehr kostengünstig gemacht haben, ist es sinnvoll, sie auch in einem Laptop zu verwenden . Diese Größenvorteile gibt es bei USB-verbundenen Temperatursensoren nicht.
@joehass Zitat erforderlich
@Passerby Ich denke, Sie haben Ihre eigenen Beweise vorgelegt. Wenn Sie sich die Laptops ansehen, die Sie als Beispiel verwendet haben, werden Sie feststellen, dass die Temperatursensoren an einen I2C-Bus und nicht an USB angeschlossen sind.

Wenn das Gerät nicht bereits über eine USB-Schnittstelle wie Tastatur oder Maus verfügt, ist dies mit viel Arbeit und zusätzlicher Hardware verbunden. Zum Beispiel das Anschließen an einen Temperatursensor, der nur über eine I2C-Schnittstelle verfügt. Sie können dem Sensor keine USB-Schnittstelle hinzufügen, daher müssen Sie einen kleinen Mikrocontroller hinzufügen, z. B. einen PIC18, der sowohl über ein USB-Gerät als auch über eine I2C-Schnittstelle verfügt. Der PIC spricht dann USB zurück zu Ihrem Host und I2C zum Temperatursensor. Aber warum schließen Sie den Temperatursensor nicht einfach direkt an Ihren Host-Mikrocontroller an?

Die Fragen setzen die Verfügbarkeit von Peripheriegeräten mit USB-Schnittstelle voraus. Es geht um Integration und praktische Belange.
@qarma Diese Annahme wurde in der ursprünglichen Frage (vor der Bearbeitung) nicht angegeben.

Basierend auf Ihren Anforderungen ist USB ideal. Denken Sie daran, das U steht für universell. Sie können USB-NICs, WLAN, Maus/Tastatur/Touchpad/Touchscreen, Soundkarten, Webcams, Hölle, sogar USB-Displays haben. Es ist nicht das effizienteste, aber für zwei Netzwerkkarten, einen Temperatursensor und ein serielles Gerät ist es dafür ausgelegt. So sehr, dass sich die meisten Hersteller von Computergeräten stark darauf verlassen.** Nicht nur billige SBCs oder Tablets, sondern sogar Schwergewichte wie Apple und Dell verwenden es für Touchpads und Tastaturen und Webcams und WLAN und Bluetooth und IR-Ports in all ihren Laptops .**

USB ist allgegenwärtig, einfach zu implementieren und hat sehr niedrige Platinenkosten in Bezug auf Routing und Teile.

Während Sie Arm-Geräte mit 4 Ports erhalten können, haben die meisten einen oder zwei Root-Ports (Busse), die dann mit einem Hub-IC verbunden sind. Ihr größter Flaschenhals wird das Mischen von High-Speed-Geräten mit Full- oder Low-Speed-Geräten auf einem einzigen Hub sein. Günstige Hub-ICs verfügen über einen Single Transaction Translator, der ein einzelnes Downstream-Gerät mit niedriger oder mittlerer Geschwindigkeit zu einem Hochgeschwindigkeits-Uplink bringen kann. Bessere haben einen MTT, Multiple Transaction Translators, sodass mehrere langsame Geräte mit hoher Geschwindigkeit überbrückt werden können. Oder stellen Sie einfach sicher, dass die niedrige Geschwindigkeit auf einem Hub und die hohe Geschwindigkeit auf einem anderen Hub ist.

Aber da Sie arm als beabsichtigten SOC haben, haben Sie Zugriff auf die richtigen Busse für Sound oder i2c oder spi (für den Temperatursensor oder seriell) oder Video oder sogar einen eingebauten Ethernet-Treiber ohne die Magnetik. High-End-ARM-Chips, vergleichbar mit billigen Android-Tablets oder -Routern, sind voll ausgelastet.

Ich muss widersprechen - in keiner Weise denke ich, dass USB einfach zu implementieren ist.
@dzarda Sie können USB mit einem 30-Cent-Mikrocontroller schlagen. Sie können USB zu einem Produkt mit höchstens sechs Widerständen und 2 Kappen hinzufügen. Sie konnten keinen Linux ARM SOC ohne USB finden, wenn Sie es versuchten. USB ist einfach zu implementieren, wenn der Soc es eingebaut hat, und Linux-Kernel-Autoren haben die Unterstützung innerhalb weniger Wochen eingerichtet. Google ddwrt ub, wenn Sie an mir zweifeln.
+1. Vergessen Sie auch nicht die Reibung der Entwickler mit Linux-Gerätetreibern. Für weit verbreitete Peripheriegeräte mit vorhandener USB-Unterstützung (z. B. Netzwerk, WLAN, Wechseldatenträger) ist die Nutzung bereits vorhandener Gerätetreiber ein großer Vorteil gegenüber der Möglichkeit, einen eigenen Treiber schreiben zu müssen, um einen Low-Level-Zugriff auf ein SOC-Peripheriegerät zu erhalten, das möglicherweise noch nicht vorhanden ist von Ihrem Linux-Kernel unterstützt. Dieser Gewinn könnte groß genug sein, damit sich der 8-Pin-PIC, der Low-Speed-USB für einen Temperatursensor implementiert, lohnt.

SPI

Vorteile

  • gut für 50 MHz
  • kann mit mehreren Slaves kommunizieren
  • einfaches Protokoll
  • Vollduplex Nachteile
  • Keine Standardschnittstelle

I2C

Vorteile

  • Viele langsame Chips verwenden I2C
  • Broadcast-Protokoll, bei dem sich mehrere Slaves auf dem Bus befinden können

Nachteile

  • langsame Geschwindigkeit
  • komplizierter als spi

USB

Vorteile

  • Standardschnittstelle
  • wahrscheinlich Treiber bereit und getestet

Nachteile

  • sehr kompliziert zu debuggen
  • Mit Hub teilen sich die Peripheriegeräte die Bandbreite

Andere Schnittstellen umfassen SDIO, UART usw

Wie bereits erwähnt, müssen Sie die Bushierarchie mit Ihren Bandbreitenanforderungen definieren. Wahrscheinlich würde das LTE-Modem eine direkte Speicherschnittstelle oder eine PCI-Schnittstelle erfordern.

Außerdem gibt es Phy-Übersetzer wie FTD232 ( http://www.ftdichip.com/FTProducts.htm ), die USB-Spi, USB-Uart usw. ausführen können und weit verbreitet sind