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


von AtmelSPI (Gast)


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

von Falk B. (falk)


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

von Walter T. (nicolas)


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

von Rufus Τ. F. (rufus) Benutzerseite


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.

von Dirac I. (dirac-impuls)


Lesenswert?

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

von name (Gast)


Lesenswert?

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

von spess53 (Gast)


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

von AtmelSPI (Gast)


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?

von bensch (Gast)


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.

von Frank K. (fchk)


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

von Malte _. (malte) Benutzerseite


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.

von Gastino G. (gastino)


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... ;)

von Düsentrieb (Gast)


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

von micro1 (Gast)


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.

von Peter D. (peda)


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

von Falk B. (falk)


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

von Peter D. (peda)


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

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.