Speicherplatzadressierung SPI EEPROM

Gast #2629991
Lesenswert?

Hallo,
ich habe eine Verständnisfrage zur Adressierung der Speicherplätze in 
einem SPI EEPROM an einem Atmega 8. Ich nutze ein 4K 25LC040 EEPROM von 
Mikrochip mit 512 x 8-bit organization und 16 byte page.
Die Adresse besteht aus 16 Bit und wird mit einem MSB und LSB gesendet.
Im Datasheet steht "A page address begins with XXXX 0000 and ends with 
XXXX
1111." Das ist also Platz für 16 Byte.
Wo kann ich nun aber die Nummer der page angeben? Das EEPROM müsste ja 
32 pages haben. Wie sieht meine Adresse aus als MSB und LSB, wenn ich 
zum Beispiel auf page 5 Byte 10 lesen möchte? Oder verstehe ich die 
Adressierung komplett falsch?
Ich möchte kein page writing machen sondern byte write.
Danke für alle Tipps!
Viele Grüße
Thomas
Gast #2630111
Lesenswert?

Thomas schrieb:
> Im Datasheet steht "A page address begins with XXXX 0000 and ends with
> XXXX 1111." Das ist also Platz für 16 Byte.
> Wo kann ich nun aber die Nummer der page angeben?

Die gibt man an Stelle der XXXX an, steht doch klar im Datenblatt.
Das 5. Bit der Page Adresse ist im "Instruction Byte" (A8) codiert.

Der Unterschied zwischen Byte-Write und Block-Write besteht nur in der 
Anzahl der angehängen Daten-Bytes. Wobei man niemals über eine 
Page-Grenze hinweg schreiben darf !!!! (der interne Adressen-Zähler 
beginnt sonst wieder am Page-Anfang)
Gast #2631321
Lesenswert?

Hallo, danke für die Antworten. Es ist mir jetzt etwas klarer geworden. 
Die Page gebe ich bei xxxx an. Ein kleines Beispiel um mein Verständnis 
zu überprüfen. Byte 4 in Page 3 sieht so aus: 0011 0100  ??

Ich habe mal mein Programm angehängt, da es noch nicht richtig läuft.
Ich will einfach ein Zeichen A in Adresse MSB 0x00, LSB 0x40 speichern, 
das Zeichen um eins erhöhen auf B und das in Adresse MSB 0x00, LSB 0x60 
speichern. Anschließend möchte ich beide Zeichen auslesen und ausgeben. 
Auf dem Display müsste dann ja A und B stehen, im nächsten Durchlauf B 
und C usw. Aber irgendwie stehen immer nur 2 gleiche Buchstaben da, also 
immer A und A, B und B usw. Es scheint als ob immer nur die erste 
Adresse ausgelesen wird?

Warum ist das so? Wo liegt mein Fehler?
Danke für alle Tipps!
Angehängte Dateien:
Gast #2631389
Lesenswert?

Hallo,

es liegt wohl daran dass du sowohl beim Schreiben als auch beim Lesen 
stets die Adresse falsch an gibst. Du beginnst immer bei Adresse 0 und 
...

Schau dir das mit der Adresse noch einmal genau an !!!
#2631730
Lesenswert?

@Thomas

hab mir mal das Datenblatt angesehen - und das solltest du auch tun.
1. Die Adresse wird nicht in 2 Bytes übermittelt, da man für 512 Byte 
nur 9 Adressbits braucht, wird das Bit8 in das Instuction-Commando 
eingebaut (Byte1), dann kommen die Adressbits 7..0 im 2.Byte, dann die 
Daten!

2. CS ist im Ruhezustand immer High!
Also:
Schreiben
---------
CS=0
Write(0x06)    ;Enable
CS=1

CS=0
Write(0x02 | ((ADDR & 0x100)>>5)) ;ADDR-MSB Bit8 nach CMD Bit 3
Write(ADDR & 0xFF)
Write(Data)
CS=1
delay()

Lesen
-----
CS=0
Write(0x03 | ((ADDR & 0x100)>>5)) ;ADDR-MSB Bit8 nach CMD Bit 3
Write(ADDR & 0xFF)
Data=Read()
CS=1


Und grübel nicht über die Page's!
Das Ding hat 512Byte die Adressen gehen von 0x000 (0) bis 0x1FF (511) !


Sascha

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