Forum: Mikrocontroller und Digitale Elektronik NAND-Flash mit STM32


von Tobias P. (hubertus)


Lesenswert?

Hallo allerseits

ich möchte mit dem FSMC des STM32F407 einen NAND-Flash vom Typ 
S34ML04G100TFI000 ansteuern.

Die Kommunikation mit dem Flash ansich funktioniert, denn ID auslesen 
etc. ist möglich. Ich bin aber nicht sicher, wie das jetzt mit dem Wear 
Leveling etc. funktionieren soll. Zuerst habe ich gedacht dass das der 
NAND Controller des STM macht. Das ist aber natürlich nicht so, 
offensichtlich muss man das von Hand machen (was bietet dann der 
NAND-Controller für einen Vorteil?).

Was ich auch nicht verstehe: wenn ich eine einzelne Page löschen möchte 
(Was ich ja muss, wenn da neue Daten rein sollen) dann muss ich bei dem 
betreffenden Flash-Chip offenbar den ganzen Block à 132 KB löschen. Was 
mache ich mit den Daten, die ich nicht löschen will? ich kann ja dann 
unmöglich 132 KB Daten im RAM sichern, den Block löschen und dann alles, 
was ich nicht löschen wollte, wieder zurück schreiben. Das ist mal meine 
erste Frage. Wie das gehen soll.

Dann das zweite interessante Problem: man muss ja ein Wear Leveling 
implementieren. Wenn ich beim Schrreiben von Daten einen Bitfehler 
feststelle, dann mus man ja den betreffenden Block als defekt markieren 
und soll diesen nicht mehr benutzen und die Daten dann woanders 
speichern. Nur, wie soll man sich merken, dass die Daten jetzt woanders 
liegen? mit der Zeit wird ja das alles total über den ganzen 
Memory-Bereich verstreut.

von Frank B. (f-baer)


Lesenswert?

Tobias P. schrieb:
> Hallo allerseits
>
> ich möchte mit dem FSMC des STM32F407 einen NAND-Flash vom Typ
> S34ML04G100TFI000 ansteuern.
>
> Die Kommunikation mit dem Flash ansich funktioniert, denn ID auslesen
> etc. ist möglich. Ich bin aber nicht sicher, wie das jetzt mit dem Wear
> Leveling etc. funktionieren soll. Zuerst habe ich gedacht dass das der
> NAND Controller des STM macht. Das ist aber natürlich nicht so,
> offensichtlich muss man das von Hand machen (was bietet dann der
> NAND-Controller für einen Vorteil?).

Der NAND-Controller nimmt dir das Pinwackeln ab. Du gibst die 
Zieladresse und die Daten an, den Rest erledigt der Controller.
>
> Was ich auch nicht verstehe: wenn ich eine einzelne Page löschen möchte
> (Was ich ja muss, wenn da neue Daten rein sollen) dann muss ich bei dem
> betreffenden Flash-Chip offenbar den ganzen Block à 132 KB löschen. Was
> mache ich mit den Daten, die ich nicht löschen will? ich kann ja dann
> unmöglich 132 KB Daten im RAM sichern, den Block löschen und dann alles,
> was ich nicht löschen wollte, wieder zurück schreiben. Das ist mal meine
> erste Frage. Wie das gehen soll.

Hier hilft dir Wear Leveling. Den Block in einen anderen Block kopieren, 
ohne die gelöschten Daten. Danach den ersten Block als gelöscht 
markieren.

>
> Dann das zweite interessante Problem: man muss ja ein Wear Leveling
> implementieren. Wenn ich beim Schrreiben von Daten einen Bitfehler
> feststelle, dann mus man ja den betreffenden Block als defekt markieren
> und soll diesen nicht mehr benutzen und die Daten dann woanders
> speichern. Nur, wie soll man sich merken, dass die Daten jetzt woanders
> liegen? mit der Zeit wird ja das alles total über den ganzen
> Memory-Bereich verstreut.

Du brauchst eine Zuordnungstabelle, in der deine logischen Blöcke (die 
gedachte Reihenfolge der Daten) mit den tatsächlichen Blöcken des NAND 
assoziiert werden. In dieser Zuordnungstabelle hinterlegst du auch 
Informationen wie Blockdefekte oder gelöschte Blöcke.
Dazu benötigst du eben je nach Anzahl der Blöcke ein Array.
Der Index n des Arrays stellt deinen logischen Block dar, im zugehörigen 
Datenfeld Array[n] steht die tatsächliche Adresse des Blockes im Flash. 
Zusätzlich bspw. -1 für einen defekten Block, -2 für einen gelöschten, 0 
entsprechend für unbenutzte Blöcke.

