Práce s SD kartou je blokujícíc, tedy nepoužívá se nějaká větší "file cache" - každé čtení je vždy fyzicky provedeno v okamžik požadavku, a každý zápis je proveden v okamžik požadavku (mimo aktivitu jednosektorové cache).
Do dokončení provedení dané činnosti (komunikace s SD kartou) je FC program zablokován (je tam timeout, samozřejmě). Bez ohledu na vyšší vrstvy, tedy jestli je soubor dopředu "natáhnutý" nebo se postupně natahuje s každým dalším zápisem.
Jediná optimalizace ("cache"), ve SDS, je pouze na úrovni jediného sektoru, tedy typicky 512 B. Viz funkce file_sync().
Tato cache má význam (a způsobí tedy zrychlení) jen při zápisu bloků menších než velikost sektoru (jinak se toto neuplatní).
Při zápis menších bloků (než velikost 1 sektoru - POZOR ale vždy v rámci 1 stejného sektoru) dochází k jejich cachování, a uložení je provedeno až při: (a) přechodu zápis na jiný sektor, (b) zavoláním file_sync(), (c) uzavřením souboru.
Pokud by se toto nedělalo, tak každý zápis, by vždy znamenal čtení, smazání a zápis celého sektoru. A to je nežádou opotřebení SD karty, kde se má zápis dělat ideálně po celých sektorech.
Dále je zde ještě další záležitost.
Pokud si soubor dopředu nenatáhnete (file_expand), tak při každém zápisu (který obsah dat, tj. velikost souboru, zvětšuje) dojde nejen k zápisu dat samotných, ale i k zápisu do FAT tabulky (pro každý nově přidaný sektor), tedy dvojnásobné zpoždění.
Zde se tedy významně ukazuje proč je lepší si soubor alokovat předem.
-
Na SD kartě nelze nikdy garantovat, že bude zápis do stejného fyzického sektoru v paměťovém chipu. To je starost kontroléru v SD kartě (wear-leveling), a prakticky každá si to řeší sama a jinak. Takže může dojít k různým zpožděním. Prakticky jediné zpoždění, které lze pocítit, je vždy mazání sektoru v paměťovém chipu SD karty. Čím více se zapisuje, a pak se má mazat (nebo zapisovat znovu na už zapsané místo), tím více to (postupem času) trvá.
Dále je zde otázka opakované alokace FAT sektorů. Z principu funkce SD karty ale tato otázka nemá význam. I kdyby se FAT opakovaně strefila do stejných sektorů, doba jejich zápisu/přepisu (čtení, smazání a pak zápis) bude trvat cca stejně.
Jediná optimalizace zde je, tak jak jsem psal výše, vyhnout se postupnému zápisu do FAT pomocí před-alokace FAT,
a vhodně pracovat s jednosektorovou cache.
-
Ověření, zda-li soubor existuje - např. pomocí file_open()
Výpis obsahu disku/složky - je připraveno ale ještě neuvolněno (specifické FC funkce), až to bude dotestováno tak s novým firmware to bude k dispozici.
Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !