Forum: Mikrocontroller und Digitale Elektronik SPI / I²C Anzahl unterschiedlicher Devices


von r_u_d_i (Gast)


Lesenswert?

Hi

gibt es eigentlich eine SLAVE - Teilnehmer Begrenzung für

SPI
I²C

Eine sinnvolle Empfehlung?

SPI
I²C

Danke!
lg rudi ;-)

von Klaus R. (klara)


Lesenswert?

r_u_d_i schrieb:
> Hi
>
> gibt es eigentlich eine SLAVE - Teilnehmer Begrenzung für
>
> SPI
> I²C
>
Bei I2C kannst Du je Bus in der Regel bis zu 8 gleiche Bausteine 
adressieren. Danach können Bus - Multiplexer eingesetzt werden. Die 
entkoppeln zugleich den Bus, sprich: die Leitungskapazität.
Elektrisch spielt die Leitungskapazität eine wichtige Rolle. Sie sollte 
400 pF nicht überschreiten. Die Leitungskapazität hängt von der Anzahl 
der am Bus-Segment angeschlossenen Bausteine und von der Leitungslänge 
ab. Allerdings kann man auch mit der Taktfrequenz heruntergehen.
mfg klaus

: Bearbeitet durch User
von Cyblord -. (cyblord)


Lesenswert?

r_u_d_i schrieb:
> Hi
>
> gibt es eigentlich eine SLAVE - Teilnehmer Begrenzung für
>
> SPI
> I²C

Liegt doch wohl auf der Hand. Bei I2C, kannst du soviele Bausteine 
betreiben wie du Adressen hast. Da I2C max. 127 Adressen kennt, also 
max. 127 Geräte. Praktisch weniger weil du die Adressen nicht komplett 
frei wählen kannst.

SPI, soviele Slaves wie du per CS aktivieren kannst.

von Christian K. (the_kirsch)


Lesenswert?

Genau, bei I2C gibt es eine begrenzte Anzahl an Adressen.


Bei SPI brauchst du für jedes Device eine Selektleitung.
Da kann man trixen, wenn der Controller nicht genügend Pins hat.
Z.B mit einem zusätzlichen 3 zu 8 Encoder Chip kannst du mit 4 Leitungen 
(CS und A0 bis A2) 8 Devices ansteuern. (mit einem 4 zu 16 Encoder 
dementsprechend 16)


Manche Devices unterstützen den Kaskadenmodus (z. B. einfache 
Schieberegister) da gehen alle auf eine gemeinsame Selektleitung 
http://de.wikipedia.org/wiki/Serial_Peripheral_Interface#mediaviewer/File:SPI_three_slaves_daisy_chained.svg

: Bearbeitet durch User
von Mario EDUARDO (Gast)


Lesenswert?

Irgendwann wird wahrscheinlich auch die Leitungslänge und die Belastung 
des Treibers ein Thema werden !

Mario

von r_u_d_i (Gast)


Lesenswert?

hi
Ah Danke!
Bei SPI hab ich mir das so in etwa gedacht zu tricksen mit CS
daher kam dann die Frage auf, ob es dann eine Empfehlung gibt, den Bus 
nicht zu "überlasten". Datenmässig / Strommässig?

Bei I²C gibt es doch diese I²C Insel Bausteine,( weitere Master )  die 
über eine Adresse ansprechbar sind und die dann das an weitere I²C 
Slaves verteilen. Das sind dann denke ich weitere I²C Master?

http://www.mikrocontroller.net/articles/I%C2%B2C

Ich hab bisher noch keine I²C Insel eingesetzt, daher weiss ich nicht,
ob es die Begrenzung aufhebt oder dafür noch extra eine Adresse 
reserviert werden muss.

Welcher Baustein käme in Frage, wenn man einen weiteren Master einsetzen 
will?

Was ist das dann für eine Verbindung von einem Mikrocontroller ( Master 
) zu so einer Insel ( Master ) - Master zu Master?

Und kann er einfach an den I²C zu den Slaves mit angeschlossen werden?

Danke!

lg rudi ;-)

von r_u_d_i (Gast)


Lesenswert?

http://www.mikrocontroller.net/articles/I%C2%B2C

"Dazu übernimmt der Master, der Daten senden oder empfangen möchte, den 
Bus und gibt die (7-bit- bzw. 10-bit-)Adresse des Slaves aus, mit dem er 
kommunizieren möchte. Nach der Adresse teilt der Master dem 
entsprechenden Slave mit, ob er Daten senden oder empfangen möchte. 
Danach werden die eigentlichen Daten (entweder vom Master oder Slave) 
auf den Bus gelegt. Hat der Master den Lese- oder Schreibvorgang 
abgeschlossen, so gibt er den Bus wieder frei. Sofern mehrere Master 
vorhanden sind, stellt ein Protokoll sicher, dass sich diese nicht 
gegenseitig stören."

Sorry muss noch mal nachfragen:

Der zweite Master der Daten senden oder empfangen möchte,
wie kommunizizert er mit dem ersten Master dass er den Bus jetzt 
"belegt" sodass der erste Master weiss, dass er belegt ist, gibt es dazu 
ein besonderes Protokoll bzw ein FLAG zu setzen, damit die Masters das 
wissen.
Denke, dass ein weiterer Mikrocontroller als Master verwendet werden 
kann, wo dann der CODE ja in einem anderen Mikrocontroller abläuft.
Wie verständigen sich die beiden Mikrocontrollers als Master?

Danke!

lg rudi ;-)

von Klaus 2. (klaus2m5)


Lesenswert?

Such mal im Netz nach "I2C bus arbitration". Der Master, der eine 
Adresse mit dem ersten unterschiedlichen Bit = 0 sendet gewinnt. 
Ansonsten Muss der Master Start und Stop beachten. Wenn Start gesendet 
wurde, ist der Bus belegt. Wenn Stop erkannt wird, ist der Bus wieder 
verfügbar für eine erneute Bus Arbitration.

von r_u_d_i (Gast)


Lesenswert?

"If two or more masters try to put information onto the bus, the first 
to produce a ‘one’ when the other produces a ‘zero’ loses the 
arbitration. The clock signals during arbitration are a synchronized 
combination of the clocks generated by the masters using the wired-AND 
connection to the SCL line

(for more detailed information concerning arbitration see Section 
3.1.8).

Generation of clock signals on the I2C-bus is always the responsibility 
of master devices; each master generates its own clock signals when 
transferring data on the bus. Bus clock signals from a master can only 
be altered when they are stretched by a slow slave device holding down 
the clock line or by another master when arbitration occurs."

Seite 7
http://www.nxp.com/documents/user_manual/UM10204.pdf

Oki, verstanden.
nach dem Prinzip, wer als erste kommt.. muss der andere warten..
1
if (clk==1) {
2
try again later
3
}

danke!
lg rudi ;-)

von r_u_d_i (Gast)


Lesenswert?

@klaus:
hat sich jetzt überschnitten ;-)
da waren zwei masters ;-) am schreiben ;-) ;-) ;-)

danke, ich glaub das wars oder?

lg rudi ;-)

von Ahab (Gast)


Lesenswert?

r_u_d_i schrieb:
> Eine sinnvolle Empfehlung?

Da du den Anwendungsfall nicht beschreibst, sag ich mal:

1-Wire.

Mehr Kabellänge als I2C (und erst recht SPI) möglich, keine 
Adressen-Probleme (48 Bit),

ca. 300 Meter und 500 Geräte an einem Bus-Segment (mit aktivem Pull-Up) 
möglich.

Lässt sich mit einfachen Chips an I2C koppeln, wenn man es nicht per 
Bit-Banging selber implementiert.

von Ronny S. (phoenix-0815)


Lesenswert?


von r_u_d_i (Gast)


Lesenswert?

Eine Frage ist noch offen im SPI Mode mit der CS Methode
Empfehlung max Devices
Ich folgere aus dieser Aussage:

"Es können theoretisch beliebig viele Teilnehmer an den Bus 
angeschlossen werden, wobei es jedoch immer genau einen Master geben 
muss, der seinerseits das Clock-Signal an SCK erzeugt. Der Master legt 
mit der Leitung „Slave Select“ fest, mit welchem Slave er kommunizieren 
will. Wird sie gegen Masse gezogen, ist der jeweilige Slave aktiv und 
„lauscht“ an MOSI, so legt er seine Daten im Takt von SCK an MISO. Es 
wird ein Byte vom Master zum Slave und ein anderes Byte vom Slave zum 
Master transportiert.
"

http://de.wikipedia.org/wiki/Serial_Peripheral_Interface

Der Takt geschieht z.B. im SPI Mode mit FOSC/4 bei einer CLOCK von 
48000000 Hz und einem Oszillator von 20000000Hz dann:

20000000 Hz / s geschehen dann 48000000 CLK Signals
dann kämme auf jede FOSC Schwingung
48000000 / 20000000 = 2.4 CLK Signals
bei 4/FOSC dann
2.4 / 4 = 0.6 CLK Signals
die passieren dann 20000000 mal in einer Sekunde?

Was ist ein Takt
Steigende Flanke - Daten - Fallende Flanke
eine ganze Sinus Welle?

Dann wären das
20000000 * 0.6 = 12000000 Takte mit Daten zu je einen Byte?
also dann sind maximal
12000000 Bytes in einer Sekunde möglich muss man die durch zwei teilen
wegen "1Byte hinschicken, kommt 1 Byte zurück"
damit man auf die Nutzdaten kommt?
Also dann
12000000 / 2 = 6000000 Bytes an Nutzdaten je Sekunde
das wäre eine Datenrate von
6000000 / 1000 = 6000kByte?
6000 / 1000 = 6Mbyte?

Ist das so in etwa Ok?
Danke

Lg rudi ;-)

von Christian K. (the_kirsch)


Lesenswert?

r_u_d_i schrieb:
> Was ist ein Takt
> Steigende Flanke - Daten - Fallende Flanke
> eine ganze Sinus Welle?