von Tobias P. (hubertus)


Lesenswert?

Hi Frank,

kann ich das Wear Leveling genau "so einfach" implementieren, wie du das 
beschrieben hast, oder muss man da noch weiteres beachten?

Die Zuordnungstabelle der Blöcke und tatsächlichen Daten, darf diese fix 
im nullten Block stehen? weil diese überschreibt man ja auch immer 
wieder, weil sich die Zuordnung ja laufend ändert, während man Daten aus 
dem Flash löscht bzw. neu schreibt. Damit ändert dann auch die 
Zuordnungstabelle laufend, oder?

von Frank B. (f-baer)


Lesenswert?

Die Zuordnungstabelle solltest du sinnvollerweise in einem anderen 
nicht-flüchtigen Speicher ablegen. Hier empfiehlt sich ein kleiner FRAM.
Da die Tabelle mit jedem Schreibvorgang aktualisiert wird, würdest du 
ansonsten den Flash sehr schnell zerstören.

Was man noch überlegen kann, ist eine Implementation von Static Wear 
Leveling.
Dabei gibt es für jeden Block zusätzlich einen Counter, der zählt, wie 
oft der Block gelöscht wurde. Diese Counter werden beim Schreiben 
zusätzlich ausgewertet, Daten werden immer in den Block geschrieben, der 
die wenigsten Löschzyklen hat. Dazu müssen unter Umständen die Daten in 
diesem Block in einen anderen Block verschoben werden.
Damit verhindert man, dass selten benutzte Blöcke mit 1-2 Löschzyklen 
funktionsfähig bleiben, im Gegenzug aber andere Blöcke schon defekt 
sind, weil dort viele Löschzyklen nötig waren. Man erreicht quasi eine 
gleichmäßige Abnutzung des Flash.

Kleiner Hinweis, falls du ein Filesystem mit USB-Massenspeicher 
implementieren willst: Es empfiehlt sich, die FAT auch in dem FRAM 
abzulegen, da diese Daten unter Umständen schon beim einfachen Zugriff 
aktualisiert werden.

von Falk B. (falk)


Lesenswert?

@ Tobias Plüss (hubertus)

>kann ich das Wear Leveling genau "so einfach" implementieren, wie du das
>beschrieben hast, oder muss man da noch weiteres beachten?

"so einfach" sind die wenigsten Dinge im leben, auch Wear leveling ;-)

>Die Zuordnungstabelle der Blöcke und tatsächlichen Daten, darf diese fix
>im nullten Block stehen? weil diese überschreibt man ja auch immer
>wieder, weil sich die Zuordnung ja laufend ändert, während man Daten aus
>dem Flash löscht bzw. neu schreibt. Damit ändert dann auch die
>Zuordnungstabelle laufend, oder?

Eben, das ist eines der vielen Probleme beim Wear Leveling. Hinter all 
den Algorithmen für USB-Sticks, SD Karten und SSDs steckt verdammt viel 
Know How, das man als Einzelner am sinnvollsten als fertiges Gesamtpaket 
nutzt und nicht neu erfindet. Für Flash gibt es JFFS & Co, das sollte 
man nutzen.

https://en.wikipedia.org/wiki/Flash_file_system

Bei meinem letzten Projekt habe ich auch ein sehr einfaches Wear 
Leveling für einen seriellen Flash gebraucht. Dort hatte ich aber den 
Riesenvorteil, dass keine wahlfreien Schreibzugriffe erfolgten, sondern 
nur sequentielle Blockzugriffe. Die Daten waren Pakete zu je 256 Bytes, 
davon wurde je 2 in eine Page gepackt. Der Trick war einfach. Ich habe 
im Flash einen umlaufenden Ringpuffer aufgebaut, d.h. die Daten wurden 
immer fortlaufend in aufsteigende Pages geschrieben. Der Pagecounter ist 
beim Maximum auf Null übergelaufen, ähnlich wie ein FIFO. Jeder 
Datenblock bekam eine fortlaufende 32 Bit Seriennummer. Daran konnnte 
man nach einem Reset die aktuellen Daten und Adressen wieder 
rekonstruieren. Auf diese Weise wird der gesamte Flash absolut 
gleichmäßig beschrieben und hält für die Anwendung praktisch ewig ( 2e9 
Schreibzugriffe, verteilt auf 8192 Pages, macht ~244.000 
Schreibzugriffe/Page.

von Tobias P. (hubertus)


Lesenswert?

Hallo Falk,

ja, das mit "so einfach" war nicht ganz ernst gemeint :-)

