Ist es möglich, einen Microchip PIC32 gleichzeitig als USB-Host und -Gerät zu verwenden?

Ich entwerfe ein System und vielleicht (wenn ich keine besseren Alternativen finde) muss ich einen PIC32 als Handler zwischen zwei USB-Geräten und einem Host verwenden. Mein Plan ist es, den PIC32 zu verwenden, um die Geräte zu verstecken, sodass der PIC bestimmte Protokolle stromabwärts und ein anderes Protokoll stromaufwärts hat. Ich habe viel über die USB-Spezifikation und über die Unterstützung von USB auf der Mikrocontroller-Serie Microchip PIC32 gelesen. Aber dennoch habe ich einen grundlegenden Zweifel: Ist es möglich, zwei Geräte hinter dem PIC und den PIC gleichzeitig vorgeschaltet an einen Host anzuschließen? Mit anderen Worten, ist es möglich, dass der PIC32 gleichzeitig als Host und Gerät fungiert?

Ich würde mich sehr über jeden Hinweis oder Vorschlag dazu freuen

Danke im Voraus.

Sind Ihre Upstream-Geräte auch USB (und Sie möchten die von ihnen gesendeten und verwendeten Daten ändern) oder verwenden sie ein anderes Kommunikationsprotokoll?
@Kevin: genau, die Upstream-Geräte sind auch USB. Ich möchte mit ihnen vom PIC aus kommunizieren und dann den PIC mit einem anderen Protokoll stromaufwärts mit einem PC verbinden. Der PIC wäre ein Handler zwischen dem PC und den Upstream-Geräten.
Der MAX3421E ist eine praktische Möglichkeit, einen eingebetteten USB-Host zu erstellen, obwohl er wahrscheinlich genauso viel oder mehr kostet als ein zweiter PIC. circuitsathome.com/products-page/arduino-shields

Antworten (4)

Der USB kann sich entweder im Gerätemodus oder im OTG-Modus befinden. Sie können OTG nicht auf demselben USB-Bus wie einen Host wie einen Computer haben.

Mehrere OTG-Geräte können mithilfe von "HNP" (Host negotiation protocol) zwischen Host- und Gerätemodus wechseln, aber das ist bei einem reinen Host nicht möglich.

Sie würden zwei separate USB-Busse benötigen - einen zwischen dem PC und dem PIC und einen zwischen dem PIC und den Geräten. Ich glaube nicht, dass es ein PIC-Gerät gibt, das 2 verschiedene USB-Schnittstellen hat.

Ich würde vorschlagen, ein zweites Gerät neben dem PIC32 zu verwenden, um als USB-Gerät für die Verbindung mit dem PC zu fungieren, und den USB des PIC32 im OTG-Modus zu verwenden, um mit den Geräten zu sprechen. Dieses andere Gerät könnte so einfach wie ein FTDI-Chip sein, um über RS232 mit dem PIC32 zu kommunizieren, oder etwas Leistungsstärkeres wie ein anderer PIC (vielleicht ein PIC18 mit USB-Unterstützung), damit Sie über andere Protokolle wie I²C oder SPI sprechen können.

Es scheint, dass Sie über etwas Ähnliches wie einen USB-Hub sprechen. Wie Majenko sagt (und soweit ich weiß auch), haben alle PIC32 nur einen USB-Anschluss, so dass dies mit dem beteiligten PC nicht möglich wäre.
Sie benötigen ein weiteres USB-Gerät (z. B. FTDI, Cypress IC, ein weiteres PIC), um den PIC32 mit dem PC zu verbinden, und dann kann der PIC32 als Host für die nachgeschalteten Geräte fungieren.

Wie Kevin fragt, müssen Sie mit den Geräten über USB sprechen? Wenn dies nicht erforderlich ist, verwenden Sie SPI, I2C, UART oder was auch immer, und die Dinge werden viel einfacher.
Wenn Sie uns etwas mehr über die Geräte erzählen, könnten einige nützliche Vorschläge hervorkommen.

Abhängig von der benötigten Rechenleistung sollten Sie sich Cypress und TI und FTDI (Viniculum?) ansehen, da sie einige USB-Controller-ICs mit eingebautem uC anbieten und daher möglicherweise eine bessere Wahl als der PIC32 sind.

Im Prinzip muss ich, weil ich keine gleichwertigen Geräte gefunden habe, die zum Beispiel I2C verwenden ... aber natürlich würde ich es vorziehen, I2C, UART oder etwas anderes als USB zu verwenden, wenn ich finde, dass dies eine praktikable Option ist.
@ Frederico - aktualisierte Antwort bezüglich der PIC32-Alternative, die Sie möglicherweise in Betracht ziehen möchten.

Wenn Sie versuchen, 2 nachgeschaltete Geräte an einen PIC32 anzuschließen, lautet die Antwort nein ... Sie benötigen einen Hub, und PICS hat diese Treiber noch nicht (nicht von Microchip) (es sei denn, Sie möchten die Fahrer selbst, und teile es mit uns, das wäre toll ;-) )

Wenn Sie versuchen, einen PIC als USB-Gerät anzuschließen, ist die Antwort ein einfaches Ja. Wenn Sie versuchen, einen PIC gleichzeitig als Host und als Gerät zu verbinden, ist die Antwort ein klares Nein. Sie würden ein uC mit 2 USB-Anschlüssen benötigen ... noch keine PICs.

