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
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.