Ich möchte gern versuchen, das selber zu implementieren. Meiner Meinung 
nach sollte das möglich sein. Ich möchte einen "Flash Translation Layer" 
bauen, damit ich mit FATFS von Chan einige Files auf dem NAND verwalten 
kann.

Ich habe mir folgendes überlegt. Als erstes muss man beim Start die 
ganzen Blöcke des NANDs durch gehen und schauen, ob sie kaputt sind. 
Wenn ja, dann dies in einer Tabelle vermerken.

Jetzt möchte ich gerne, dass man den NAND mit 512 Bytes grossen Sektoren 
ansprechen kann. Das Lesen sollte einfach sein; man rechnet die 
Sektornummer in eine Block- und Page-Nummer um, liest dann die Page und 
kopiert den gewünschten Sektor sich heraus. Soweit so gut.

Beim Schreiben wird es etwas kniffliger: man müsste zuerst die Page, in 
die man schreiben will, lesen, dann den gewünschten Teil modifizieren, 
und die so resultierenden Daten dann in eine neue, bisher unbenutzte 
Page schreiben. Wenn der Schreibvorgang erfolgreich ist, dann vermerkt 
man die Adresse, wo die neuen Daten liegen, in der Zuordnungstabelle. 
Wenn der Schreibvorgang fehlschlug, dann muss man den entsprechenden 
Block in der Bad Block Tabelle vermerken und sich einen neuen Block 
suchen und dort die Daten rein schreiben. So weit so richtig?

Es ist nicht ganz trivial, aber im Moment sehe ich eher das Problem 
darin, herauszufinden, welche Daten in die Zuordnungstabelle alle rein 
müssen.

von asdfasd (Gast)


Lesenswert?

> ich möchte mit dem FSMC des STM32F407 einen NAND-Flash vom Typ
> S34ML04G100TFI000 ansteuern.

Bist du Masochist?  Der einzige Grund, rohe NANDs einzusetzen, ist 
Massenfertigung wo es auf jeden Pfennig ankommt.  Und selbst dann auch 
nur, wenn entsprechende Firmware vorhanden ist.  Du würdest ja auch 
keine nackten Festplatten ohne Elektronik kaufen.  Selbst im Linux 
Kernel ist der Support, obwohl sie schon Jahre dran rumbasteln, für 
SLC-NANDs eher bescheiden und für MLCs noch in der Entwicklung.

Nimm entweder eMMC oder [µ]SD-Karten, also NAND mit eingebautem 
Controller und für das verbaute NAND passender Firmware. 
Geschwindigkeitsmäßig können die sogar schneller sein (ja, sogar ne 
µSD-Karte).

NANDs sind ne Pest für Open Source Entwickler - zu komplex, jeder 
Hersteller kocht sein eigenes Süppchen, Infos/Treiber nur unter NDA, 
etc.  Zum Glück scheint das den Geräteentwicklern auch langsam zu 
umständlich zu werden und sie steigen vermehrt auf eMMC um.

von Frank B. (f-baer)


Lesenswert?

asdfasd schrieb:
>> ich möchte mit dem FSMC des STM32F407 einen NAND-Flash vom Typ
>> S34ML04G100TFI000 ansteuern.
>
> Bist du Masochist?  Der einzige Grund, rohe NANDs einzusetzen, ist
> Massenfertigung wo es auf jeden Pfennig ankommt.  Und selbst dann auch
> nur, wenn entsprechende Firmware vorhanden ist.  Du würdest ja auch
> keine nackten Festplatten ohne Elektronik kaufen.  Selbst im Linux
> Kernel ist der Support, obwohl sie schon Jahre dran rumbasteln, für
> SLC-NANDs eher bescheiden und für MLCs noch in der Entwicklung.
>
> Nimm entweder eMMC oder [µ]SD-Karten, also NAND mit eingebautem
> Controller und für das verbaute NAND passender Firmware.
> Geschwindigkeitsmäßig können die sogar schneller sein (ja, sogar ne
> µSD-Karte).
>
> NANDs sind ne Pest für Open Source Entwickler - zu komplex, jeder
> Hersteller kocht sein eigenes Süppchen, Infos/Treiber nur unter NDA,
> etc.  Zum Glück scheint das den Geräteentwicklern auch langsam zu
> umständlich zu werden und sie steigen vermehrt auf eMMC um.

