Forum: Mikrocontroller und Digitale Elektronik SPI-Schnittstelle


von Ralf Hochhausen (Gast)


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

von crazy horse (Gast)


Lesenswert?

geht nicht. Maxim hat allerdings eine UART im Programm, die kommuniziert 
über SPI mit dem MC.

von Frankl (Gast)


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

von crazy horse (Gast)


Lesenswert?

und was hat das bitte mit der asynchronen (Rs232) zu tun? Rein gar 
nichts. Es ging um die Frage, ob man mit der (Hardware)SPI auch eine 
asynchrone Verbindung hinbekommt, zumindest verstehe ich die Frage so. 
Und das geht nicht.

von Ralf Hochhausen (Gast)


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

von Frankl (Gast)


Lesenswert?

Wer richtig lesen kann ist klar im Vorteil

von mikki merten (Gast)


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.

von Ralf Hochhausen (Gast)


Lesenswert?

@ mikki: Kannst Du mir das noch etwas genauer erklären. Der Halbduplex 
Betrieb und die einstellbaren Baudraten wären kein Problem (sind fix mit 
9600 Baud vorgegeben). Es geht sich nur um eine Realisierung, die 
möglichst wenig CPU-Leistung kostet und ich habe die SPI noch frei.

von mikki merten (Gast)


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.

von crazy horse (Gast)


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)

von Ralf Hochhausen (Gast)


Lesenswert?

Alles klar,

bleibe dann wohl bei meiner Software-Lösung, dachte so könnte ich mir 
etwas Leistung sparen.

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.