Hi,

I recently bought the above device (07c4/a400/113).
It is a CompactFlash + Microdrive Reader.
Seems to be so new that it is in no hardware darta base yet.

Couldn't get it to work on Linux first
(nor with bulk transport nor with datafab transport).

After some playing with usb-robot and usb-snoopy,
I found the problem: the INQUIRY command passed
to the device (with bulk transport) requests 255 bytes
of information. This causes the device to go crazy, because
it has only 36 bytes to deliver, and I get only timeouts after that.

By changing the transfer length of the INQUIRY command to the
minimum value 36, I got all my problems solved.

I just put

   if (srb->cmnd[0] == INQUIRY)
        srb->cmnd[4] = 36;

at the head of usb_stor_transparent_scsi_command().

Of course that is the Wrong Thing (TM) in general.

But it might be worthwile to consider requesting 36 bytes only in the
first place, and then examine the "Additional Length" field in the data
returned to see if it is >32. If yes, the INQUIRY could be repeated
with a larger transfer length.

If desired, I can try to write a reasonable patch for that.

Martin

PS: I haven't analyzed what goes wrong with the datafab transport
    protocol, but it was more or less disastrous. The INQUIRY went fine,
    but any attempt to load sd_mod resulted in kernel OOPSes.

    Anyway if Bulk works, no need to use datafab-specific transport,
    right?

PS2:�During my testing with USB-Snoopy, I saw that the Win2k driver
     (native) sends SCSI command 0x23 to the device (unsuccessfully,
     the device signals ILLEGAL REQUEST).
     What command is that? I found it in no command reference.

-- 
Martin Wilck <[EMAIL PROTECTED]>
Physicist & Linux system engineer at FSC <[EMAIL PROTECTED]>



_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to