Vielleicht sieht Ihre Situation so aus:

  • PIC-1 funktioniert als Gerät, um mit dem PC verbunden zu werden (kann Ihre anderen Geräte "verstecken")
  • PIC-2 arbeitet als Host, der mit einem Ihrer Geräte verbunden ist
  • PIC-3 arbeitet als Host, der mit Ihrem anderen Gerät verbunden ist
  • PIC-1, PIC-2 und PIC-3 sind mit i2c oder einem anderen Bus verbunden, um Informationen untereinander auszutauschen
  • Haben PICs schließlich die Macht, mit dieser Situation umzugehen, lautet die Antwort ja
Bitte verwenden Sie KEINE GROSSBUCHSTABEN, wenn dies NICHT ERFORDERLICH ist. Dadurch wird Ihr Beitrag VIEL SCHWERER ZU LESEN. Überprüfen Sie auch die FORMATIERUNG im VORSCHAU-Bereich unter Ihrem Beitrag.

Dies ist die sogenannte „Wie lang ist ein Stück Schnur“-Frage. Die Antwort hängt ganz davon ab, wie "hart" die gerätebezogenen Aufgaben sind. Es ist sehr wahrscheinlich, dass Sie leicht tun können, was Sie wollen. Aber lesen Sie weiter ...

Das einzige wirkliche Problem sollte sein: "Hat der PIC genug Ressourcen?"

Zu den Ressourcen hier gehören:

  • Rechenleistung

  • Programmspeicher

  • Datenspeicher (RAM und Flash)

  • Echtzeitreaktionsfähigkeit (z. B. die Fähigkeit, Interrupts zu bedienen und Interrupt-gesteuerte Aufgaben auszuführen).

  • Spezialperipherie (z. B. Hardware für USB und/oder Ethernet)

  • Weitere Besonderheiten, die die Implementierung einer gegebenen Geräteschnittstelle erleichtern.

  • Allgemeine E/A

  • Andere ...

Der PIC32 ist einigermaßen leistungsfähig. USB stellt eine ziemlich hohe Programmlast dar, aber es sollte einfach sein, festzustellen, wie viel Ressourcen es verbraucht. Danach, wie viel Ressourcen in jeder Kategorie benötigt jede der Geräteschnittstellen? und wie viel hat der Prozessor übrig?

Wenn Ihre Geräte einigermaßen "normal" sind, werden Sie kein Problem damit haben, sie und USB zu verwalten.

Wenn Ihre Geräte besonders anspruchsvoll sind, müssen Sie jeden der oben genannten Punkte ansprechen. Wenn Sie beispielsweise versuchen, eine große Flash-Karte mit 100 MB/s zu verwalten oder ein SATA-Laufwerk ohne benutzerdefinierten Schnittstellen-IC zu steuern oder komplexe Datenverschlüsselung oder MPEG-Videocodierung durchzuführen oder ..., dann können Sie das tun keine PS mehr haben.

ok, aber ist es möglich, dass die PIC32-Hardware als USB-Host fungiert und gleichzeitig funktioniert? Ich meine im Hardware-/elektrischen Sinne ... dann werde ich anfangen zu studieren, ob die Leistung gut genug ist.
@Federico - Genau das, was Sie versuchen, ist nicht klar. Wenn Sie von anderen Geräten sprechen, beabsichtigen Sie dann, sie über USB oder auf andere Weise anzuschließen?
ein Armenmann-Diagramm zur Verdeutlichung der Ideen: PC (Host) <--- (Funktion) PIC32 (Host) <-- (Funktion) Geräte. Und beide <-- (Verbindungen) arbeiten gleichzeitig. Ist das mit einem PIC32 elektrisch möglich?
@Federico - Sie müssen die Frage beantworten, die ich und andere gestellt haben - welche Art von Schnittstelle beabsichtigen Sie zwischen den einzelnen Teilen. // USB für PC-PIC32?. USB für PIC32-Funktion?
@Federico - Re "ok, aber ist es möglich, dass die PIC32-Hardware als USB-Host fungiert und gleichzeitig funktioniert?" Funktion wie? Funktion macht was? Funktion mit welchem ​​Protokoll.
Ich glaube, wir haben ein Terminologieproblem. Mit „Funktion“ meine ich ein USB-Gerät, wie es beispielsweise hier definiert ist: technet.microsoft.com/en-us/library/cc939102.aspx
@Russell - Ich kann mich irren, aber ich denke nicht, dass Sie die Frage ganz richtig interpretieren. Ich denke, Federico sucht nach etwas, das Majenkos Antwort näher kommt. Erstens können Sie nicht zwei Host-Geräte auf demselben USB-Bus haben, was impliziert, dass er ein PIC32-Gerät mit zwei USB-Anschlüssen benötigt. Zweitens bezweifle ich, dass jemand, der diese Frage stellt, eine USB-Schnittstelle an einigen GPIO-Pins bit-bangen möchte ... Ich denke, er würde nach einem PIC mit zwei USB-Peripheriegeräten suchen. Auch dies ist nur meine Meinung zu der Frage.
@Federico - Aus der Diskussion in verschiedenen Kommentaren geht hervor, dass meine ursprünglichen Kommentare und Fragen tatsächlich relevant waren UND dass Sie sie immer noch nicht beantwortet haben. Geben Sie uns eine vollständigere Beschreibung und Sie erhalten eine bessere Antwort. zB Sie sagen "... im Prinzip muss ich, weil ich keine gleichwertigen Geräte gefunden habe, die zum Beispiel I2C verwenden ... aber natürlich würde ich es vorziehen, I2C, UART oder etwas anderes als USB zu verwenden, wenn ich das finde eine praktikable Option ... ". Verwenden Sie also WIEDER I2C/UART/xxx, WAS ZU TUN? Welche zusätzlichen Funktionen oder Module versuchen Sie zu integrieren? Helfen Sie uns, Ihnen zu helfen!
Der Phantom-Downvoter schlägt 9 Jahre später zu :-). Ausweis = :-)