Forum: Mikrocontroller und Digitale Elektronik CBW CBWTag USB SCSI Massdata Storage Prorokoll


von whitenoise (Gast)


Lesenswert?

Hallo,

ich habe eine Frage zum CBWTag Eintrag.

wie setzt er sich genau zusammen, ich habe hier zwar schon ein recht 
anschauliches Beispiel:

http://www.nxp.com/acrobat_download/usermanuals/d12_masssto_usb2ide_cf_guide.pdf

In diesem Fall stellt es ein SCSI Read command dar: 28 E8 31 FE.
Das Kürzel für SCSI Read ist hex 28, doch was bedeuten die anderen 3 
Bytes!?

Zu SCSI generell vielleicht noch eine Kleinigkeit, ich habe noch kein 
Kommando zum löschen gefunden (erase device) - gibt es das überhaupt!?

eine recht anschauliche Liste mit den gängigsten Befehlen habe ich bei 
microchip gefunden:

http://ww1.microchip.com/downloads/en/AppNotes/01169a.pdf

gruß,
w.

von whitenoise (Gast)


Lesenswert?

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

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.