Forum: Mikrocontroller und Digitale Elektronik SPI, ISP, USI, TWI, I2C


von S. Bauer (Gast)


Lesenswert?

Hallo,


habe mich ein wenig erkundigt bezüglich der Abkürzungen
SPI = Serial Peripheral Interfac
ISP = In System Programmable
USI = Universal Serial Interface
TWI = Two-Wire Serial Interface
I2C = Inter IC Bus


Die Unterschiede habe ich bisher noch nicht so ganz verstanden.

ISP ist wohl eine Möglichkeit Chips direkt zu programmieren. Es ist
eine Art Protokoll von SPI. Ähnlich wohl dem Protokoll TCP/IP von
Ethernet. SPI ist das mit dem MOSI, MISO, SCK.

USI wiederherum geht wohl im 3-wire oder 2-wire Modus. Der 2-wire Modus
ähnelt dem I2C. Ist ist immer SCL und SDA. TWI wirkt wieder wie das
selbe...ein Protokoll von USI?

Und was ist dann UART. Das ist doch auch eine
Kommunikationsmöglichkeit.


Kann jemand vielleicht Licht hinter die Features bringen?

Vielen Dank!

S. Bauer

P.S. Das Problem bekam ich beim Vorhaben mehrere Mikrocontroller
miteinander zu vernetzen und eine Kommunikation mit dem PC
herzustellen. Ich werde den AT90CAN128 verwenden, aber es gibt noch so
viele Möglichkeiten dabei Einstellungen vorzunehmen....

von dave (Gast)


Lesenswert?

SPI ist Synchron, d.h. es hat einen Takt und Datenleitung(en). Der AVR
besitzt also MOSI, MISO und SCK (MasterOutSlaveIn, MasterInSlaveOut und
Clock). Der AVR spielt dabei meistens Master.
Das ganze ist eigentlich sowas wie Schieberegister: während der Master
dem Slave in sein Schieberegister schaufelt, macht der Slave seine
Daten in das vom AVR.

USI ist bei den kleineren... ist irgendwie dazu da, irgendwie TWI oder
SPI zu haben.

I2C (IIC) und TWI sind das gleiche. I2C wurde von Phillips entwickelt
und Atmel will ja keine Gebühren zahlen, drum heißts da TWI.
Hier hat man SDA und SCL. Die zwei Leitungen werden mit ein paar kOhm
hochgezogen. Das ganze ist nen Bus mit mehreren möglichen Teilnehmern,
auch hier bei SCL nen Clock und das ganze Besitzt nen schönes Protokoll
für die Kommunikation, deswegen können, im Gegensatz zu SPI,  mehrere
Slaves angesprochen werden. Weiteres findeste in der Spezifikation von
Phillips (siehe Google.de)

U  S/A  RT
Universal (A)Synchronous Receiver/Transmitter
Meistens wird das Asynchrone gebraucht, bei dem du die Baudrate im
Programm hinterlegst und damit kein Takt gebraucht wird. Nach dem
Startbit müssen beide Teilnehmer halt die vorher vereinbarte Zeit
warten, dann kommt das nächste.

von S. Bauer (Gast)


Lesenswert?

Vielen Dank!

von Ratber (Gast)


Angehängte Dateien:

Lesenswert?

Zusatz I2C bzw. TWI

I2C ist abgeleitet aus I²C (Falls das nicht richtig dargestellt wird: I
"hoch Zwei" C) und das wiederum aus IIC was "Inter IC Bus bedeutet.

TWI ist wie Dave schon sagte die Lizenzrechtliche Umschreibung von
Atmel und bedeutet "Two Wire Interface"

Technisch beide Identisch.

Der komplette Bus beinhaltet aber Drei Leitungen.
Neben Daten (SDA "Serial DAta") und Takkt (SCL "Serial CLock") gibt
es noch die Interuptleitung (INT) die Änderungen an einem Baustein
signalisieren.

Beispiel:
Ein Portbaustein erfährt an einem Schalteingang eine Änderung und
Signalisert das dem Master durch Pegeländerung auf der INT-Leitung.
Der Master fragt alle Slaves ab und der betreffende setzt die
INT-Leitung damit wieder zurück.

Damit spart man sich das ständige Abfragen aller Slaves.


USI ist ein weiterer Begriff bei Atmel und bedeutet "Universal Serial
Interface"

Darunter ist ein Universalinterface realisiert das SPI,TWI und UART
zusammenfasst.



Schau einfach mal in das Datenblatt eines Megas da steht eigentlich
alles drinne was nötig ist.

Eine einfache Übersicht des I2C (TWI) habe ich angehängt.

von PapaNappa (Gast)


Lesenswert?

Kann ich denn z. B. den ATtiny24 auch ganz normal per SPI programmieren? 
Dort
http://www.atmel.com/dyn/products/param_table.asp?family_id=607&OrderBy=1197&Direction=ASC
steht unter SPI nämlich USI und ich weiß jetzt nicht was ich damit 
anfangen soll.

von D. W. (dave) Benutzerseite


Lesenswert?

Man programmiert die AVR nicht "per SPI". Das ganze geschieht mit dem 
ISP-Verfahren :) ein kleiner, bedeutender Unterschied.
Bei den meisten AVR werden jedoch die gleichen Pins wie beim 
SP-Interface benutzt, was z.B. beim m128 zu Verwechslung führt.

In der Tabelle steht, dass der ATtiny24 ISP unterstützt, was 
eigentlich alle AVR beherrschen. Also kannst du ihn "ganz normal per SPI 
programmieren", wenn ich dich richtig verstanden habe.

von johnny.m (Gast)


Lesenswert?

@dave:
> deswegen können, im Gegensatz zu SPI,  mehrere Slaves angesprochen werden.
Nö. Im Gegensatz zu I²C können bei SPI (theoretisch) beliebig viele 
Slaves angesprochen werden, da bei SPI die Adressierung (Auswahl) der 
Slaves nicht über das Protokoll geht, wodurch eben bei I²C die Anzahl 
der Slaves begrenzt ist, sondern hardwaremäßig über 
Slave-Select-Signale. Die bedeuten natürlich einen erheblich höheren 
Verdrahtungsaufwand (selbst wenn der Master die Adresse binär ausgibt 
und man jedem Slave einen Adressdecoder spendiert), dafür ist SPI aber 
viel schneller als I²C, weil eben (abgesehen von der synchronen 
bidirektionalen Übertragung Master -> Slave und Slave -> Master) nicht 
erst die Slave-Adresse über den Bus geschickt werden muss.

Zu USI ist zu sagen, dass es sich dabei um ein All-in-One-Interface 
handelt, das lediglich die Hardware zur seriellen Kommunikation enthält, 
jedoch praktisch keine Protokoll-Implementierung. Die muss dabei in 
Software implementiert werden, je nachdem, welchen Interface-Typ man 
nutzen will.

ISP ist ein "Oberbegriff" und bedeutet tatsächlich nichts anderes als 
"In System Programming". ISP hat generell (obwohl es ein Anagramm von 
SPI ist) nichts mit SPI zu tun. Bei den ATMEL AVRs ist es eher "Zufall", 
dass für die Programmierung im System das SPI-Interface genutzt wird 
(und zwar nicht nur, wie behauptet, die Anschlüsse, sondern auch die 
Hardware). Bei anderen µC-Familien und Herstellern werden durchaus auch 
andere ISP-Verfahren verwendet.

von fieser Rahul (auch Oskar genannt) (Gast)


Lesenswert?

Um noch einen draufzusetzen:
per JTAG kann man auch ISP...
Oder per Bootloader.
ISP bedeutet einfach, dass der Controller bzw. der Programmspeicher die 
Schaltung nicht mehr zwecks Umprogrammierung verlassen muß, um bspw. in 
einen Programmer gesteckt und neu beschrieben zu werden.

Der Bootvorgang im PC ist ja quasi auch ein ISP: Das BIOS saugt sich das 
Betriebssystem aus einem (externen) Speicher. Der könnte natürlich auch 
durch einen entsprechenden Programer verändert werden. Eigentlich wird 
er ja auch dauernd dadurch verändert, dass man neue Software auf dem 
Rechner installiert...

von D. W. (dave) Benutzerseite


Lesenswert?

Ob das beim PC jetzt ein ISP ist, könnte man an der Stelle bezweifeln, 
da der ganze PC ja als Einheit dasteht. Das Programm wird nur in den 
Programmspeicher geladen, woraus es jetzt ausgeführt wird :) Das 
Programm an sich wird nicht geändert, höchstens man ändert was im 
laufenden Betrieb.

Aber darüber könnte man doch ne Semesterarbeit schreiben...

Mit dem SPI meinte ich, dass ohne weitere Leitungen keine weiteren 
Slaves angesprochen werden können, haste sicher bemerkt.

von fieser Rahul (auch Oskar genannt) (Gast)


Lesenswert?

>Aber darüber könnte man doch ne Semesterarbeit schreiben...

Bei den Philosophen...
... könnte man daraus auch eine Magister- oder sogar Doktor-Arbeit 
machen.

von D. W. (dave) Benutzerseite


Lesenswert?

So weit wollte ich es nicht übertreiben... ich hatte schon Diplom 
geschrieben...

von isa (Gast)


Lesenswert?

Hallo,
kann jemand mir sagen,ob SPI schon im Entwicklungsboard scb9328 
integriert ist?
wenn nein wie kann ich es programmieren?Gibt es ein muster?
Danke!

von 3357 (Gast)


Lesenswert?

*** hijack alert ***
SPI ist das Protokoll,das fuer ein Schiebregister passt. Also Daten 
ausgeben, dann den positive clock, bit fuer bit, byte per byte und am 
Ende kommt der strobe (CS), der das alles uebernimmt.

*** hijack alert ***

von isa (Gast)


Lesenswert?

Hallo
Soweit 9ich weiss muss ich diese SPI-Schnittstelle für scb9328 
programmieren.Hat jemand Ahnung wie die ganze gemacht werden soll oder 
ein Programm bereit fertig?
Danke für eure Hilfe!
Isa

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.