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
@ 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
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
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.
Bei mir hats bisher immer funktioniert. Welche Geschwindigkeit über welche Entfernung brauchst du?
die Empfanngsseite ist nicht gepuffert,das schränkt die Geschwindigkeit ein wenn man Slave ist.. sonst ganz brauchbar.
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
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?
>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.
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
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.
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... ;)
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
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.
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
@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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.