Eine Rechteck-Signal!

http://de.wikipedia.org/wiki/Serial_Peripheral_Interface#mediaviewer/File:SPI_timing_diagram2.svg


Je nachdem wie der Slave gebaut ist, wird bei einer fallenden Flanke 
oder steigenden Flanke von den Datenleitungen gelesen, beziehungsweise 
geschrieben.

Es gibt vier Modi. Du must dem Master sagen welchen er für welchen Slave 
verwenden soll. Welchen Modus der Slave verwendet steht in seinem 
Datenblatt.

http://de.wikipedia.org/wiki/Serial_Peripheral_Interface#Protokollablauf_und_Einstellm.C3.B6glichkeiten

von r_u_d_i (Gast)


Lesenswert?

Christian K. schrieb:
> r_u_d_i schrieb:
>> Was ist ein Takt
>> Steigende Flanke - Daten - Fallende Flanke
>> eine ganze Sinus Welle?
>
> Eine Rechteck-Signal!

hust .. meinte ich doch ;-)
( rot_anlauf ) wie komm ich auf sinus welle ?!:/_"

>
> Es gibt vier Modi. Du must dem Master sagen welchen er für welchen Slave
> verwenden soll. Welchen Modus der Slave verwendet steht in seinem
> Datenblatt.

Das ist das UR Thema warum die Frage entstand Christian,
nur nachgefragt:
Kann man die Master / Slaves mit verschiedenen Modi's überlagern, und 
die verstehen sich trotzdem .. ich frage deshalb, weil es in einem 
anderen Projekt ( ESP8266 HSPI ) so gemacht wurde, bzw noch nicht ganz 
klar ist, warum das so funktioniert und wie es so funktioniert.. aber 
das ist eine andere Geschichte ( OLED_SPI(SPI), SPI_Flash(HSPI)..)
aber klärt dann einiges auf.

Danke Christian!
lg rudi ;-)

von r_u_d_i (Gast)


Lesenswert?

"Kann man die Master / Slaves mit verschiedenen Modi's überlagern,"

ich meine damit die Überlagerung des SPI Bus mit den verschiedenen 
Modi's der Master / Slaves.

Lg rudi ;-)

von Cyblord -. (cyblord)


Lesenswert?

r_u_d_i schrieb:
> "Kann man die Master / Slaves mit verschiedenen Modi's überlagern,"
>
> ich meine damit die Überlagerung des SPI Bus mit den verschiedenen
> Modi's der Master / Slaves.

Du redest so einen Stuss zusammen, meine Güte.

von r_u_d_i (Gast)


Lesenswert?

Cyblord ---- schrieb:
> r_u_d_i schrieb:
>> "Kann man die Master / Slaves mit verschiedenen Modi's überlagern,"
>>
>> ich meine damit die Überlagerung des SPI Bus mit den verschiedenen
>> Modi's der Master / Slaves.
>
> Du redest so einen Stuss zusammen, meine Güte.

Du wirst damit sicher Recht haben ;-)
ich gehe der Sache auf den Grund, da ist auch sicher viel Unrat dabei,
weil ich keinen Bezug habe und auch keine fundamentalistische 
Ausbildung,
aber ich erreiche damit den Grund. Und dann kann ich darauf aufbauen.

lg rudi ;-)

Stimmt denn annähernd die Behauptung der Nutzdaten?

von Ronny S. (phoenix-0815)


Lesenswert?

Cyblord ---- schrieb:
> r_u_d_i schrieb:
>> "Kann man die Master / Slaves mit verschiedenen Modi's überlagern,"
>>
>> ich meine damit die Überlagerung des SPI Bus mit den verschiedenen
>> Modi's der Master / Slaves.
>

Etwas schlecht Ausgedrückt die Fragestellung Du kannst dem Master sagen 
in welchen Modi er mit welchen Slave sprechen soll im Bus.

Gruß

Hast das PDF schon gelesen von oben ???

: Bearbeitet durch User
von r_u_d_i (Gast)


Lesenswert?

Ronny S. schrieb:
> Cyblord ---- schrieb:
>> r_u_d_i schrieb:
>>> "Kann man die Master / Slaves mit verschiedenen Modi's überlagern,"
>>>
>>> ich meine damit die Überlagerung des SPI Bus mit den verschiedenen
>>> Modi's der Master / Slaves.
>>
>
> Etwas schlecht Ausgedrückt die Fragestellung Du kannst dem Master sagen
> in welchen Modi er mit welchen Slave sprechen soll im Bus.
>


Und ich kann den gleichen Bus dann für verschiedene Moduse verwenden 
oder brauche ich einen weiteren SPI Kanal oder wenn die HW das nicht 
hergibt einen Kanal auf Software SPI ?

Danke!
lg rudi ;-)

von Cyblord -. (cyblord)


Lesenswert?

r_u_d_i schrieb:

> Stimmt denn annähernd die Behauptung der Nutzdaten?

