UART ist schneller als I2C bei gleichem Bustakt, da bei I2C u.a. für die Daten immer noch zusätzlich Schreibaktionen für die Adressierug des/der Slaves nötig ist. Außerdem arbeitet I2C immer nur in 1 Richtung, also quasi half-duplex; UART kann hingegen prinzipiell full-duplex.
Weiterhin sind die Message-Puffer begrenzt, bei Arduino für I2C auf 32 Bytes, bei UART auf 64bytes, was für UART ebenfalls vorteilhafter ist.
Aber nicht alle Taktraten sind immer beiderseits möglich, so wird z.B. nicht überall ein hoher synchroner UART Takt von z.B. 400kHz-1MHz zwischen verschiedenen Geräten erreicht, und wenn auch meist 400kHz (full-speed) I2C Takt möglich ist, gilt dies auch nicht überall auf allen Plattformen auch für 1Mbit/s (Fast i2c) oder 3,2 Mbit/s (Highspeed I2C).
Die ARM-Prozessoren können z.B. locker Fast-i2c mit 1MHz, für AVRs gilt dies meist nicht.
Sieht man sich aber die schnelleren Standard-Taktraten für UART an:
115200 230400, 460800, 500000, 576000, 921600, 1000000, 1152000, 1500000, 2000000, 2500000, 3000000, 3500000, 4000000
so sind die auf einem Due auf deutlich unter 400kHz begrenzt ("230.4k just barely, maybe works, sometimes"),
auf AVRs geht es wegen der geeigneteren UART clock devider deutlich höher, da deren cpu-clock von 16MHz besser mit geringeren Fehlern heruntergeteilt werden kann als die 84MHz des Due oder die 48MHz des M0.
Mehrere Geräte mit multi-slave und auch multi-master sind dagegen eher mit I2C möglich.
Je höher die Taktraten und je länger die Kabel sind, entstehen aber exponentiell mehr Übertragungsfehler, die in jedem Falle duch Fehlerkontrolle wie checksums etc geprüft und die Daten dann ggf. verworfen werden müssen.
Nach meiner Erfahrung mit Raspis, ARMs und AVRs funktionieren zwischen allen (!) Plattformen gerade noch akzeptabel:
UART 115200 bis 230400 kHz, auf AVRs und Raspi auch bis mind. 1MHz
I2C mit AVRs bis 400 kHz, auf ARMs und Raspi auch bis mind. 1 MHz
- mit jew. Geschwindigkeitsvorteil für UART per full-duplex, ansonsten bei half-duplex (UART per Handshake) fast gleichwertig.
Lesezeichen