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.