Nutzdaten bei SPI? Da sind alles Nutzdaten, da gibts keine anderen 
Daten. Höchstens du definierst ein Protokoll auf höhere Schicht.

Also kannst du deinen SPI-Takt direkt als Bit/s auffassen und einfach 
durch 8 teilen und hast Byte/s. Was gibts da groß zu rechnen?

Und wenn du dir auch nur 1 Sekunden angeschaut hättest, wie SPI 
funktioniert, und kurz nachdenkst (anstatt immer erstmal zu allem ohne 
Punkt und Komma loszusabbeln) dann wäre dir klar, dass du bei SPI immer 
nur mit einem Slave sprichst (je nachdem welches CS aktiv ist). Also 
kannst du natürlich mit jedem Slave in einem anderen Modi kommunizeren. 
Logsich, wenn die anderen Slaves gar nicht hin hören.

von Ronny S. (phoenix-0815)


Lesenswert?

> Stimmt denn annähernd die Behauptung der Nutzdaten?

Nicht wirklich , steht aber alles im PDF lies es in Ruhe durch.

Schaue Dir auch die weiteren Links dazu an,dann findest eigentlich alles 
was Du suchst.

Gruß

von Ronny S. (phoenix-0815)


Lesenswert?

> Und wenn du dir auch nur 1 Sekunden angeschaut hättest, wie SPI
> funktioniert, und kurz nachdenkst (anstatt immer erstmal zu allem ohne
> Punkt und Komma loszusabbeln) dann wäre dir klar, dass du bei SPI immer
> nur mit einem Slave sprichst (je nachdem welches CS aktiv ist).

>> " (je nachdem welches CS aktiv ist) "

Okay, geht aber auch noch anders.

>> suche mal nach " daisy-chain "


http://www.eeherald.com/section/design-guide/esmod12.html

von Jörg S. (joerg-s)


Lesenswert?

r_u_d_i schrieb:
> Ich hab bisher noch keine I²C Insel eingesetzt, daher weiss ich nicht,
> ob es die Begrenzung aufhebt oder dafür noch extra eine Adresse
> reserviert werden muss.
>
> Welcher Baustein käme in Frage, wenn man einen weiteren Master einsetzen
> will?
Warum willst du einen weiteren Master? Ein I2C-Mux würde es doch auch 
tun. Oder meinst du das mit "weiterer Master"?


Siehe auch:
http://www.nxp.com/documents/brochure/75016529.pdf

von Cyblord -. (cyblord)


Lesenswert?

Ronny S. schrieb:
>> Und wenn du dir auch nur 1 Sekunden angeschaut hättest, wie SPI
>> funktioniert, und kurz nachdenkst (anstatt immer erstmal zu allem ohne
>> Punkt und Komma loszusabbeln) dann wäre dir klar, dass du bei SPI immer
>> nur mit einem Slave sprichst (je nachdem welches CS aktiv ist).
>
>>> " (je nachdem welches CS aktiv ist) "
>
> Okay, geht aber auch noch anders.

Es geht immer auch anders. Damit verlässt du aber den SPI-Standard.

Und rudi erzählt ja auch absolut nichts über die geplante Anwendung.

von r_u_d_i (Gast)


Lesenswert?

Cyblord ---- schrieb:
> r_u_d_i schrieb:
>
>> Stimmt denn annähernd die Behauptung der Nutzdaten?
>
> Nutzdaten bei SPI? Da sind alles Nutzdaten, da gibts keine anderen
> Daten. Höchstens du definierst ein Protokoll auf höhere Schicht.

Ja das wollte ich ja für mich festlegen/ausrechnen, auf welche Datenrate 
ich maximal komme wenn ein Master an einem Slave nonstop senden würde 
"Streaming Video Daten.."
>
> Also kannst du deinen SPI-Takt direkt als Bit/s auffassen


Bit/s ?

pro sekunde?
Das glaube ich dir nicht ;-)

und hier schreiben die Byte!

"Es wird ein Byte vom Master zum Slave und ein anderes Byte vom Slave 
zum Master transportiert."
http://de.wikipedia.org/wiki/Serial_Peripheral_Interface

> und einfach
> durch 8 teilen und hast Byte/s. Was gibts da groß zu rechnen?

jetzt verwirrst du mich, 1 Bit mal 8 = 1 Byte ?
und 1 bit / s..
das glaube ich dir nicht!

>
> Und wenn du dir auch nur 1 Sekunden angeschaut hättest, wie SPI
> funktioniert, und kurz nachdenkst (anstatt immer erstmal zu allem ohne
> Punkt und Komma loszusabbeln) dann wäre dir klar, dass du bei SPI immer
> nur mit einem Slave sprichst (je nachdem welches CS aktiv ist).

ok..

> Also
> kannst du natürlich mit jedem Slave in einem anderen Modi kommunizeren.
> Logsich, wenn die anderen Slaves gar nicht hin hören.

ok - das wollte ich wissen, danke!
also reicht eine SPI Leitung für mehrere verschiedene laufende SPI 
Mode's.

lg rudi ;-)

von Jörg S. (joerg-s)


