This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

USB device - SCSI commands not work

I write simple test programm (host mode, full speed) to work with USB stick.
In the begining this program do:
- get descriptor form USB stick (with numbers of IN and OUT end-points in the device),
- set this number of IN, OUT endpoints in the USB controller,
- set Address 1,
- set Configuration 1,
- set Interface 0.
It's works correct.
Than program send CBW with any SCSI command (inquory/read10/write10) and recive ACK.
But when it send IN (or OUT for write10 command) request, than device answer STALL.
Where is my mistake?
For only one USB stick (A-Data 2 Gb) my programm work correct - I can read or write sector from/to USB stick (I don't undestand why!).

Alex.

Parents
  • Your question may get a better answer on the forums at usb.org. But...

    Do you read the sense data after the stall? Is the stick write-only?

    There are a couple different subclasses a usb memory stick can have. Are you checking the subclass? All of the subclasses may support the same command, but there can be subtle differences in the formatting of the command. Last I checked, there were six subclasses. You'll likely only come across three of them, though: UFI, RBC, and SCSI transparent (which is a subset of RBC).

    Also, some devices have non-compliance issues and need special pampering. For example, I have a SanDisk 4Gb that needs an extra delay after the CSW and before the data stage. Also, most SanDisk's that I've used need a delay after the INQUIRY command, or they'll stall. We use a SuperTalent 2Gb that needs a delay before the data stage for the inquiry command only.

Reply
  • Your question may get a better answer on the forums at usb.org. But...

    Do you read the sense data after the stall? Is the stick write-only?

    There are a couple different subclasses a usb memory stick can have. Are you checking the subclass? All of the subclasses may support the same command, but there can be subtle differences in the formatting of the command. Last I checked, there were six subclasses. You'll likely only come across three of them, though: UFI, RBC, and SCSI transparent (which is a subset of RBC).

    Also, some devices have non-compliance issues and need special pampering. For example, I have a SanDisk 4Gb that needs an extra delay after the CSW and before the data stage. Also, most SanDisk's that I've used need a delay after the INQUIRY command, or they'll stall. We use a SuperTalent 2Gb that needs a delay before the data stage for the inquiry command only.

Children