Hallo
Ich will mit einem Atmega64 ein serielles EEPROM (SPI) beschreiben,
lesen.
Wenn ich über RS232 einen Text an den Atmega sende, soll dieser diesen
Text in den EEPROM speichern.
Es sollen ~100 Telefonnummern und ein Namen an den Atmega gesendet
werden.
Der Atmega soll anschließend an die Nummern die als String im EEPROM
vorliegen eine SMS versenden.
Hatt jemand ein gut dokumentiertes Programm für serielle EEPROMS?
Ich verwende ein 25AA512 von Microchip.
Wie kann ich einen String ins EEPROM schreiben?
Vielen Dank
Schau Dir das Datenblatt vom EEPROM an und forme das benötigte Protokoll
in der Firmware des Controllers nach. Das ist ein wenig Fleißarbeit und
das kannst Du selber. Wie das SPI funktioniert, steht im Datenblatt des
ATMega. Wenn Du das mal programmiert hast und kommst nicht weiter,
kannst Du ja wieder fragen.
Junge raff es doch endlich:
selber machen macht erst schlau. Dumme Fragen werden nun mal ungern
beantwortet... Wenn du nicht in der Lage bist ein Software-SPI zu
schreiben, dann hast du ein falsches Hobby gewählt. Selber suchen gehört
nun mal dazu. Die Seite für alle deiner Fragen: http://www.gidf.de
Ja, die SPI-EEPROMs werden doch recht selten verwendet.
Die meisten (ich auch) nehmen die I2C-EEPROMs 24C512 und dazu findet man
dann auch Beispiele.
Aber warum speicherst Du nicht einfach die Telefonnummern im Flash?
Der ATmega64 hat doch massig davon.
Dazu muß man nur eine Flashroutine in den Bootsektor schreiben.
Oder man nimmt nen Bootloader mit integrierter Flashroutine (API-Call),
die man dann von der Applikation aus aufruft.
Peter
Hi
>Hat niemand etwas?>ich finde auch nichts dazu
Lass dein Rumgeheule. Sieh dir das Datenblatt von deinem EEPROM an und
vergleiche das mit dem SPI-Interface vom ATMEGA64. Und dann
Programmiere. Wenn du das nicht willst, solltest du dein Hobby
überdenken.
MfG Spess
>@Dennis>Investiere deine Zeit anderst als dumme Sprüche zu klopfen.
Bist du dir sicher, das das dumme Sprüche waren??? Denn so gemeint waren
sie eigentlich nicht. Erst denken, dann maulen.
>Wenn du mir nicht helfen willst lass es eben!
Aber natürlich helfe ich dir, siehe mein Posting oben!!! Vieviele
hundert Links möchtest du denn haben, in denen Haarklein SW-SPI
beschrieben wird???
http://www.gidf.de
RTFM: http://atmel.com/dyn/resources/prod_documents/2490S.pdf, da steht
auch viel über SPI drinn....
BTW: welche Programmiersprache wäre dir denn angenehm??? Bisher hast du
uns diesbezüglich noch keinen Wunsch geäussert, wie wir dir diese
armseligen 20 Zeilen SW-SPI vorkauen sollen...
ziehe CS nach Low, sende Deinen Befehl und danach dein Datum. Das Was´s.
Du findest hier etwas. Vor einigen Wochen war jamand mit AVR und C hier,
der seinen Code eingestellt hat.
Und von mir findest du auch einen Teil davon für 8051.
Einfach OBEN aus Suche gehen.
es sind Seiten von 256 Byte.
Der Counter ist selbst incrementierend und macht nach FF Roll over.
Also dann neue Adresse setzen.
Keine Ahnung was er mit 2us macht. Beim Lesen gibt es keine Zeiten in
diesem Bereich. Beim Schreiben pro Page oder Byte eben 4-5 ms
@schurli (Gast)
>Kann man jetzt auf die Adressen durchgehend zugreifen oder nicht?
Warum sollte man nicht?
Page Size ist nur für das Schreiben relevant.
MFG
Falk
Ja, kann man. Beim seitenweisen lesen sollte man aber den Zeiger immer
auf den Anfang einer Seite setzen (also in diesem Fall auf ein
Vielfaches von 128), da es sonst passieren kann das er dir Daten von
zwei Seiten mischt, da serielle EPROMS immer nur den internen Zähler für
die einzelnen Bytes innerhalb der Seite hochzählt nicht aber den Zähler
für die Seite.
Wenn du also den Adresszeiger auf Byte 64 von Seite 0 setzt und du die
nächsten 128 Bytes lesen willst (was also 64 Bytes von Seite0 und 64
Bytes von Seite1 wären), wird er dir dir hinteren 64 Bytes von Seite0
und dannach die vorderen 64 Bytes von Seite0 zurück geben, da er den
Seitenzähler nicht automatisch erhöht.
Einzelne Bytes können aber direkt Adressiert werden und kommen auch
richtig zurück. Du kannst auch nur 4 oder 8 Bytes holen, musst aber auch
hier auf die Seitengrenzen achten (es geht also nicht von Adresse 124, 8
Bytes zu lesen, da hier wieder ein Seitenwechsel statt findet).
Sven
NEIN. Wenn das EEPROM in Pages organisiert ist, muß immer eine gesamte
Page geschrieben werden, auch wenn man nur ein einziges Bit eines Bytes
innerhalb dieser Page geändert haben will. Die Struktur der Befehle und
die genaue Abfolge der Steuersignale und das Timing entnimmst Du
vielleicht dann doch dem Datenblatt.
@Travel Rec. (travelrec)
>NEIN. Wenn das EEPROM in Pages organisiert ist, muß immer eine gesamte>Page geschrieben werden, auch wenn man nur ein einziges Bit eines Bytes>innerhalb dieser Page geändert haben will.
Stimmt nicht. Wir reden über EEPROM, nicht FLASH!
Siehe Speicher
MFG
Falk
Die üblichen EEPROMs besitzen alle solche Pages. Anders als bei
Flash-ROMs kann man die Daten trotzdem byteweise schreiben. Man kann die
Pages benutzen um Zeit zu sparen - man muss es aber nicht.
allerdings:
"When doing a write of less than 128 bytes
the data in the rest of the page is refreshed along with
the data bytes being written."
Er macht es also selber intern.
Was auch immer mir sagen wollt, ich hab hier jedenfalls momentan einen
24C256 seriellen EEPROM (I2C) in der Mache und der schreibt auch
einzelne Bytes und kann auch einzelne Bytes lesen. Derzeit schreibe ich
immer 8 Bytes hintereinander und lese auch 8 Bytes hintereinander obwohl
die Seitengröße mit 64 Bytes angegeben ist. Bei meinen ersten Tests vor
2 Wochen hatte ich nur einzelne Bytes geschrieben und gelesen und das
ging auch. Schau dir halt das DB zu deinem EPROM an. Am genauesten
siehst du es bei den Taktdiagrammen wie du die Daten zu senden und zu
lesen hast.
Sven