Für eMMC und SD-Karten gibt es ganz klare Grenzen.
Der Temperaturbereich von eMMC und SD-Karten ist in der Regel 
eingeschränkt, NAND-SLC bekommt man durch die Bank weg mit -40..+85°C. 
Und gegen SD-Karten sprechen Anwendungen, bei denen starke Vibrationen 
auftreten, denn dabei heben die Kontakte ab. Es gibt Anwendungen, da 
benutzt man ganz bewusst einen NAND-SLC. eMMC ist kein Allheilmittel, 
zumal auch recht teuer gegenüber den meisten größeren NAND-SLCs. Noch 
dazu gibt es eMMC eigentlich ausschliesslich in finepitch-BGA-Bauformen, 
selbst 0,5mm Pitch ist eher selten, meist 0,4mm und drunter, 
dementsprechend steigen die Anforderungen an die Leiterplatte, was die 
Sache wieder teuer macht.

von Falk B. (falk)


Lesenswert?

@ Frank Bär (f-baer)

>Für eMMC und SD-Karten gibt es ganz klare Grenzen.

Die gibt es immer.

>Der Temperaturbereich von eMMC und SD-Karten ist in der Regel
>eingeschränkt,

Worauf?

> NAND-SLC bekommt man durch die Bank weg mit -40..+85°C.

Auch das ist ganz klar eingeschränkt. Ob die EInschränkung von eMMC für 
den OP relevant ist?

>Und gegen SD-Karten sprechen Anwendungen, bei denen starke Vibrationen
>auftreten, denn dabei heben die Kontakte ab.

Ob das für den OP relevant ist? Wieviele SD-Karten arbeiten problemlos 
in Autoradios?

> Es gibt Anwendungen, da
>benutzt man ganz bewusst einen NAND-SLC. eMMC ist kein Allheilmittel,
>zumal auch recht teuer gegenüber den meisten größeren NAND-SLCs.

Dafür bekommt man auch mehr.

von Frank B. (f-baer)


Lesenswert?

Falk B. schrieb:
> @ Frank Bär (f-baer)
>>Der Temperaturbereich von eMMC und SD-Karten ist in der Regel
>>eingeschränkt,
>
> Worauf?

Die meisten eMMC sind nur von 0..70°C spezifiziert. die Technologie ist 
eben für den Einsatz in Consumerprodukten vorgesehen.

>> NAND-SLC bekommt man durch die Bank weg mit -40..+85°C.
>
> Auch das ist ganz klar eingeschränkt. Ob die EInschränkung von eMMC für
> den OP relevant ist?

Das wissen wir nicht, nichtsdestotrotz kann ich damit klar begründen, 
dass eMMC eben nicht in jeder Situation das technische Optimum ist.

>>Und gegen SD-Karten sprechen Anwendungen, bei denen starke Vibrationen
>>auftreten, denn dabei heben die Kontakte ab.
>
> Ob das für den OP relevant ist? Wieviele SD-Karten arbeiten problemlos
> in Autoradios?

Lesender Zugriff ist etwas anderes als schreibender Zugriff. Beim Lesen 
kann ich buffern, das ist beim Schreiben schwierig. Insbesondere der 
Verweis auf die Zugriffsgeschwindigkeiten wird bei SD-Karten in sog. 
harsh environments bei schreibendem Zugriff klar relativiert, weil 
Fehlerkorrekturen und Fehlererkennung die effektive Datenrate in den 
Keller ziehen. Dabei hilft mir auch dre integrierte Controller nicht 
wirklich weiter, denn wenn die Versorgungskontakte abheben, ist die 
interne CRC-Prüfung für die Katz.

>
>> Es gibt Anwendungen, da
>>benutzt man ganz bewusst einen NAND-SLC. eMMC ist kein Allheilmittel,
>>zumal auch recht teuer gegenüber den meisten größeren NAND-SLCs.
>
> Dafür bekommt man auch mehr.

