hi,
die frage zu tag hat sich mittlerweile beantwortet, es wird vom os
ausgefüllt und ist wirklich nur die kennung für den befehl.
der eigentliche scsi befehl im usb datanstrom ist dann doch nur ein byte
groß.
ich habe hier noch ein wirklich gutes dokument dazu gefunden, hier ist
es sehr schön farblich hinterlegt.
http://mcu.emea.fujitsu.com/document/appnotes/Public/16Bit/mcu-an-300243-e-16fx_usb_host_mass_storage/mcu-an-300243-e-v10-16fx_usb_host_mass_storage.pdf
zum thema scsi erase command habe ich noch dieses listing gefunden:
http://en.wikipedia.org/wiki/SCSI_command
Mittlerseile kann ich mit meinem modifizierten cypress treiber den es
als kit zum cy7c68001 dazu gab (die api ist dort sehr schön), über eine
selbstgebastelte emulierung des command block wrappers alle art
informationen auslesen, momentan habe ich gerade den mbr des sticks
ausgelesen - schonmal klasse, das klappt.
letztendlich hilft auch ein usb sniffer ungemein, hier habe ich usbsnoop
verwendet, leider sind die ausgaben nur in einer textdatei und die
interpretation kostet ein wenig nerven, aber es ist besser als nichts...
dennoch stellt windows eine ganze menge anfragen an so ein usb device,
teilweise doppelt und teilweise zyklisch...
momentan hänge ich an einer stelle mit dem usb sniffer tool fest, dort
gibt es gewisse transfer flags, deren bedeutung mir noch nicht ganz klar
ist. hier mal ein ausschnitt vom auslesen des mbr:
-- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
PipeHandle = 84ed9fdc [endpoint 0x00000002]
TransferFlags = 00000000 (USBD_TRANSFER_DIRECTION_OUT,
~USBD_SHORT_TRANSFER_OK)
TransferBufferLength = 0000001f
TransferBuffer = 8475db48
TransferBufferMDL = 00000000
00000000: 55 53 42 43 08 40 02 85 00 02 00 00 80 00 0a 28
00000010: 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00
UrbLink = 00000000
[405 ms] UsbSnoop - MyInternalIOCTLCompletion(f78fddb0) : fido=85073480,
Irp=85024008, Context=850e8808, IRQL=2
[405 ms] <<< URB 27 coming back <<<
-- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
PipeHandle = 84ed9fdc [endpoint 0x00000002]
TransferFlags = 00000000 (USBD_TRANSFER_DIRECTION_OUT,
~USBD_SHORT_TRANSFER_OK)
TransferBufferLength = 0000001f
TransferBuffer = 8475db48
TransferBufferMDL = 84e7e8d0
UrbLink = 00000000
[405 ms] UsbSnoop - DispatchAny(f78fc610) :
IRP_MJ_INTERNAL_DEVICE_CONTROL
[405 ms] UsbSnoop - MyDispatchInternalIOCTL(f78fde80) : fdo=84e7d188,
Irp=85024008, IRQL=2
[405 ms] >>> URB 28 going down >>>
-- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
PipeHandle = 84ed9fbc [endpoint 0x00000081]
TransferFlags = 00000002 (USBD_TRANSFER_DIRECTION_OUT,
USBD_SHORT_TRANSFER_OK)
TransferBufferLength = 00000200
TransferBuffer = 00000000
TransferBufferMDL = 84f12538
00000000: 00 b0 9d 84 a0 c4 55 80 00 00 00 00 03 00 00 00
00000010: 00 80 41 84 00 00 00 00 28 00 00 00 f0 0b 00 00
00000020: e8 0f 00 00 00 00 00 00 e8 02 00 00 7e 00 73 02
00000030: 00 00 45 00 00 00 00 00 00 00 00 00 00 00 00 00
00000040: 2d 55 01 00 00 00 b3 02 90 00 80 00 00 00 00 00
00000050: 72 02 00 00 00 00 73 02 82 97 9a 93 97 e1 c8 01
00000060: 82 97 9a 93 97 e1 c8 01 82 97 9a 93 97 e1 c8 01
00000070: 82 97 9a 93 97 e1 c8 01 00 2a 00 00 00 00 00 00
00000080: dc 29 00 00 00 00 00 00 20 20 00 00 00 00 00 00
00000090: 1f 01 53 00 4d 00 53 00 5f 00 53 00 4e 00 49 00
000000a0: 46 00 46 00 5f 00 53 00 54 00 55 00 46 00 46 00
000000b0: 2e 00 45 00 58 00 45 00 2d 00 31 00 43 00 38 00
000000c0: 46 00 35 00 36 00 42 00 32 00 2e 00 70 00 66 00
000000d0: 2d 55 01 00 00 00 b3 02 68 00 58 00 00 00 00 00
000000e0: 72 02 00 00 00 00 73 02 82 97 9a 93 97 e1 c8 01
000000f0: 82 97 9a 93 97 e1 c8 01 82 97 9a 93 97 e1 c8 01
00000100: 82 97 9a 93 97 e1 c8 01 00 2a 00 00 00 00 00 00
00000110: dc 29 00 00 00 00 00 00 20 20 00 00 00 00 00 00
00000120: 0b 02 53 00 4d 00 53 00 5f 00 53 00 4e 00 7e 00
00000130: 31 00 2e 00 50 00 46 00 dc bc 00 00 00 00 5c 00
00000140: 80 00 6c 00 00 00 00 00 72 02 00 00 00 00 73 02
00000150: 49 d4 63 8e 8c e5 c8 01 49 d4 63 8e 8c e5 c8 01
00000160: 49 d4 63 8e 8c e5 c8 01 49 d4 63 8e 8c e5 c8 01
00000170: 00 e6 00 00 00 00 00 00 0a e4 00 00 00 00 00 00
00000180: 20 20 00 00 00 00 00 00 15 01 53 00 4e 00 49 00
00000190: 46 00 46 00 2e 00 45 00 58 00 45 00 2d 00 33 00
000001a0: 31 00 46 00 45 00 42 00 37 00 44 00 30 00 2e 00
000001b0: 70 00 66 00 70 00 66 00 f9 bc 00 00 00 00 c5 00
000001c0: 90 00 7a 00 00 00 00 00 72 02 00 00 00 00 73 02
000001d0: 25 1a 2c 8f 8c e5 c8 01 25 1a 2c 8f 8c e5 c8 01
000001e0: 25 1a 2c 8f 8c e5 c8 01 25 1a 2c 8f 8c e5 c8 01
000001f0: 00 9e 00 00 00 00 00 00 bc 9d 00 00 00 00 e8 02
UrbLink = 00000000
[405 ms] UsbSnoop - MyInternalIOCTLCompletion(f78fddb0) : fido=85073480,
Irp=85024008, Context=84fa9300, IRQL=2
[405 ms] <<< URB 28 coming back <<<
-- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
PipeHandle = 84ed9fbc [endpoint 0x00000081]
TransferFlags = 00000003 (USBD_TRANSFER_DIRECTION_IN,
USBD_SHORT_TRANSFER_OK)
TransferBufferLength = 00000200
TransferBuffer = 00000000
TransferBufferMDL = 84f12538
00000000: fc 31 c0 8e d0 31 e4 8e d8 8e c0 be 00 7c bf 00
00000010: 06 b9 00 01 f3 a5 be ee 07 b0 08 ea 20 06 00 00
00000020: 80 3e b3 07 ff 75 04 88 16 b3 07 80 3c 00 74 04
00000030: 08 06 af 07 83 ee 10 d0 e8 73 f0 90 90 90 90 90
00000040: 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
00000050: 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
00000060: 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
00000070: 90 90 90 90 90 90 90 90 90 90 90 90 90 90 be be
00000080: 07 b0 00 b9 04 00 80 3c 00 75 6e fe c0 83 c6 10
00000090: e2 f4 31 db b4 0e be 9d 07 8a 0e af 07 ac d0 e9
000000a0: 73 02 cd 10 08 c9 75 f5 b0 3a cd 10 31 c0 cd 16
000000b0: 3c 00 74 f8 be 8b 07 b9 02 00 e8 ba 00 3c 0d 74
000000c0: b4 3c 61 72 06 3c 7a 77 02 2c 20 88 c3 be 9d 07
000000d0: 8a 0e af 07 ac d0 e9 73 04 38 c3 74 06 08 c9 75
000000e0: f3 eb af b8 0d 0e 31 db cd 10 8d 84 62 00 3c 07
000000f0: 75 07 b0 1f a2 af 07 eb 99 31 d2 b9 01 00 3c 04
00000100: 74 11 73 f3 30 e4 b1 04 d2 e0 be be 07 01 c6 8a
00000110: 16 b3 07 bf 05 00 56 f6 c2 80 74 31 b4 41 bb aa
00000120: 55 52 cd 13 5a 5e 56 72 1e 81 fb 55 aa 75 18 f6
00000130: c1 01 74 13 8b 44 08 8b 5c 0a be 8d 07 89 44 08
00000140: 89 5c 0a b4 42 eb 0c 8a 74 01 8b 4c 02 b8 01 02
00000150: bb 00 7c 50 c6 06 8f 07 01 cd 13 58 5e 73 05 4f
00000160: 75 b4 eb 93 81 3e fe 7d 55 aa 75 f6 ea 00 7c 00
00000170: 00 be 83 07 b9 0a 00 50 b4 0e 31 db ac cd 10 e2
00000180: fb 58 c3 54 65 73 74 44 69 73 6b 0d 0a 10 00 01
00000190: 00 00 7c 00 00 00 00 00 00 00 00 00 00 31 32 33
000001a0: 34 46 00 00 41 4e 44 54 6d 62 72 00 02 02 02 1f
000001b0: c7 00 00 80 00 00 00 00 00 00 00 00 a5 01 00 01
000001c0: 01 00 0b fe 3f 3d 3f 00 00 00 7f 32 0f 00 00 00
000001d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
000001e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
000001f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa
UrbLink = 00000000
[405 ms] UsbSnoop - DispatchAny(f78fc610) :
IRP_MJ_INTERNAL_DEVICE_CONTROL
[405 ms] UsbSnoop - MyDispatchInternalIOCTL(f78fde80) : fdo=84e7d188,
Irp=85024008, IRQL=2
[405 ms] >>> URB 29 going down >>>
-- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
PipeHandle = 84ed9fbc [endpoint 0x00000081]
TransferFlags = 00000002 (USBD_TRANSFER_DIRECTION_OUT,
USBD_SHORT_TRANSFER_OK)
TransferBufferLength = 00000200
TransferBuffer = 8475db48
TransferBufferMDL = 00000000
00000000: 55 53 42 43 08 40 02 85 00 02 00 00 80 00 0a 28
00000010: 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00
00000020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
000000a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
000000b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
000000c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
000000d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
000000e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
000000f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000100: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000110: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000120: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000130: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000140: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000150: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000160: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000170: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000180: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000190: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
000001a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
000001b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
000001c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
000001d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
000001e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
000001f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
UrbLink = 00000000
[406 ms] UsbSnoop - MyInternalIOCTLCompletion(f78fddb0) : fido=85073480,
Irp=85024008, Context=84ec70f0, IRQL=2
[406 ms] <<< URB 29 coming back <<<
-- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
PipeHandle = 84ed9fbc [endpoint 0x00000081]
TransferFlags = 00000003 (USBD_TRANSFER_DIRECTION_IN,
USBD_SHORT_TRANSFER_OK)
TransferBufferLength = 0000000d
TransferBuffer = 8475db48
TransferBufferMDL = 84e7e8d0
00000000: 55 53 42 53 08 40 02 85 00 00 00 00 00
UrbLink = 00000000
der zweite große datenblock entspricht dem mbr des sticks, der erste
datenblock ist nicht auf dem stick, dennoch kommen sie auf dem endpoint
81 welcher eindeutig ein IN endpoint ist, in den flags die usbsnoop
darstellt ist hierfür eine 2 eingetragen (OUT), beim mbr eine 3 (IN) -
was mag dies bedeuten!?
ich aus meiner anwendungssicht sehe den ersten block garnicht.
vielleicht kennt jemand von euch das tool usbsnoop!?
gruß,
whitenoise