www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SPI bus frage


Autor: mbuchman (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich bin gerade debei ein System mit SPI Bus aufzubauen, und bin auf 
einige Probleme gestoßen, bei denen ich mir nicht sicher bin:



1. wenn ich den spi bus mit einer bestimmten datenrate betreibe z.B.: 5 
MHz, und ich schreibe ein byte in das SPI datenregister SPDR wird dieses 
unmittelbar nach dem schreiben übermittelt.
nun meine Frage: ich möchte x byte in folge übertragen, d.h. es sollte 
kein delay zwischen den einzelnen bytes am bus geben. Ist das möglich? 
oder ist mein controller (atmega325, 10mhz) dafür einfach zu langsam?

danke!

Autor: ecslowhand (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da der SPI-Bus ja nun mal über eine Clockleitung verfügt, ist ein Delay 
zwischen den Bytes doch unerheblich.
Wenn die Daten aus einem Buffer kommen, würde ich mich des SPIF-Flags 
bedienen und das ganze per Interruppt laufen lassen.

LG EC

Autor: mbuchman (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke für deinen tip!
das problem ist, das die clockleitung zwischenzeitlich unterbrochen wird 
(aufgrund einer rf schnittstelle), und auf der empfängerseite 
automatisch wieder synchronisiert wird).

der clock auf der empfangsseite läuft automatisch weiter.

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Empfängerseite find ich interessanter. Woher weiss der, dass neue 
Daten anstehen? Da der Takt durchläuft, muss er permanent die SPI auf 
neue Daten überwachen. Da macht der mit Sicherheit nichts anderes mehr 
als nur dies, für andere Jobs bleibt keine Zeit.

Autor: mbuchman (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
auf der empfängerseite kann der rf ic diese funktion übernehmen - sobald 
eine gewisse preamble sequenz detektiert wird, wird ein interrupt beim 
controller ausgelöst welcher dan sein spi interface aktiviert.
das problem ist aber  - sobald der controller sein spi aktiviert hat und 
daten liest, läuft der takt weiter - auch wenn der sender durch das 
neuschreiben des spi databytes eine verzögerung auf der datenleitung 
verursacht. gibts hierfür eine lösung?

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Normales AVR-SPI ist nicht gepuffert, damit dürfte es in dieser 
Geschwindigkeitsklasse keine Lösung geben. Das USART-SPI neuerer AVR ist 
gepuffert, da könnte man mal per Oszi nachmessen, ob bei hinreichend 
schneller Beschickung kontinuierlicher Sendebetrieb stattfindet.

Controller mit höher entwickelten synchronen seriellen Schnittstellen 
(z.B. SSP/SSC bei diversen ARM7-Reihen, u.U. mit DMA) sind da klar im 
Vorteil.

Autor: mbuchman (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
aber von den "alten" avr 8bit ris shcafft das keiner?

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der SPI-Transmitter ist ungepuffert, d.h. es bleibt bestenfalls ein 
Bruchteil der Zeit eines einzigen übertragenen Bits, um das 
Senderegister rechtzeitig wieder zu füllen. Sofern es überhaupt 
prinzipiell geht (m.E. unwahrscheinlich).

Autor: mbuchman (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also im fall der datenübertragung ist der controller NUR damit 
beschäftigt.

Autor: Ralph (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Das gibt ja schon fast Schmerzen, was hier so alles steht.


Also bei SPI ist einer der Master, der andere Slave.

Master gibt den Takt aus, Slave empfängt.

(*)
Die Daten werden auf BEIDEN controllern ins SCHIEBEREGISTER geschrieben.

Dann taktet der Master exakt soviele Takte auf der Clockleitung wie Bits 
vorhanden sind.
Das heißt: beide Controller müssen die GLEICHE Einstellung der 
Datenlänge haben.
Normalerweiße üblich ist Datenlänge 8 Bit oder 16 Bit, je nach 
Schieberegister größe. Theoretisch ist aber jede länge von 1 Bit bis 
größe des Schieberegisters möglich.

Nach der entsprechenden Anzahl der Takte wird ein Receive Data Flag im 
Controller gesetzt. Diese Flag kann IRQ auslösen oder gepollt werden.

Danach werden die Daten auf BEIDEN Controller aus dem SCHIEBEREGISTER 
ausgelesen.
Sollen weitere Übertragungen erfolgen siehe (*)


Deine Aufgabe ist es dafür zu sorgen das beide Controller bereit sind 
bevor der Master den Takt anlegt. Wenn der Master mit dem Takten anfängt 
bevor der Slave seine Daten in das Schieberegister gelegt hat, sind die 
im Master empfangene Daten MÜLL.

Den Unterschied zwischen Pollen und IRQ in Punkto Systemauslastung muss 
woh nicht mehr erklärt werden, oder ?

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Orginalprobem kurz Zusammengefasst:
Du willst eine unidirektionale SPI-Verbindung statt über drei 
Verbindungen (CS, Data, Clock) nur über eine laufen lassen.
Mit Taktrückgewinnung beim Slave und 5MHz.

Geht meiner Meinung nach nicht mit nem 10MHz AVR.
Nimm besser den UART, der ist mit seinen Start-Bits eher dafür geeignet, 
erreicht aber mit UBRR=0 und U2X=1 nur so knapp über 1Mbps...

/Ernst

Autor: mbuchmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also zu geschwindigkeit: der rf chip schafft sowieso nur max. 384 kbit 
(die 5mhz waren nur ein "dummes" beispiel) mit uart hab ich bereits 
verschiedene tests gemacht - aber das problem ist - ohne 
synchronisierung durch einen takt ist es ab ca 150kbit/s nicht mehr 
möglich die daten sauber zu dekodieren (zumindest nicht uart)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.