SPI Diagramme umsetzten aber wie?

OP #4892158
Lesenswert?

Hallo µC-Community,

Ich beschäftige mich im Moment mit dem SPI Bus des ATMega's.

Ich habe im Internet ein günstigen Seriellen SRAM gekauft(~1,8 Euro). 
Dieser nennt sich 23CL512 und ist ein 512 Kbits(müsste 64Kb sein) von 
Microchip. Und lässt sich im SPI Modus betrieben. So ein Teil kann man 
ja immer mal bei größeren Sachen gebrauchten.

Okay zur Frage, ich habe mir das Datenblatt angeschaut. Im Datenblatt 
sind dann immer diese SPI "Diagramme" also in welcher reinfolge man die 
Daten zum Chip senden muss.

Ich habe die Befehles Liste und das Write Sequence angehängt.

Was man ja als erstes macht ist die CS Leitung auf LOW zu setzten. 
Danach sendet man über MISO(SPDR = ...;) die Daten. Als erstes wird der 
Befehl gesendet Da ich ja schreiben will, habe ich oben in die Tabelle 
bei "WRITE" geschaut. Dort steht da bei Write der Hex Code 0x02. Diesen 
Sende ich dann zu erst. Ist ja im "Diagramm" auch schon bei 
"Instruction" geschreiben nur in Binär.

Danach folgt eine 16 Bit Adresse. Ich gehe davon dann mal aus das man 
dort ein uint16_t verwenden kann. Jedoch sehe ich öfters SPDR = 
((address >> 16) & 0xFF) und danach dann nochmal nur anstatt mit >> 16 
mit 8. Aber was genau bedeutet das?

Nach der Adresse folgt das Datenbyte da würde ich ein uint8_t senden.

Danach legt man CS wieder auf HIGH.

Kann mir einer erklären, wie man diese ich nenne sie mal Diagramme 
ausließt?

MfG Jan Niehes.
Angehängte Dateien:
Persönliche Seite #4892166
Lesenswert?

Jan N. schrieb:
> Danach folgt eine 16 Bit Adresse. Ich gehe davon dann mal aus das man
> dort ein uint16_t verwenden kann. Jedoch sehe ich öfters SPDR =
> ((address >> 16) & 0xFF) und danach dann nochmal nur anstatt mit >> 16
> mit 8.

Die SPI-Hardware Deines µCs müsste 16-Bit-Zugriffe unterstützen, damit 
hier ein uint16_t verwendet werden könnte. Da sie es aber nicht tun 
wird, muss der 16-Bit-Wert in zwei 8-Bit-Werte zerlegt und diese 
nacheinander gesendet werden.
OP #4892190
Lesenswert?

Rufus Τ. F. schrieb:
> Die SPI-Hardware Deines µCs müsste 16-Bit-Zugriffe unterstützen, damit
> hier ein uint16_t verwendet werden könnte. Da sie es aber nicht tun
> wird, muss der 16-Bit-Wert in zwei 8-Bit-Werte zerlegt und diese
> nacheinander gesendet werden.

Hallo Rufus.

Danke für deine Antwort.

Meines Wissens sind die >> Operatoren Bitweiser.

Wenn ich zum Beispiel die Adresse 20 nehme ist das ja in Binär 10100. 
Also würde da stehen
SPDR = ((10100 >> 16) & 0xFF)

10100 >> 16 heißt dann ja das das um 16 mal nach rechtes geschoben wird.

Aber warum kommt dort dann nochmal 0xFF also 8 Bit(255) drin vor?

MfG Jan Niehes
#4892200
Lesenswert?

Mahlzeit,
ich habe vor ein paar Monaten mit diesem EEPROM rumgeforscht.
Du kannst gern meinen Primitiv-Code weiterverwenden, um zu lernen.
Musst du allerdings die SPI-Belegung für den mega32 in spi_basic.h 
anpassen und den von dir verwendeten Port, um NSS vom EEPROM zu steuern 
in
spi25x512.c
Ansonsten sollte das out of the box rennen.
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren