Zum Inhalt
c't

c't Projekte - c't-Bot und c't-Sim - Mailinglisten

c't-Bot und c't-Sim


[Voriger (Datum)] [Nächster (Datum)] [Voriger (Thread)] [Nächster (Thread)]
[Nach Datum][Nach Thread]

Re: [ct-bot] SPI-Hardwareumbau

Absender: Timo Sandmann
Datum: Di, 16.09.2008 15:30:53
In-reply-to: <000001c9176c$766a13e0$0400a8c0@mexpnew>
References: <000001c9176c$766a13e0$0400a8c0@mexpnew>


Hallo Frank,

Am 15.09.2008 um 21:51 schrieb Frank Menzel:
Hallo Timo,
Start ist bei 282 und Ende bei 2280.
Den Patch habe ich eingespielt (Zeilen  manuell eingefügt da direkt in
der Mail drin) und muss sagen: Es klappt prima !
MMC-Test prima, der ja vorher aber auch schon lief mit denselben
Kartendaten. Aber das Map_Delete läuft jetzt wunderbar durch und die
Karte ist in 40 Sekunden gelöscht. Jedenfalls bricht er nicht kurz nach
dem Start ab. Ist die Löschzeit annähernd richtig ? Scheint mir doch
recht lange zu sein.

dein MMC-Test hatte ergeben, dass es ca. 3,7 ms dauert, 512 Byte zu schreiben, das sind also ungefähr 7,4 ms pro KB. Folglich dauert es (theoretisch) 4096 KB * 7,4 ms / KB = 30 s für die ganze Map-Datei. Aber: Die Lösch-Funktion "stresst" die Karte viel mehr, es werden ohne Unterbrechung die Daten (alles Nullen) geschrieben, beim MMC-Test hingegen hat die Karte immer etwas Luft, weil auch Daten gelesen, Puffer aufbereitet werden und die ganze Testroutine nur beim Display- Update ausgeführt wird. Ich denke genau hier lag auch das Problem: Wenn die Karte nach einem Schreibvorgang "fertig" meldet, sind die Daten wohl noch nicht im Flashspeicher angekommen, die Antwort heißt nur, dass die Karte wieder bereit ist. Irgendwann ist der Cache im Kartencontroller aber voll bzw. er muss auf einen anderen Flashblock wechseln und das dauert dann deutlich länger. Hier hat der Timeout in mmc_write_sector_spi() nicht mehr ausgereicht (der Zähler war in 16 Bit) und es kam zu "Fehler 3". Mit dem Patch ist der Timeout-Zähler 24 Bit groß, das reicht dann auch für den (seltenen) Fall, dass die Karte länger braucht, bis sie wieder bereit ist.

Ich muss noch mal überlegen, ob damit jetzt auch wirklich alle (Timeout-)Fälle abgedeckt sind, dann stelle ich den Patch ins SVN. Da der Zähler erhöht wird, während die Hardware das aktuelle Byte überträgt, verlangsamt der Patch die ganze Geschichte übrigens nicht, so dass sich für schnellere Karten kein Nachteil ergibt.

Grüße,
Timo