Wenn man es braucht, bzw. wenn die Einsatzbedingungen es hergeben.

Ist alles richtig, was du schreibst.
Aber es ist eben NICHT so, wie es in dem von mir zitierten Beitrag zum 
Ausdruck kommt, dass eMMC oder SD-Karten prinzipiell die bessere 
Lösung sind. Vielmehr muss man hier ganz klar abwägen, was man braucht.

von Tobias P. (hubertus)


Lesenswert?

Also eMMC und dergleichen kommt nicht in Frage, weil BGA. Wie von dir 
Frank richtig vermutet, verteuert das nur die Leiterplatte.

Ausserdem habe ich bereits eine SD-Karte. Die anfallenden Daten werden 
darauf geloggt. Ich möchte aber aus Redundanzgründen einen zweiten 
Speicher verbauen, wo die selben Daten ebenfalls mit aufgezeichnet 
werden. Zuerst wollte ich ein serielles Dataflash (AT45DB und wie sie 
alle heissen) einsetzen, diese haben aber einfach viel zu wenig 
Speicher. Daher der NAND-Flash.

von Falk B. (falk)


Lesenswert?

@Tobias Plüss (hubertus)

>Ausserdem habe ich bereits eine SD-Karte. Die anfallenden Daten werden
>darauf geloggt. Ich möchte aber aus Redundanzgründen einen zweiten
>Speicher verbauen, wo die selben Daten ebenfalls mit aufgezeichnet
>werden.

Warum? Sind die Daten sooo wichtig? Hälst du die SD-Karte für soo 
anfällig? Nimm eine 2. SD-Karte.

> Zuerst wollte ich ein serielles Dataflash (AT45DB und wie sie
>alle heissen) einsetzen, diese haben aber einfach viel zu wenig
>Speicher. Daher der NAND-Flash.

Der dir tonnenweise Arbeit bescheren wird.

von Frank B. (f-baer)


Lesenswert?

Falk B. schrieb:
> @Tobias Plüss (hubertus)
>
>>Ausserdem habe ich bereits eine SD-Karte. Die anfallenden Daten werden
>>darauf geloggt. Ich möchte aber aus Redundanzgründen einen zweiten
>>Speicher verbauen, wo die selben Daten ebenfalls mit aufgezeichnet
>>werden.
>
> Warum? Sind die Daten sooo wichtig? Hälst du die SD-Karte für soo
> anfällig? Nimm eine 2. SD-Karte.

Nimm es doch einfach als Kundenvorgabe, dass die Daten auch auf einem 
integrierten (d.h. nicht entfernbaren) Speichermedium 
manipulationssicher abgelegt werden sollen.

>> Zuerst wollte ich ein serielles Dataflash (AT45DB und wie sie
>>alle heissen) einsetzen, diese haben aber einfach viel zu wenig
>>Speicher. Daher der NAND-Flash.
>
> Der dir tonnenweise Arbeit bescheren wird.

Das ist seine Sache, auf der anderen Seite steht nämlich auch der 
Lerneffekt, und der ist bei einer korrekten Implementation eines 
Flash-Speicher mit Filesystem und Wear Leveling ziemlich ausgeprägt.

Aber warum muss hier eigentlich grundsätzlich immer über jedes Detail 
der Fragestellungen diskutiert werden? Nur weil die Antwort nicht zur 
Frage passt, heisst das doch nicht, dass die Frage zwangsläufig falsch 
ist.
Die Anforderung, die Tobias hier stellt, ist doch nicht so abwegig. Hier 
geht es jetzt nur noch darum, dass er bitteschön eure Lösung (eMMC bzw. 
SD-Karte) nehmen soll, weil eurer Ansicht nach NAND-Flash Schrott ist.
Pure Rechthaberei!

"Hey, meine Lösung passt zwar nicht zu deinem Problem, aber wie wäre es, 
wenn du dein Problem einfach änderst? Dann wäre ich wieder im Recht und 
wir alle wären glücklich."

von Jan H. (jan_m_h)


Lesenswert?

Frank B. schrieb:
> "Hey, meine Lösung passt zwar nicht zu deinem Problem, aber wie wäre es,
> wenn du dein Problem einfach änderst? Dann wäre ich wieder im Recht und
> wir alle wären glücklich.“

