2014-01-30 3 views
19

Ich untersuche eine Möglichkeit, zwei Mikrocontroller zu verbinden. Auf der Ebene der Serialisierung denke ich an Nano-Protobuffer (http://code.google.com/p/nanopb/). Auf diese Weise kann ich Nachrichten verschlüsseln/decodieren und sie zwischen zwei Prozessoren senden.UART vs I2C vs SPI für Interprozessor-Kommunikation zwischen Mikrocontrollern

Grundsätzlich wäre ein kleiner Prozessor der RPC-Server, der mehrere Funktionen ausführen kann. Größere Prozessoren rufen RPCs über gesendete Nachrichten auf, und wenn die Daten bereit sind, werden sie von einem kleineren Prozessor gelesen.

Was wären die Vor-/Nachteile der Verwendung von UART, I2C oder SPI?

Nachrichten werden vor dem Senden in die Mailbox-Warteschlange gestellt.

Mit freundlichen Grüßen, Drasko

+1

Diese Frage scheint off-topic zu sein, da es sich um Computerdesign handelt, nicht um Programmierung. –

+1

i2c ist im Allgemeinen unangenehm, bidirektionale Datenleitungen verursachen immer Probleme, nur als letztes Mittel für Peripheriegeräte, die keine andere Option haben. –

+0

Sie können den schnellsten verwenden. Grundsätzlich ist es SPI. – kirill

Antwort

23

Es auf Ihren gesamten Bedarf abhängig ist und wie teuer sind Pins.

I2C benötigt nur zwei Pins, aber es ist langsam und es mit oder ohne Interrupts zu handhaben ist ein Schmerz, selbst mit den eingebauten Peripheriemodulen. Es ist ein Master/Slave-System, es ist gut für die Steuerung vieler langsamer Geräte wie Temperatursensoren.
Nur zwei Leitungen für alle Busgeräte, die Auswahl erfolgt über eine I2C-Adresse im Protokoll.

Uart benötigt zwei Pins, ist normalerweise schneller, einfacher zu handhaben, benötigt aber (fast) die gleichen Uhren auf beiden Seiten. Eins zu eins asynchrone System, kann gut sein, wenn beide Systeme manchmal Daten gesendet werden müssen, ohne auf eine Master-Abfrage zu warten.
Kann auch als Bussystem verwendet werden, aber dann benötigen Sie eine Master/Slave-Struktur oder komplexere Protokolle.

SPI benötigt 3 (oder 4 mit CS) Pins, es ist die schnellste, einfach zu implementieren, auch mit DMA, geringer CPU-Zeitaufwand, oft gepuffert. Wenn Sie genügend freie Pins haben, würde ich es bevorzugen.

+0

SPI ist Master/Slave - der Master sendet die Uhr, so dass der Slave (jeder Slave bei Verwendung von CS) eine Interrupt-Leitung benötigt, um eine Übertragung anzufordern. Für mich ist UART am einfachsten zu implementieren für Situationen, in denen jedes Ende in der Lage sein soll zu senden, wann immer es will. – barny

Verwandte Themen