Forum: Mikrocontroller und Digitale Elektronik Vergleich HW-SW SPI


von Highii H. (highii)


Lesenswert?

Hallo,

mich interessiert, in wiefern HW und SW SPI sich von der 
Übertragungsgeschwindigkeit unterscheiden (bei Xmega).

Nach meinem Verständnis wird bei SW SPI einfach die zu schreibenden 
Bytes über ein Port (MOSI) über high und low übertagen, z.B.:
PORTC.OUT = 1; PORTC.OUT = 0;

Bei HW SPI werden die Daten (je 1Byte) in das Daten-Register 
geschrieben, z.B.:
SPIC.DATA = Byte;

Da müssen aber auch für jedes einzelne Bit ein High bzw. Low geschickt 
werden, richtig!?

Kann man sagen um wieviel HW schneller ist? Bzw. ist es überhaupt 
schneller?

Gruß
highii

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Highii H. schrieb:
> Da müssen aber auch für jedes einzelne Bit ein High bzw. Low geschickt
> werden, richtig!?

Schon, aber das macht die Hardware für jedes Bit in Deinem Byte. Der 
Takt ist hier fest vorgegeben, und nicht abhängig von der 
Ausführungsgeschwindigkeit des Programmes. Hardware-SPI kann daher 
deutlich schneller werden als Software-SPI.

von Toni Tester (Gast)


Lesenswert?

Highii H. schrieb:
> Nach meinem Verständnis wird bei SW SPI einfach die zu schreibenden
> Bytes über ein Port (MOSI) über high und low übertagen, z.B.:
> PORTC.OUT = 1; PORTC.OUT = 0;

Ja - wie der Name "SW SPI" schon sagt, handelt es sich um eine Emulation 
einer SPI-Schnittstelle in Software.

> Bei HW SPI werden die Daten (je 1Byte) in das Daten-Register
> geschrieben, z.B.:
> SPIC.DATA = Byte;

Ja.

> Da müssen aber auch für jedes einzelne Bit ein High bzw. Low geschickt
> werden, richtig!?

Ja. Aber: Wie der Name "HW SPI" schon sagt, erledigt das ein dedizierter 
Hardwareblock auf dem Chip für dich. Vorteil ist u. a., dass du dich 
(bzw. deine Software) nicht unnötig mit Pinwackeln aufhalten musst, 
sondern die Zeit anderweitig sinnvoll verbringen kannst.

> Kann man sagen um wieviel HW schneller ist? Bzw. ist es überhaupt
> schneller?

Logisch: Für SW benötigst du einige Taktzyklen pro Bit, nämlich eine, um 
den Takt-Pin auf Low zu setzen, eine, um den Takt-Pin wieder auf High zu 
setzen, und mehrere, um das nächste Bit auf dem Datenpin auszugeben.
Die Taktfrequenz der HW-SPI war bei den alten ATmegas glaubeich auf 
fCPU/2 begrenzt, d. h. müsste schneller sein. Bin aber gerade zu faul, 
ins Datenblatt zu schauen und dir den tatsächlichen Wert auf dem Tablett 
zu servieren; das darfst du ruhig selber machen.

von Stefan F. (Gast)


Lesenswert?

Hardware SPI ist auf jeden Fall schneller. Denn für Soft-SPI müsste man 
ja pro Bit das tun:

- Byte schieben
- Bit ausgeben (high oder low)
- Takt auf High
- Takt auf Low

Also braucht man pro Bit mindestens 4 Takte (eher mehr). Bei AVR 
Mikrocontroller braucht die Hardware SPI aber nur 2 Takte pro bit.

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.