Lesenswert?

Für I2C Multiplexer und Schalter siehe auch:
http://www.nxp.com/documents/application_note/AN262.pdf

von Christopher B. (chrimbo) Benutzerseite


Lesenswert?

Ja, du kannst einen Slave (z.B. EEPROM) im Modus 1 betreiben und einen 
zweiten (z.B. Display) im Modus zwei.
Du musst nur den Modus im master umschalten, bevor derjenige Slave mit 
seiner CS Leitung angesprochen wird.

von Cyblord -. (cyblord)


Lesenswert?

r_u_d_i schrieb:
>
> jetzt verwirrst du mich, 1 Bit mal 8 = 1 Byte ?
> und 1 bit / s..
> das glaube ich dir nicht!

Ähm ich dachte du weißt was Bits und Bytes sind. Sorry wenn ich das 
vorrausgesetzt habe..... ähm gehts noch?


x Bit/s = x/8 Bytes/s
z.B. 8 Bit/s = 1 Byte/s

SPI-Takt f entspricht direkt Bit/s, weil bei jedem Takt ein Bit 
übertragen wird.
Hast du also 1 MHz SPI-Takt, dann hast du 1.000.000 Bit/s oder 125000 
Byte/s.

Das ist aber alles derart trivial dass ich dein Problem überhaupt nicht 
verstehe. Worum gehts eigentlich?

Und hör mal mit deinem bescheurten "Das glaube ich dir nicht" auf. Was 
soll sowas?

: Bearbeitet durch User
von r_u_d_i (Gast)


Lesenswert?

Jörg S. schrieb:
> r_u_d_i schrieb:
>> Ich hab bisher noch keine I²C Insel eingesetzt, daher weiss ich nicht,
>> ob es die Begrenzung aufhebt oder dafür noch extra eine Adresse
>> reserviert werden muss.
>>
>> Welcher Baustein käme in Frage, wenn man einen weiteren Master einsetzen
>> will?
> Warum willst du einen weiteren Master? Ein I2C-Mux würde es doch auch
> tun. Oder meinst du das mit "weiterer Master"?
>
>
> Siehe auch:
> http://www.nxp.com/documents/brochure/75016529.pdf

Danke Jörg,
ich denke ich denke nicht ausgiebig nach und verlaufe mich..
also sowas brauche ich dann, wenn ich mehr als 8 MCP23S17 einsetzen 
will, oder?
Einen Master brauche ich nicht um mehr als 8 MCP23S17 zu steuern, man 
kann, muss aber nicht.

Ok - ich denke ich habs soweit, es reicht ein Master im System und alle 
anderen sind Slaves, ein weiterer Master käme sinvoll dann mit einem 
weiteren µC, der ins gleiche System eingebunden wird?.

Oder wenn man auf einen ( macht man sowas, ist sowas üblich? ) µC zwei 
Master laufen hat, kann man, muss man..

..ich meine wenn ich schreibe einen zweiten Master damit dann auch einen 
weiteren Bus, weitere PINS und das hat sich in der Fragestellerei bei 
mir jetzt ein wenig durcheinander gerieben und ich den zweiten Master 
dann blödsinniger weise wíeder auf einer Leitung gesehen.
sorry für den stuss.

Ok, Fragestellung konkret:

Verschiedene SPI Modis können gleichzeitig auf den selben Busleitungen 
betrieben werden?

Jeder Master spricht über den richtigen Mode den Slave an und belegt 
damit den SPI Bus bzw spricht den passenden Slave über CS an.
Bei mehreren Mastern auf dem gleichen Bus  haben derweil andere Master 
zu warten und erkennen die Belegung über ?

Ein SPI Mux kommt dann zur Anwendung, wenn der Adressraum für ein 
bestimmtes Device ( MPX23S17 ) erreicht ist, z.B. bei mehr als 8 Devices 
vom selben Type.

Danke!

lg rudi ;-)

von r_u_d_i (Gast)


Lesenswert?

Cyblord ---- schrieb:

> Ähm ich dachte du weißt was Bits und Bytes sind. Sorry wenn ich das
> vorrausgesetzt habe..... ähm gehts noch?

cybloard sorry wenn ich dich jetzt verletzt hab,
aber das stand so unter Byte verständlich in wiki

"...so legt er seine Daten im Takt von SCK an MISO. Es wird ein Byte vom 
Master zum Slave und ein anderes Byte vom Slave zum Master 
transportiert.
"

dann stimmt die Aussage in Wiki so nicht oder?


>
>
> x Bit/s = x/8 Bytes/s
> z.B. 8 Bit/s = 1 Byte/s

die Umrechnung verstehe ich dann, wenn es 1Bit je takt sind, dann 
braucht es acht takte für ein byte..

>
> SPI-Takt f entspricht direkt Bit/s, weil bei jedem Takt ein Bit
> übertragen wird.

oki verstanden.
das steht erst weiter unten im wiki

"Mit jeder Taktperiode wird ein Bit übertragen. Beim üblichen 
Bytetransfer sind also acht Taktperioden für eine vollständige 
Übertragung nötig"

> Hast du also 1 MHz SPI-Takt, dann hast du 1.000.000 Bit/s oder 125000
> Byte/s.

oki.

>
> Das ist aber alles derart trivial dass ich dein Problem überhaupt nicht
> verstehe. Worum gehts eigentlich?

ich wollte der Sache auf den Grund gehen ;-) weil einige Dinge sich 
widersprochen haben.

lg rudi ;-)

von Cyblord -. (cyblord)


Lesenswert?

r_u_d_i schrieb:
> "...so legt er seine Daten im Takt von SCK an MISO. Es wird ein Byte vom
> Master zum Slave und ein anderes Byte vom Slave zum Master
> transportiert.
> "
>
> dann stimmt die Aussage in Wiki so nicht oder?

Klar stimmt die, da steht doch nicht "es wird 1 Byte in einem Takt 
transportiert". Da steht es wird 1 Bytes insgesamt übertragen. Bestehend 
aus 8 Bit in 8 Takten.
SPI wird meist Byte-basiert gesehen. bzw. stellt ein Byte die kleinste 
Informationseinheit dar die in einem Rutsch (CS ohne unterbrechung low) 
übertragen wird. 2 Byte oder mehr sind aber dennoch nicht unüblich.

> ich wollte der Sache auf den Grund gehen ;-) weil einige Dinge sich
> widersprochen haben.

Da widerspricht sich nichts.

von Ronny S. (phoenix-0815)


Lesenswert?

r_u_d_i schrieb:

> Ja das wollte ich ja für mich festlegen/ausrechnen, auf welche Datenrate
> ich maximal komme wenn ein Master an einem Slave nonstop senden würde
> "Streaming Video Daten.."

Hallo Rudi,

Welches Cam Modul mit welchen Parametern möchtest Du dafür nutzen ?

Für das Streaming von Video Daten über SPI, okay der "Master", sollte, 
ist bekannt allerdings wäre jetzt mal der Slave Interessant.

Allerdings solltest das dann ohne den Umweg über den MCP23S17 erstmal 
zum laufen bringen.

Ein paar Interessante Infos dazu findest Du auch noch wenn Du mal nach " 
OpenVideoModem " suchst.

Viel Erfolg.

Gruß Ronny

: Bearbeitet durch User
von robin (Gast)


Lesenswert?

Du wirfst da was durcheinander.

Bei I2c wird jeder slave mit einer Adresse angesprochen. Dafür stehen 7 
Bit zur Verfügung, also bis zu 127 Slaves. Minus ein paar Spezial 
Adressen.
Die m meisten slaves haben einen festen Adressraum, der über drei Pins 
eingestellt werden kann (siehe datenblatt des slaves). Es können also 
ist. 2^3 = 8 Slaves des gleichen Typs im gleichen Bus hängen.
Je nach Slave gibt es auch mehere Versionen die einen anderen Adressraum 
abdecken. So können dann z.b. 8+8=16 Slaves mir der gleichen Funktion an 
einem Bus hängen.
Erweitert werden kann i2c mir einen expander damit lassen sich pro 
expander weitere 127 Adressen ansprechen.
Leitungen braucht man bei i2c immer 2, es sei denn man frägt Interrupt 
Signale von den slaves ab.

Bei SPI wird keine Adresse übertragen. Es wird mittels Cs der Slave 
mitgeteilt, das sie angesprochen wird. Theoretisch sind bei SPI 
unbegrenzt viele Teilnehmer möglich, man benötigt aber pro Teilnehmer 
eine Cs Leitung. Der Pin Bedarf an µC lässt sich zwar durch Multiplexen 
reduzieren, aber dadurch steigt der platzbedarf auf der Platine.
Leitungen braucht SPI 3+n oder mit multiplexer 3+log2(n).

Da es bei dir aber auf hohe Datenraten ankommt bist du mit spi wohl 
besser bedient.
Mehrere Mhz gegen maximal 1MHz.

von r_u_d_i (Gast)


Angehängte Dateien:

Lesenswert?

Ok Ronny, oki Cybloard,
das Byte steht aber auch zweideutig dort in der Wiki
habe einen Kommentar dort gelassen - ich lese das leider so
dass ein Byte übertragen wird. ( bild )
wurde aber wieder gelöscht da anmerkungen in der diskussion nur erlaubt 
sind.

Aber verstanden hab ich das jetzt. oki.


Byte = container für 8 bit ,
ein Byte z.B. char 'A';
wobei für die SPI Übertragung in einem CLK nicht char 'A' übertragen 
wird,
sondern eben der Bitwert von char 'A'

"Beim üblichen Bytetransfer sind also acht Taktperioden für eine 
vollständige Übertragung nötig. Es können auch mehrere Bytes 
hintereinander übertragen werden, wobei in der Spezifikation nicht 
festgelegt ist, ob zwischen jedem Byte das SS-Signal kurz wieder auf 
High gezogen werden muss. Eine Übertragung ist beendet, wenn das 
Slave-Select-Signal endgültig auf High gesetzt wird.
"

