Hi gibt es eigentlich eine SLAVE - Teilnehmer Begrenzung für SPI I²C Eine sinnvolle Empfehlung? SPI I²C Danke! lg rudi ;-)
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
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.
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
Irgendwann wird wahrscheinlich auch die Leitungslänge und die Belastung des Treibers ein Thema werden ! Mario
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 ;-)
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 ;-)
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.
"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 ;-)
@klaus: hat sich jetzt überschnitten ;-) da waren zwei masters ;-) am schreiben ;-) ;-) ;-) danke, ich glaub das wars oder? lg rudi ;-)
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.
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 ;-)
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
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 ;-)
"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 ;-)
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.
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?
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
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 ;-)
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.
> 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ß
> 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
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
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.
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 ;-)
Für I2C Multiplexer und Schalter siehe auch: http://www.nxp.com/documents/application_note/AN262.pdf
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.
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
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 ;-)
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 ;-)
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.
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
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.
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 ;-)
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
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 ;-)
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 ;-)
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
Na so schwer ist das ja nun auch nicht mehr er hat doch alle Infos bekommen die er braucht
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? ;-)
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..
@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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.