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.
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.
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.
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.