DS1307 - Probleme beim Zugriff auf mehr als 32 Bytes?

Ich hab den Eindruck dass man bei einer DS1307 RTC maximal 32 Bytes pro Adressierung lesen oder schreiben kann.

Beispiel:

    Wire.beginTransmission(DS1307);
    Wire.send(0); // Goto address
    Wire.endTransmission();
    Wire.requestFrom(DS1307, 64); // Read 64 bytes
    for (byte t=0x00; t<=0x3F; t++) {
      Serial.print(" ");
      byte data = Wire.receive();
      if (data < 0x10)
        Serial.print("0");
      Serial.print(data, HEX);
    }

liefert mir Daten bis 0x1f, ab 0x20 gibts nur noch “0”.

Wenn ich aber z.B. pro Wire.receive() einen Wire.send(n) vorher mache funktionierts.

Kann das jemand bestätigen?

Der DS1307 hat zwar 64 Byte RAM, es können aber nur 56 Byte RAM frei verwendet werden, in den restlichen 8 Byte sind die Zeit, Datum und ein Kontrollregister gespeichert und werden automatisch weitergezählt. Das RAM befindet sich an den Adressen 0x08 bis 0x3F Mit Deinem Programm überschereibst Du die Zeit und Datumswerte. Du verlierst somit die Zeit. Das erklährt aber nicht das geschielderte Problem. Das Datenblatt gibt kein Blockwrite Limit an. Da einzige wenn DU über =x3F kommst incrementiert sich der Adresspointer automatisch zu 00. Grüße Uwe

@uwefed: Ja, das ist mir alles klar. :)

Nur wenn ich z.B. Adresse "0" adressiere und dann 64 Bytes lese bekomme ich wie gesagt nur die 32 Byte zwichen 0x00 und 0x1f aus dem NVRAM und dann nur noch "0".

Wenn ich "8" adressiere bekomm ich die 32 Bytes zwischen 0x08 und 0x27 aus dem NVRAM und dann nur "0".

Das hab ich gemeint. :)

Ich hab mir extra zwei weitere DS1307 bei Watterott bestellt weil ich dachte ich hätte das Teil letzt geröstet (habs dummerweise falschrum angeschlossen nach Versuchen mit einem Chronodot), aber die beiden Neuen reagieren identisch. :(

Nun bin ich nicht 100%ig sicher ob das an meinem Programm liegt (eben weil ich nichts entsprechendes im Datenblatt finden konnte) und deshalb hier die Frage.

In der Beschreibung der Bibliothek Wire schreiben sie etwas von einem Buffer aber nicht wie groß der ist. http://arduino.cc/en/Reference/WireEndTransmission

im file Wire.h der Wire Library steht:

define BUFFER_LENGTH 32

Also tippe ich mal Das Die Library schuld ist. Du kannst ja mal den Wert ändern und schauen welchen effekt das hat.

Grüße Uwe