Einen schönen Abend,
ich such' mir hier nen Wolf und finde nichts. Hat jemand eine Library für das EEPROM AT24C32. (2-Wire, 32K). Wird in einigen RTC DS 3231 mit dazuverbaut. Alle von mir gefundenen Libraries der RTC's sprechen diesen Speicher nicht an.
Überprüfe die Sequenzen nochmal im Datenblatt, da ich es nur grob überflogen habe, aber das sind die Grundzüge. Ob es 100%ig so geht kann ich nicht sagen.
Die Datenblätter zu I2C Devices sehen immer so furchtbar aus mit den ganzen Start/Stop Conditions und ACK/NACK, aber das macht alles Wire.h. Generell ist Start = beginTransmission() und Stop = endTransmission()
Punkt 3 man man dann beliebig wiederholen, z.B. ein Array in das EEPROM schreiben
Nicht ganz
Das EEprom ist in Pages zu 32 Byte unterteilt. Pages Write kann nur innerhalb dieser Pages erfolgen. Die Adresse wird nach dem ersten Schreibzugriff erhöht aber immer nur die untersten 5 Bit der am Angfang übertragenen Speicheradresse. Wenn man nicht am Pagesanfang anfängt zu schreiben werden die überzähligen Bytes (die die über die Pageadresse hinausgehen) an den Anfang der Page geschrieben.
Praktisches Beispiel:
Die Pages gehen: 0-31, 32-63, 64-95, 96-127 ecc
Wenn ich nun bei 48 beginne kann ich bis 63 schreiben also 16 Byte. Das 17. Byte kommt dann aber nicht auf 64 sondern in 32 ecc.
Bei einem Pagewrite wird nicht jedes Byte einzeln ins EEprom geschrieben sondern am Ende des Pagewrite. Somit kann man bis zu 32 Byte in einem Rutsch und mit nur einer Programmierwartezeit speichern.
http://www.atmel.com/images/doc0336.pdf:
PAGE WRITE:
The 32K/64K EEPROM is capable of 32-byte page writes.
A page write is initiated the same way as a byte write, but the microcontroller does not
send a stop condition after the first data word is clocked in. Instead, after the EEPROM
acknowledges receipt of the first data word, the microcontroller can transmit up to 31
more data words. The EEPROM will respond with a zero after each data word received.
The microcontroller must terminate the page write sequence with a stop condition (refer
to Figure 3).
The data word address lower 5 bits are internally incremented following the receipt of
each data word. The higher data word address bits are not incremented, retaining the
memory page row location. When the word address, internally generated, reaches the
page boundary, the following byte is placed at the beginning of the same page. If more
than 32 data words are transmitted to the EEPROM, the data word address will “roll
over” and previous data will be overwritten.
Das hatte ich schon bei der Library der RTC gemerkt. Da kamen erst einmal paar Seiten Fehlermeldungen. Dann musste nicht nur send() in write() sondern auch request() auch in read() geändert werden.
Trotzdem: Danke für den Hinweis. Wahrscheinlich wäre ich dennoch darüber gestolpert.
Gruß Eberhard