Oft genug tauchen hier aber auch Fragestellungen auf, bei denen sich der 
TE auf einen Lösungsweg für sein Problem eingeschossen hat, und nun die 
dabei aufgetretenen Probleme gelöst haben will, obwohl sein Ansatz schon 
Murks ist und viel simpler oder besser hätte gelöst werden können.

von Falk B. (falk)


Lesenswert?

GENAU!!!!!!

von Frank B. (f-baer)


Lesenswert?

Jan H. schrieb:
> Frank B. schrieb:
>> "Hey, meine Lösung passt zwar nicht zu deinem Problem, aber wie wäre es,
>> wenn du dein Problem einfach änderst? Dann wäre ich wieder im Recht und
>> wir alle wären glücklich.“
>
> Oft genug tauchen hier aber auch Fragestellungen auf, bei denen sich der
> TE auf einen Lösungsweg für sein Problem eingeschossen hat, und nun die
> dabei aufgetretenen Probleme gelöst haben will, obwohl sein Ansatz schon
> Murks ist und viel simpler oder besser hätte gelöst werden können.

Kenne ich, selbst oft genug gelesen und ignoriert. Die Herangehensweise 
ist aber in dieser Fragestellung unnötig...

1. Der TE fragt, wie Wear Leveling funktioniert.
2. Der TE bekommt eine Antwort
3. Der TE konkretisiert nochmal die Nachfrage
4. Der TE bekommt eine detailliertere Antwort, es folgt etwas 
Fachsimpelei
5. Ein Nutzer erklärt dem TE, dass er bescheuert sei, wenn er NAND-Flash 
benutzen möchte
6. Ein anderer Nutzer führt an, dass es sehr wohl Situationen gibt, in 
denen alles für NAND-Flash spricht
7. Der TE erläutert, dass die Entscheidung aus einer der von dem anderen 
Nutzer angesprochenen Situationen heraus getroffen wurde. Desweiteren 
nennt er ein paar Details aus seinem Vorhaben
8. Dem TE wird erklärt, wie bescheuert er sei, wenn er NAND-Flash 
benutzen möchte, und dass sein Vorhaben völlig unsinnig ist.

von Arc N. (arc)


Lesenswert?

Mal ein paar Ideen:
Von ST gibt es einen "Advanced NAND Flash Driver for SLC NAND" 
allerdings afaik nur auf Nachfrage und nicht als direkt zugänglichen 
Download...
http://www.st.com/st-web-ui/static/active/en/resource/technical/document/user_manual/DM00091013.pdf
und ein Eval-Board dazu
http://www.st.com/web/en/catalog/tools/PF258870

Eine andere Möglichkeit wären serielle/SPI NANDs (SO-8/WSON-8-Gehäuse) 
und auf derselben Fläche wie das jetzt eingesetze NAND-Flash mehrere 
entweder zur Redundanz oder zum Speichern der Verwaltungsinformation zu 
verbauen.
Hersteller sind afair u.a. Winbond, Macronix, GigaDevice, Ato Solution 
oder ESMT (Micron zwar auch, aber afair dort nur im BGA-Gehäuse)

von Tobias P. (hubertus)


Lesenswert?

Hallo
ich habe jetzt hier ein IEEE paper wo die notwendigen Datenstrukturen 
etc. beschrieben sind und bin dabei, das zu Implementieren. Lesen von 
512 Bytes Sektoren (wie Sd-Karte) geht schon mal, ebenso wie das Bad 
Block Mgmt. Beim Rest bin ich noch dran.

Was mich noch interessieren würde: den Datenbereich darf man insgesamt 
4mal partiell beschreiben, d.h. man darf 4 Sektoren zu je 512 Bytes 
schreiben. Was aus den Datenblatt aber nicht genau hervor geht: darf im 
Spare auch nur 4mal rein geschrieben werden, oder darf ich da nach 
belieben.einzelne Bits auf 0 setzen? Beispielsweise wurde in eine Page 
4x ein Sektor rein geschrieben. Wenn der dazugehörige Block nun defekt 
geht, müsste ich das im Spare ja vermerken, aber das wäre ja dann ein 5. 
Dchreibzugriff, was gemäss DB aber ja nicht erlaubt ist (wenn es nicht 
erlaubt ist frage ich mich allerdings weshalb man auch beim Schreiben 
einzelne Bytes addressieren kann).


Gruss
Tobias

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.