Ok -
nervende Abschluss Frage(n):
werden immer 8 bit übertragen?
also wenn ich jetzt 'A'
übertragen will,
Hex 0x41
BIN [0]1000001
werden das 8 bit, oder kann ich auf 7 bit kürzen, oder ist der SPI Bus 
generel als 8 Bit ausgelegt und ich muss 0 1 0 0 0 0 0 1 senden oder 
kann man auch 1 0 0 0 0 0 1 übertragen und es hat dann mit dem Mode 
etwas zu tun. Oder kann ich das in einem eigenen Protokoll so festlegen 
oder der Baustein versteht über Register setzen mehrere Optionen dazu, 
oder besagt der Mode, dass man mehrere Bytes hintereinander senden kann 
ohne jedes mal das SS Signal zu schalten. Oder kann man das generell 
nicht so sagen und es kommt immer auf das Datenblatt an?

Danke!

der nerver ;-)

von Ronny S. (phoenix-0815)


Lesenswert?

Hallo Rudi,

SPI-Modus ist byte-orientiert, d.h. dass jeder Transferzyklus
immer 8 Taktzyklen umfasst, wobei in jedem Taktzyklus 1 Bit übertragen 
wird. Daher muss die Länge
aller Daten oder Befehle, die übertragen werden ein Vielfaches dieser 8 
Taktzyklen sein.

Das höchstwertige Bit dieses Bytes wird als Startbit bezeichnet und hat 
immer den Wert 0. Das
nächste Bit hat immer den Wert 1 und zeigt damit an, dass der Befehl vom 
Host gesendet wurde.
Die restlichen 6 Bit entsprechen der binär codierten Befehlsnummer.

Gruß Ronny

von r_u_d_i (Gast)


Lesenswert?

robin schrieb:
> Du wirfst da was durcheinander.
..
hi robin, ja geb ich zu, hab da einiges durcheinander gebracht,

"Porterweiterung"... über
SPI
I²C

Schnittstellenerweiterung SPI / I²C über
"expander"

aber jetzt ist es soweit einmal klarer..

> einem Bus hängen.
> Erweitert werden kann i2c mir einen expander damit lassen sich pro
> expander weitere 127 Adressen ansprechen.

Welche Expander nimmt man z.B. her
SPI :
I²C :

> Leitungen braucht man bei i2c immer 2, es sei denn man frägt Interrupt
> Signale von den slaves ab.

oki

>
> Bei SPI wird keine Adresse übertragen. Es wird mittels Cs der Slave
> mitgeteilt, das sie angesprochen wird. Theoretisch sind bei SPI
> unbegrenzt viele Teilnehmer möglich, man benötigt aber pro Teilnehmer
> eine Cs Leitung. Der Pin Bedarf an µC lässt sich zwar durch Multiplexen
> reduzieren, aber dadurch steigt der platzbedarf auf der Platine.
> Leitungen braucht SPI 3+n oder mit multiplexer 3+log2(n).

oki, wobei der MCP23S17 über einen Adressraum angesprochen werden kann
opcode (0x40)  + deviceadresse ( A2 A1 A0 )

>
> Da es bei dir aber auf hohe Datenraten ankommt bist du mit spi wohl
> besser bedient.
> Mehrere Mhz gegen maximal 1MHz.

Oki danke!

lg rudi ;-)

von r_u_d_i (Gast)


Lesenswert?

Ronny S. schrieb:
> Hallo Rudi,
>
> SPI-Modus ist byte-orientiert, d.h. dass jeder Transferzyklus
> immer 8 Taktzyklen umfasst, wobei in jedem Taktzyklus 1 Bit übertragen
> wird. Daher muss die Länge
> aller Daten oder Befehle, die übertragen werden ein Vielfaches dieser 8
> Taktzyklen sein.
>
> Das höchstwertige Bit dieses Bytes wird als Startbit bezeichnet und hat
> immer den Wert 0. Das
> nächste Bit hat immer den Wert 1 und zeigt damit an, dass der Befehl vom
> Host gesendet wurde.
> Die restlichen 6 Bit entsprechen der binär codierten Befehlsnummer.
>
> Gruß Ronny

Herzlichen Dank Ronny! Damit kann ich wieder was anfangen!
lg rudi ;-)

von Ronny S. (phoenix-0815)


Lesenswert?

Hallo Rudi,
hier alles noch mal zusammen falls es mal wieder jemand sucht.

>>> Falls jemand Fehler findet bitte Bescheid sagen, Danke.

----------------------------------------------------------------------

>> " Konfiguration der SPI-Schnittstelle "

>> Über das SPI-Control-Register (SPCR).

>> Dieses Register umfasst8 Bit, mit folgender Belegung.

Bit 7: SPI Interrupt Enable (SPIE):
Mit diesem Bit kann einstellt werden, dass ein Interrupt ausgelöst wird, 
sobald die Übertragung eines Bytes abgeschlossen ist. Dies funktioniert 
allerdings nur, wenn die globalen Interrupts nicht abgeschaltet sind.

Bit 6: SPI Enable (SPE):
Nur wenn dieses Bit gesetzt ist, ist die Schnittstelle aktiv.

Bit 5: Data Order (DORD):
Mit diesem Bit kann eingestellt werden, ob zuerst das höchstwertige oder 
das niederwertige Bit übertagen wird.

Bit 4: Master/Slave Select (MSTR):
Über dieses Bit kann eingestellt werden, ob die Schnittstelle am 
Microcontroller als Master oder als Slave betrieben wird.

Bit 3: Clock Polarity (CPOL):
Mit diesem Bit kann eingestellt werden, ob der Takt im inaktiven Zustand 
auf 0 oder auf 1 liegt.

Bit 2: Clock Phase (CPHA):
Dieses Bit dient zum Einstellen, bei welcher Taktflanke die Daten 
übernommen werden. Entweder bei der steigenden oder bei der fallenden.

Bits 1, 0:
SPI Clock Rate Select 1 and 0 (SPR1, SPR0): Mit diesen beiden Bits kann 
die Übertragungsgeschwindigkeit eingestellt werden.

------------------------------------------------------------------------ 
-

>> Der Zustand, in dem sich die Schnittstelle befindet wird hiermit ermittelt.

>> SPI-Status-Register (SPSR)

Auf das Register kann nur lesend zugegrifen werden.Mit Ausnahme des 
letzten Bit !

Bit 7: SPI Interrupt Flag (SPIF):
Dieses Bit wird gesetzt, sobald ein Byte komplett übertragen ist. Es 
wird gelöscht, wenn entweder die zugehörige Interrupt Service Routine 
ausgeführt wird oder wenn nach dem Lesen des SPI Status
Registers, bei gesetztem SPIF-Bit, auf das SPI Data Register (SPDR) 
zugegrifen wird.

Bit 6: Write Collision Bit (WCOL):
Dieses Bit wird gesetzt, wenn während eines Datentransfers schreibend 
auf das SPI Data Register zugegrifen wird.

Die Bits 5 bis 1 :
Reservierte Bits, bei denen immer eine 0 gelesen wird.

Bit 0:
Double SPI Speed Bit (SPI2X): Durch das Setzen dieses Bits kann die 
Übertragungsgeschwindigkeit noch mal verdoppelt werden.

------------------------------------------------------------------------

> SPI-Modus ist byte-orientiert, d.h. dass jeder Transferzyklus
> immer 8 Taktzyklen umfasst, wobei in jedem Taktzyklus 1 Bit übertragen
> wird. Daher muss die Länge
> aller Daten oder Befehle, die übertragen werden ein Vielfaches dieser 8
> Taktzyklen sein.
>
> Das höchstwertige Bit dieses Bytes wird als Startbit bezeichnet und hat
> immer den Wert 0. Das
> nächste Bit hat immer den Wert 1 und zeigt damit an, dass der Befehl vom
> Host gesendet wurde.
> Die restlichen 6 Bit entsprechen der binär codierten Befehlsnummer.
>

-----------------------------------------------------------------------

Gruß Ronny

von eventueller käufer (Gast)


Lesenswert?

Na so schwer ist das ja nun auch nicht mehr er hat doch alle Infos 
bekommen die er braucht

von ;-) (Gast)


Lesenswert?

Heiner schrieb im Beitrag #3965504:
> vielleicht waere es besser, mit etwas einfacherem einzusteigen.
>
> omg,... total ueberfordert
>
> lg Heiner

stimmt - besonders wenn man meint es geht so -
dann widersprechen die profis

eventueller käufer schrieb:
> Na so schwer ist das ja nun auch nicht mehr er hat doch alle Infos
> bekommen die er braucht

nein nicht alle, eine frage blieb offen.
wie das verhalten/abhängigkeit der osc, der clk und der eingestellten 
fosc rate des spi zusammenhängt.
eine einstellung mit fosc/4 sagt mir, frequenz oszillator, die liegt bei
24.000.000 hz, mit welche spi rate ist das jetzt unterwegs und wieviele 
byte daten können jetzt max über spi laufen.

cybloard hat es schön erklärt, allgemein, aber ist das nicht fosc 
abhängig?

;-)

von ;-) (Gast)


Lesenswert?

btw:

das thema beruht auch darauf, da der spi winbond auf dem esp8266 
ausserhalb der norm läuft und wie er definiert ist, gar nicht laufen 
dürfte aber es doch tut..

von r_u_d_i (Gast)


Lesenswert?

@cybloard ..ronny und alle anderen!

hey!!! danke!
hier rockt die bude.
spi läuft wie geschmiert!
auch i²c, das lesen hat sich gelohnt!
i²c gleicher gedankenfehler.
jetzt ist auch der winbond klar
man man man hab ich hier einen stuss da lassen wenn man das jetzt im 
nachhinhein liest.. bitte löschen ;-) ;-) ;-)

ich zahl freiwillig einen kasten alkoholfrei an die moderation

;-)


lg rudi ;-)

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.