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.