Sida 1 av 1
Mystiska skrivtider för SD-kort?
Postat: 17 augusti 2006, 15:04:06
av oJsan
Finns det någon hjälte på detta forum som kan förklara detta för mig? Man bör nog har pysslat med minneskort på rätt låg nivå för att hänga med på vad jag menar... men man blir lätt låst i sina tankar och kanske är det någon som kommer på en ny "approach" för att lösa problemet.
Bakgrund:
Jag har skrivit drivrutiner för minneskortshantering (Secure Digital) och filhantering (FAT16/32). Dessa fungerar bra, men som vanligt går det att optimera på många ställen.
Problemet:
En sak har irriterat mig länge, nämligen skrivtiderna för SD-kortet.
Diagrammet nedan visar skrivtiden (ms) för 150 sektorer. Det är alltså den tid som jag efter skrivningen måste vänta innan jag kan skriva nästa sektor. Skrivmetoden är "blockwise", dvs 512B åt gången (CMD24).
Som man ser så tar den första skrivningen mycket kort tid och de flesta tar ca 2ms. Var 128:e skrivning tar dock längre tid, över 160ms. Var 30:e skrivning tar drygt 10ms att sluföra.
Spekulation:
Minneskort är ju baserade på NAND-teknik och förmodligen så finns det en "minsta skrivbara yta" internt i kortet. Dessvärre så ser diagrammet likadant ut om jag börjar skriva sektor 20 istället. Alltså: det är inte en specifik address på kortet som tar extra lång tid...
Edit: Just nu använder jag ett 512MB kort från Kingston, ska prova något annat när jag får tag på ett, och se om det blir någon skillnad.

Postat: 19 augusti 2006, 10:00:11
av oJsan
Som jag trodde.. ingen respons på denna udda fråga
Jag har köpt på mig några minneskort av varierande fabrikat och storlek nu. Ska testa dem och se om det är samma problem med dom också...
Postat: 19 augusti 2006, 12:47:34
av arvidb
Om jag har förstått hur flash-minnen funkar så är det nåt i stil med att (vid skrivning):
1) radera block (görs blockvis)
2) skriv ny data (kan göras en bit eller byte i taget)
Flash-minnen klarar ju ett begränsat antal skrivcykler, så man vill radera block så sällan som möjligt, och dessutom fördela skrivningar/raderingar jämnt över hela minnet.
Kanske är det så att kortet buffrar dina skrivningar och sedan gör en radering/skrivning i ett svep med jämna mellanrum?
Arvid
Postat: 19 augusti 2006, 12:55:28
av Icecap
Jag skulle tro att det just har med radering av sektorer att göra.
128 skrivningar av blockar om 512 bytes (antar jag, du skrivar inget om det) ger just 64Kb-gräns (med 256 bytes blockar blir det 32Kb, också "magisk" gräns).
Jag kunne tro att det har med att det interna FAT-system ska räknas rätt så att den behöver intern process-tid.
Denna interna tid borde vara beroende på fabrikat men kanske inte variera sådär jättemycket.
Sen är jag för egen räkning nyfiken om du har en bra länk/beskrivning av hur man pratar med SD-kort, jag har lite tankar med statistik-insamling och ett FAT-system....
Postat: 19 augusti 2006, 20:21:56
av exile
FAT File System Module kanse kan vara intresant?
Postat: 19 augusti 2006, 20:46:07
av Icecap
exile: du är en kompis du!

Nu har jag rikligt till att vara sömnlös i natt...
Sen står det en del om varför skrivtiden kan vara lång.....
Postat: 19 augusti 2006, 23:09:19
av oJsan
Snuck... har letat bra sidor om SD/MMC/FAT i ett halvår men sidan som exile tipsade om har jag aldrig sett skymten av. Varför är livet så orättvist ibland. Specifikationerna har jag klart för mig, men resonemanget kring skrivtider och optimering var läsvärt!
När det gäller FAT så microsofts "fatgen103.doc" det enda rätta. När man ska ha en spec. för SD/MMC är det dock svårare eftersom den inte är öppen. Som tur är så har någon ändå lagt ut en spec för SD, jag hittade den rätt så nyligt... hade behövt den mycket tidigare i år. Filen heter ProdManualSDCardv1.9.pdf och finns i någon vrå på nätet.. IceCap: hittar du den inte så kan jag maila den.
När det gäller skrivtidsproblemet så misstänker även jag att det har med blockerase att göra. Vad som dock gör mig förbryllad är att om jag börjar skriva till kortet låt säga 10 sektorer senare så kommer ändå den långa fördröjningen enligt diagrammet nedan. OM felet beror på fysiska block-boundaries så borde ju den långa skrivfördröjningen ha flyttat sig från att vara på min 128:e skrivning till att vara på min 118:e skrivning?!
Postat: 20 augusti 2006, 00:06:10
av Icecap
Njaa......
Om den kör ring-buffer med start-pointer för att fylla sektorer helt kommer det att bli så ändå.
När du skrivar "sektorer" menar du ju FAT-sektorer, inte hårdvara-sektorer, hur just de sparas kan du inte veta pga. FAT-systemet och den interna styrning.
Postat: 20 augusti 2006, 11:50:31
av oJsan
Jag vet vad en ringbuffer är men jag förstår inte riktigt vad du menar ändå... Jag trodde att ett "eraseblock" var fysiskt bundet till en och samma fysiska område på kortet, men som du beskriver så måste det betyda att det INTE är så alltså? Min teeori var nämligen att långa skrivtider borde uppstå vid samma fysiska ställe varje gång, dvs vid eraseblock-gränserna.
..hur just de sparas kan du inte veta pga. FAT-systemet och den interna styrning.
Vad avser du när du skriver FAT-systemet. Rakt översatt borde det bli FilAllokeringsTabellSystemet, och det är ju inget som KORTET behöver bry sig de minsta om! Som jag har har förstått det så har inte heller minneskorten någon inbyggd funktion för "jämt slitage", utan det är filsystemets uppgift.