www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Atmel SPI = Müll?


Autor: AtmelSPI (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo.

Ich habe in einem Thread gelesen, dass das SPI Interface von Atmel 
nichts taugt...
(Beitrag "Suche ADC und DAC mit bestimmten Eigenschaften")

Kann das jemand bestätigen und vielleicht auch erklären warum bzw. unter 
welchen Vorraussetzungen es nichts taugt? Was muss man beachten auch im 
Bezug auf Bausteine, die man damit ansprechen will.

Reicht es vielleicht für Anwendungen, die keine extreme Performance 
brauchen?

grüße

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  AtmelSPI (Gast)

>Ich habe in einem Thread gelesen, dass das SPI Interface von Atmel
>nichts taugt...

Das ist schlicht Unsinn. Als Master geht es hervorragend. Als Slave hat 
es Einschränkungen, aber mit denen kann man sich arrangieren.

>Reicht es vielleicht für Anwendungen, die keine extreme Performance
>brauchen?

Nenn man ein paar ZAHLEN!!!!
Siehe Netiquette

MfG
Falk

Autor: Walter Tarpan (nicolas)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann ich nicht bestätigen. Vor allem, was am Hardware-SPI schlechter 
sein soll als manuelles Pingewackel ist mir, ehrlich gesagt ein Rätsel, 
da beides die gleichen Treiberstufen sind.

Viele Grüße
Nicolas

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist natürlich ziemlicher Quatsch. Allerdings ist das SPI-Interface 
der AVRs auf 8-Bit-Transfers ausgelegt, alles andere wird schwierig. Es 
aber deswegen als "Müll" zu bezeichen, zeugt von überragender 
Professionalität und Ahnung.

Autor: Dirac Impuls (dirac-impuls)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei mir hats bisher immer funktioniert. Welche Geschwindigkeit über 
welche Entfernung brauchst du?

Autor: name (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die Empfanngsseite ist nicht gepuffert,das schränkt die Geschwindigkeit 
ein wenn man Slave ist.. sonst ganz brauchbar.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>die Empfanngsseite ist nicht gepuffert,das schränkt die Geschwindigkeit
>ein wenn man Slave ist.. sonst ganz brauchbar.

Bei USART im SPI-Mode schon.

MfG Spess

Autor: AtmelSPI (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Antworten beruhigen mich :P

Ich muss wie in dem Beitrag 16bit AD und DA Wandler ansteuern. 
Geschwindigkeit egal heißt, meintwegen kann einmal 16bit senden 1 
Sekunde dauern. Der Atmel Chip wird dann Master und die Wandler Slaves.

Wie sehen eigentlich die Frames/Datenpakete von SPI aus? Habe da noch 
nichts gesehn...wie würde das Empfangen eines 16bit Datenpakets von 
einem AD Wandler mit SPI  beim Atmega aussehen? (Ich meine jetzt nicht 
dem Assembler Code, sondern den Bitstrom) Macht SPI einen Datenstrom aus 
beliebig vielen Bits zwischen nem Start und nem Stop Bit oder sind es 
immer feste Datenwortgrößen? z.b. wie bei USART da gibts ja glaub ich 
7,8 und 9 Bit Datenworte zwischen Start und Stop Bit und Parity Bit, wie 
ist es bei SPI?

Autor: bensch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Wie sehen eigentlich die Frames/Datenpakete von SPI aus?

Vielleicht wäre es ratsam, mal in die Datenblätter zu schauen, da steht 
alles drin.

Autor: Frank K. (fchk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn es richtiges SPI ist, so wie es sich Motorola ausgedacht hat, dann 
funktioniert das auch stabil.

Manche Leute haben aber etwas seltsame Vorstellungen von SPI. Z.B. TI, 
die mir bei einem TRF7960 RFID Reader-Chip einen Bug als Feature 
verkaufen wollten. Da wurde nämlich zwischen dem Senden des Befehls und 
dem Auslesen der Daten eben mal die Phase gedreht, d.h. Senden des 
Befehls mit der steigenden Flanke des Clocks, die Antworten kamen dann 
mit der fallenden Flanke, und beim Umschalten bruachte es dann noch 
einen halben Takt.(*) Das konnte ich nachher nur noch per Software-"SPI" 
realisieren, weil mir die SPI-Einheit des AVR beim Umschalten der Phase 
mittendrin immer stehen geblieben ist.

Wie gesagt, wenn es RICHTIGES SPI ohne solche Mätzchen ist, dann geht 
das auch. Und alles andere ist kein SPI(Trademark of Freescale Inc.).

fchk

(*) so, oder so ähnlich, ich müßte jetzt nochmal das Datenblatt 
rauskramen, aber dann würde ich mich wieder ärgern

Autor: Malte __ (malte) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also SPI als Master eines Atmega128 funktioniert problemlos.
Es gibt allenfalls ein paar Sachen, die mich stören:

Beim Senden fehlt IMHO ein weiteres Buffer Byte. Insbesondere wenn man 
schnell sendet und Interrupts verwendet, reduziert das etwas die 
Geschwindigkeit. Die Zeit Interrupt Aufruf -> Neue Daten ermittelt kann 
leider nicht richtig für den Bus benutzt werden. Bei 8Mhz Bus 
Geschwindigkeit kann alle 16 AVR Takte ein Byte gesendet werden, da eine 
sinnvolle Interrupt Routine hin zu bekommen, die nicht länger braucht 
als das Senden selber, ist kaum möglich.

Da es nur ein "fertig" und "Kollision" Bit gibt, muss man sich merken ob 
SPI gerade in Benutzung oder frei ist. Ein "Busy Bit" hätte ich schön 
gefunden.

Autor: Gastino G. (gastino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rufus t. Firefly schrieb:
> Das ist natürlich ziemlicher Quatsch. Allerdings ist das SPI-Interface
> der AVRs auf 8-Bit-Transfers ausgelegt, alles andere wird schwierig.

Als schwierig würde ich das nicht bezeichnen. Da man sie Select-Leitung 
selber steuert, ist das sogar sehr einfach (Beispiel für 2 Bytes):

1. Chip Select auf 0
2. Byte 1 senden und auf SPIF warten, evtl. SPDR auslesen
3. Byte 2 senden und auf SPIF warten, evtl. SPDR auslesen
4. Chip Select auf 1

Dabei generiert der ATmega die SPI-Clock automatisch, solange Daten 
verschickt werden und hält die an, wenn ein Byte verschickt wurde. Dann 
kann man bequem das nächste Byte "nachladen" und abschießen... ;)

Autor: Düsentrieb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also zum SPI ein nettes beispiel:
ich hab so ein audio-usb-interface hier, das kann immerhin duplex in+out 
: 96khz / 24 bit /stereo , das sind rund 5 Mbit in jede richtung
und das macht ein (!) ATmega162

Autor: micro1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich kann nur sagen das das PI von Atmel sehr gut ist. Besonders beim 
AVR32.
Ich habe schon mit SPI bei TI,Infineon gearbeitet.
Bei Infineon ist es sehr seltsam und meines erachtens sehr schlecht 
implementiert. Aber bei Atmel egal ob AVR oder AVR32 eigentlich OK.
Bei AVR32 sehr sehr gut.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, das SPI der AVRs ist doch schon sehr armselig.

Es hat keinen Sendepuffer und daher ist es quasi unmöglich einen 
SPI-Slave zu implementieren.
Hat der Master ein Byte gelesen, dann hat der Slave-AVR nur einen halben 
Bittakt Zeit, das nächste Byte in das Schieberegister zu schreiben. Also 
ein Ding der Unmöglichkeit.

Der Master muß entweder nach jedem Byte noch lange Wartezeiten einfügen 
oder es müssen noch zusätzliche Leitungen fürs Handshake benutzt werden.

Ich habe daher auch noch nie nen AVR als Slave benutzt, da es entweder 
zu unzuverlässig oder zu aufwendig wäre.

Ein wirklich gutes SPI sollte per DMA eine vorgegebene Anzahl Bytes im 
SRAM senden/empfangen und auch die /CS-Signale automatisch erzeugen.


Peter

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Peter Dannegger (peda)

>Naja, das SPI der AVRs ist doch schon sehr armselig.

Naj, wir wollen mal die Kirche im Dorf lassen. Als Master bekommt er 7 
von 10 Punkten, als Slave 5.

>Es hat keinen Sendepuffer und daher ist es quasi unmöglich einen
>SPI-Slave zu implementieren.

Wuozu auch? der AVR ist der Master of the microcontroller universe, da 
braucht es keinen Slave Modus ;-)

>Ein wirklich gutes SPI sollte per DMA eine vorgegebene Anzahl Bytes im
>SRAM senden/empfangen und auch die /CS-Signale automatisch erzeugen.

Als Master kann man CS locker in Software machen, der Aufwand ist 
akzeptabel. Dass man den Slave Mode besser machen kann ist wohl 
ausserFrage.

MfG
Falk

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falk Brunner schrieb:
> Naj, wir wollen mal die Kirche im Dorf lassen. Als Master bekommt er 7
> von 10 Punkten, als Slave 5.

Meine Wertung:
Master: 4
Slave: 0 (unbrauchbar)
UART als SPI-Master: 7


> Wuozu auch? der AVR ist der Master of the microcontroller universe, da
> braucht es keinen Slave Modus ;-)

Da fänden sich schon viele Anwendungen.
Z.B. hätte ich gerne die teuren MAX3100 ersetzen wollen.


Peter

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.