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
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)
Thomas schrieb: > Ich möchte kein page writing machen sondern byte write. dann übergibst du einfach die Byte-Adresse die in deinem Beispiel also 90 währe. Sascha
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!
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 !!!
@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
Herzlichen Dank für diese ausführliche Hilfe! Das Programm läuft jetzt! Ich habe mich durch verschiedene Dinge verwirren lassen. Ich hatte am Anfang ein 1024 kBit EEPROM und diese Application Note http://ww1.microchip.com/downloads/en/AppNotes/01193A.pdf Die hat dann natürlich nicht zu dem kleinen EEPROM gepasst. Ich denke ich hab einiges über die Adressierung gelernt.
Hallo Thomas, möchtest du dein fertiges Programm zur Verfügung stellen? MfG
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.