Ich habe mich in den letzten Stunden etwas reingelesen in diese interessante Materie.
Grundsätzlich muss man ersteinmal festlegen, in welcher Bertriebsart der Master und der Slave arbeiten soll.
Ich denke, für die meisten Anwendungsfälle (1Master 1Slave) genügt es wenn man ohne Chip-Selct arbeitet.
SS-PIN beim Master und beim Slave.
MASTER:
Wird als Ausgang konfiguriert.
Wird LOW, wenn Master was senden möchte.
SLAVE:
SS ist als Eingang definiert.
Slave bleibt so lange inaktiv, bis SS low wird
Diese Betriebsart wird im
"SPI Control Register – SPCR" festgelegt.
Bei der Grund -Initialisierung des Masters und des Slaves sind / können o.g. Einstellungen vorzunehmen. s.Datenblatt:
SPI_MasterInit:
; Set MOSI and SCK output, all others input
ldi r17,(1<<DD_MOSI)|(1<<DD_SCK)
out DDR_SPI,r17
; Enable SPI, Master, set clock rate fck/16
ldi r17,(1<<SPE)|(1<<MSTR)|(1<<SPR0)
out SPCR,r17
ret
SPI_SlaveInit:
; Set MISO output, all others input
ldi r17,(1<<DD_MISO)
out DDR_SPI,r17
; Enable SPI
ldi r17,(1<<SPE)
out SPCR,r17
ret
Überprüfe mal bitte Dein Programmcode, ob die Initialisierung genauso vorgenommen wurde? Ob die gleichen Bits in dem Register SPCR gesetzt wurden sind?
Wenn ich alles jetzt richtig vertstanden habe, dann kein ein Master immer Daten senden !!!, auch wenn kein Slave vorhanden ist, d.h. werden pausenlos Daten vom Master gesendet, dann hat man immer Pegeländerungen an: SCK MOSI und SS oder?
>Grundsätzlich wird der Slave immer mit auf Low-gehaltener /SS Leitung >aktiviert.
Ja das sehe ich auch so, dass der Slave immer mit einem LOW an SS aktiviert wird.
Ich habe etwas im Internet dazu gefunden, ich stell es Dir / Euch mal zur Verfügung.
Ich werde mir als nächstes einen MASTER programmieren,
Lesezeichen