Vergleich HW-SW SPI

OP #4273426
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
Persönliche Seite #4273429
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.
Gast #4273440
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.
Gast #4273494
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.