SPI-Schnittstelle

Gast #17727
Lesenswert?

Hallo zusammen!

Hätte mal ne Frage zur SPI-Schnittstelle und zwar hat schonmal jemand 
davon gehört ob man mit dieser Schnittstelle eine asynchrone 
Schnittstelle, zwecks kommunikation mit dem PC, nachbilden kann? Hab' 
ich mal so gehört das das ginge, kann mir jedoch nicht vorstellen wie 
das gehen soll, da man bei der SPI doch aufgrund der synchronen 
Übertragung einen Takt braucht. Das ganze müsste ohne großen 
Hardwareaufwand zu bewerkstelligen sein (falls es überhaupt geht).

Danke schonmal!!!

Gruß,

Ralf
Gast #17729
Lesenswert?

AVR320: Software SPI Master (5 pages, updated 5/02)
The Synchronous Peripheral Interface (SPI) is gaining rapidly in 
popularity, allowing faster communication than I2C. For the smaller AVR 
Microcontrollers, which do not have hardware SPI, this Application Note 
describes a set of low-level routines for software implementation. These 
can be used as the basis for communicating with Atmel's 25xxx family of 
Serial EEPROM memories, as well as a host for other peripheral ICs such 
as display drivers. See Software section to download avr320.asm.

Gefunden in www.atmel.com
Gast #17731
Lesenswert?

Hallo,

ja genau, es geht um die nutzung der Hardware SPI als asynchrone 
Schnittstelle. Das Problem ist nur, es darf nichts kosten und nicht zu 
groß sein (wie immer). Hatte auch schon gedacht, dass es nicht geht. 
Aber irgentwelche Tricks gibt's ja immer (außer hier wahrscheinlich). 
Werde also um die Software UART nicht herum kommen.

Danke für die schnellen Antworten!!!

Ralf
Gast #17733
Lesenswert?

Die SPI als direkten UART Ersatz zu benutzen funktioniert mit Sicherheit 
nicht. Es ist jedoch möglich, die Schieberegister der SPI in einem 
Halbduplex für das Datenbyte zu missbrauchen. Ob diese Lösung allerdings 
Vorteile gegenüber einem reinen Software-UART bringt mag dahingestellt 
sein, mal ganz abgesehen von den stark eingeschränkten Möglichkeit in 
Bezug auf einstellbare Baudraten.
Gast #17735
Lesenswert?

@ralf
Die Baudrate 9600 ist zwar realisierbar, aber der CPU-Takt muss dann 
z.B. beim AVR 9600*128 = 1,2288 MHz betragen. Im Sendebetrieb muss das 
Startbit nach wie vor per Software generiert werden. Für die Übertagung 
der 8 Datenbit wird nun das SPI Schieberegister genutzt, indem man das 
zu sendende Byte in das SPI Data-Register schreibt. Vorherige 
Initialiserung der SPI nicht vergessen. Die Stop-Bits müssen dann wieder 
auschliesslich per Software erzeugt werden. Beim Empfänger ist die 
Nutzung noch etwas komplizierter, da hier auch an die Generierung des 
SPI Clocksignals berücksichtigt werden muss. Also in der Summe ein 
erheblicher Aufwand an Code für recht geringe Vorteile.
Gast #17736
Lesenswert?

Deine Quarzfrequenz dürfte dann nur 1,2288 MHz (9600*128) betragen. Dann 
doch lieber volle Power und die Sache per Software erledigt, oder? 
Weitere Probleme tauchen beim Startbit auf, der SPI-Empfang muß nach ca. 
156µs nach Startflanke beginnen, beim Senden muß das Startbit/Stopbit 
auch per Software erzeugt werden. Wird gerade gesendet, geht ein evtl. 
ankommendes Byte den Bach runter. Da ist alles nix, und wenn du noch 
einen Timer frei hast, bleibt auch die CPU-Zeitbelastung in Grenzen. 
26µs Timerinterupt (baud/4), geschickte ISR-Programmierung, dann merkst 
du nicht allzuviel davon. Evtl. ist es ja auch möglich, die vorhandene 
UART zu multiplexen (falls nicht zeitgleicher Betrieb auf 2 Kanälen 
erforderlich ist)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren