SPI Diagramme umsetzten aber wie?

OP #4892158
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.