Hallo,

ich möchte einen Flashspeicher, den ich auf einer defekten Festplatte gefunden habe und der eine SPI Schnittstelle besitzt, zum Datensammeln flexibel einsetzen. Dazu habe ich einen SPI-Stick gebastelt, den ich im Augenblick auf einem Steckbrett von einem ATmega88PA aus ausprobiere.

Der Flashspeicher ist ein 45DB041B, etwa 500kByte groß. Datenblatt:http://www.atmel.com/Images/doc3443.pdf, Application note AN-4

Die Speicherstellen des Flashes sind nur für eine beschränkte Anzahl von Schreibvorgängen benutzbar, oft so im Bereich von 100000 mal. Ich konnte für diesen Flash keine Angabe darüber finden und weiß im Augenblick auch nicht ob ein Löschen und Wiederbeschreiben als zwei Schreibvorgänge zählen.

Um den Flash schonend zu nutzen, möchte ich die Speicherstellen, die in Seiten (pages) von je 264Bytes organisiert sind, reihum beschreiben. Also SPI-Stick einstecken und Seite 0 beschreiben. SPI-Stick abziehen und beim nächsten Mal Seite 1 beschreiben.

Dazu müßte man sich irgendwie merken, welche Seite zuletzt beschrieben wurde. Da der Stick aber irgendwo eingesetzt werden kann, müßte diese Information auf dem Stick selber gespeichert werden, was aber eine überproportionale Belastung für diese Speicherstelle gegenüber den anderen Speicherstellen darstellen würde.

Ich habe mir nun überlegt, daß nach Schreiben einer Seite auf den Flash die nächste Seite gelöscht werden muß. Diese Seite ist dann mit 264 Bytes des Wertes FFh beschrieben. Das nächste Gerät, das auf diesem Flash schreiben möchte, sucht diese gelöschte Seite, also nach den 264 FFh Bytes, schreibt darauf und löscht dann die nächste freie Seite und so fort.

Dazu habe ich eine Routine geschrieben, die ein Gerät benutzten soll um solch eine gelöschte Seite zu suchen. Dauert maximal so etwa 270ms bei den 2048 seiten, wenn es die letzte wäre. (etwa 620kHz SPI Takt bei 8 MHz µC Takt)

Mal abgesehen davon, ob es für mich, außer durch Programmfehler, im Bereich des Möglichen liegt, die 100000 Schreibvorgänge zu erreichen ohne zu wissen wieviel die Festplatte schon schon an Kredit aufgezehrt hat, jetzt endlich die Frage : Wie vermeidet man das Beschreiben immer der gleichen Speicherstellen und sorgt für eine gleichmäßige Belastung?

Gruß
Searcher