da war mal was mit dem page write modus 32 byte schreiben in einem rutsch, weiß aber nichts genaues, google mal....
Page-Write-Modus
Will ich mehr als 16 Werte (word) ins eeprom 24c64 speichern, so werden diese beim Auslesen nicht richtig wiedergegeben. Wenn es <=16 Werte sind, dann stimmen sie.
Werden es mehr als 16, so stimmen nur die 16 zuletzt gespeicherten werte, die vorherigen sind irgendwelche seltsamen Wiederholungs-Fragmente der gespeicherten Zahlen.
Wer kennt die Lösung dieses Problems?
Holger
da war mal was mit dem page write modus 32 byte schreiben in einem rutsch, weiß aber nichts genaues, google mal....
Page-Write-Modus
oder schau mal ins Datenblatt ....
Ja, es wird wohl am page write modus liegen.
Folgendes wurde hierzu bereits geschrieben:
"Die EEPROMs haben einen internen 32 Bytes große Buffer und einen eigenen Addresszähler der von 0 bis 31 gehen kann. Man muß also für 32 Bytes am Stück nur einmal einen Deviceselect durchführen."
und:
"Beim Schreiben kannst du maximal nur 32 Bytes auf einmal senden, danach musst du erstmal par Millisekunden warten bis der EEPROM wieder bereit ist. Dann führst du erneut einen Device Select durch und sendest die Addresse für die nächsten Bytes. Wichtig ist nur das du das Pageboundary beachtest. "
Wie sieht der "device select" in der praxis aus, welche routine muss ich in mein bascom-Programm einfügen?
Mit dem data sheet komme ich leider nicht klar.
Bin mir nicht Sicher obs mit den modis zu tun hat wen XXRyder diesen Source verwendet:
https://www.roboternetz.de/phpBB2/dl...le&file_id=283
@xxrider
noch ein Hinweis aus eigener Erfahrung zu "Beim Schreiben kannst du maximal nur 32 Bytes auf einmal senden":
Das geht nur, wenn die Adressen der 32 Byte im gleichen 32 Byte Block liegen (hier also die unteren 5 Bit des Adresszählers).
Sonst werden die hinteren Bytes wieder vorne angesetzt - das hatte mich schon mal aus dem Rennen geworfen
If more than xx data words are transmitted to the EEPROM, the data word address will 'roll over' and previous data will be overwritten. The address 'roll over' during write is from the last byte of the current page to the first byte of the same page.
Hallo thomas,
trifft dies auch auf den Byte-Write-Modus zu? ich meine, da wird doch jedesmal die adresse mitgesendet. ich verstehe nicht ganz, wie du das meinst....auf was muß man deffinitiv achten?
Ach wo, beim Byte-write kann Dir das alles vollkommen wurscht sein. Ein guter Grund, seine Subroutinen auf dieser Basis aufzubauen, auch wenn man dann evtl. ein paar wenige Byte an Programmcode mehr braucht.Zitat von Rage_Empire
Wenn ich gerade dabei bin: Bei den 24Cxx wird das Adresswort immer (ungewöhnlicherweise) mit MSB, LSB übergeben.
Grüße
Henrik
also dürfte es mit dem source aus dem download-verzeichis damit eigentlich kein problem machen.
Leider doch, weil hier I2CSEND verwendet wird, bei dem mehrere Byte hintereinander mit autoincrement geschrieben werden.Zitat von Rage_Empire
Das fällt bei den Routinen nicht so auf, wer denkt schon etwas Böses bei:
Eebanz = 4 : Gosub Write_ee
und wer denkt schon bei
I2csend 24c64w , Eehead(1) , Eebanz
darüber nach, wie I2csend das verhackstückelt.
Wer es tut, findet heraus, daß die Blockgrenze dabei überschritten werden kann .
Ich muss mal meinen eigenen Democode heraussuchen, bei dem ich das konsequent vermeide (liegt auf einem anderen Rechner).
Grüße
Henrik
Lesezeichen