Forum: Mikrocontroller und Digitale Elektronik Problem mit USB MSD / UFI cmd


von Thomas Z. (usbman)


Lesenswert?

Ich versuche mich gerade an einem USB MSDevice auf Basis eines SPI 
Flashs.Das funktioniert auch schon, kommt durch die ENUM, zeigt im 
GeräteManager ein (USB)Laufwerk an, und ich bekomme unter W10 den 
Formatier Dialog, da ich beim UFI READ(10) glöschte Blocks (alles 0xFF) 
zurückgebe. Ich reporte im Moment 16 Mbyte und eine Blocksize von 4k da 
mein SPI Flash 4k pages beim löschen hat. Ein Flash File System habe ich 
(noch) nicht eingebaut.
Das Endziel ist ein universeller MSD ClassCode in c bei dem man 
lediglich noch EndPoints, Speichergröße, und Blockgröße einstellen muss.

Nun zum Problem:
Im Formatier Dialog bekomme ich 8kb Blocksize bei 16MB bzw 16Kb 
Blocksize bei 32MB voreingestellt. Ich kann da auch nicht meine 4kb 
auswählen. Mein Verdacht ist, dass dies daran liegt weil READ FORMAT 
CAPACITIES (UFI 0x23) momentan nicht unterstützt wird. Das war auch im 
Beispiel Code den ich als Basis benutzt habe so. Windows macht diesen 
Request ein paar mal mit unterschiedliche Parametern. Ich hab dazu 
natürlich in der UFI spec gelesen, verstehe aber nicht wie diese 
Deskriptoren auszusehen haben bzw welche Deskriptoren da zurückgegeben 
werden sollen.

Folgendes hab ich schon probiert:
1
uint8_t ReadFormatCapData [] =
2
{
3
    0x00,                          // reserved
4
    0x00,
5
    0x00,
6
    0x08,                          // 8 bytes follow
7
    (DISK_SEC_LAST >> 24) & 0xFF,  // number of blocks
8
    (DISK_SEC_LAST >> 16) & 0xFF,  // 4095 for 16MB
9
    (DISK_SEC_LAST >>  8) & 0xFF, 
10
    (DISK_SEC_LAST >>  0) & 0xFF,
11
    0x02,                          // code: Formatted Media
12
    (DISK_SEC_LEN  >> 16) & 0xFF,  // 4k blocksize
13
    (DISK_SEC_LEN  >>  8) & 0xFF, 
14
    (DISK_SEC_LEN  >>  0) & 0xFF
15
};
Kennt sich jemand damit aus?

Jan Axelsons Bücher, die ich ansonsten sehr schätze, sind diese mal 
leider auch nicht sonderlich hilfreich genau zu diesem Kapitel schreibt 
sie fast nichts.

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.