Forum: Mikrocontroller und Digitale Elektronik SPI Diagramme umsetzten aber wie?


von Jan N. (jan_n497)


Angehängte Dateien:

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.

von Rufus Τ. F. (rufus) Benutzerseite


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.

von Jan N. (jan_n497)


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

von Rainer B. (katastrophenheinz)


Angehängte Dateien:

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.

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.