Main page

ISD-200 driver for linux

The ISD-200 is an ASIC designed by In-System Design Inc. that acts as a USB to ATA bridge and which is used in many USB mass storage devices. The vendor/product code for the ISD-200 chip is 05ab/0031.

The driver for this chip was originally contributed by In-Systems and has been modified and debugged by me. I test it using the Archos Jukebox 6000, a combined MP3 player and portable USB harddisk. (See my dissection of the Archos here.)

Other products I've heard are using the ISD-200 chip are:

Note: The In-System USS-725 chip (05ab/0200), used in some older usb storage products, is a very different chip and is not handled by this driver. See this page for info about the USS-725 driver.

Note 2: The In-System ISD-300 chip (05ab/0060) is a fully USB Mass Storage compliant chip, and therefore does not require a special driver. Just plug it in. If you want to take advantage of its' USB2.0 functionality (and you have a USB2.0 controller), you need to add USB2.0 support to your kernel. Otherwise it works just fine in USB1.1 mode too.

Status

This driver is part of the official linux kernel as of version 2.4.8.

Building

Linux 2.4.10+

Linux 2.4.8 - 2.4.9

While the driver code was merged into the 2.4.8 kernel, due to an oversight the Config.in entry (that makes the driver selectable in the config menus) didn't appear until 2.4.10.

If you want to use the code in 2.4.8 or 2.4.9, you need to replace the linux/drivers/usb/Config.in file with this one. After that, configure and build your kernel according to the 2.4.10 instructions.

Linux 2.4.5 - 2.4.7

Note: There is really no reason to run a kernel this old. Lots of bugs have been fixes. Upgrade!

If you are skilled and feel like patching you kernel, you can use this driver in earlier versions than 2.4.8, but no earlier than 2.4.5. Versions before that have bugs in the usb layer that prevents the driver from working properly.

If you want to run an earlier kernel than 2.4.8, then you need to do this:

Log contents

Your log should show something like this (edited):

<6>Initializing USB Mass Storage driver...
<6>usb.c: registered new driver usb-storage
<6>USB Mass Storage support registered.
<6>Manufacturer: In-System Design
<6>Product: USB Storage Adapter
<6>SerialNumber: 842C72F18502876E
<6>scsi1 : SCSI emulation for USB Mass Storage devices
<4>  Vendor: FUJITSU   Model: MHM2200AT         Rev: 3822
<4>  Type:   Direct-Access                      ANSI SCSI revision: 02
<4>Detected scsi disk sda at scsi1, channel 0, id 0, lun 0
<4>SCSI device sda: 39070080 512-byte hdwr sectors (20004 MB)

Mounting the device

Looking at the last line of the above log excerpt, you will see a device name. In this case it's "sda", which means "SCSI disk A" (A meaning "the first"). If you have other SCSI devices in your system the log will say sdb or sdc etc.

Now you don't actually mount a disk, you mount a partition. So you'll need to tack on a partition number to the end of the device name. More often than not, the partition you want is the first, number 1. So, the mount line looks something like:

# mount /dev/sda1 /mnt/usbdisk

...which of course implies you've created a directory called /mnt/usbdisk first.

Problems

2003-04-23: Long delay on first write after mounting a FAT partition

This is really a problem in the linux fat driver, not isd200. The fat driver starts looking for free clusters at the beginning of the partition, instead of using the hint that is available in the file system. This can cause a delay of several minutes for the first write after mount.

I have produced a kernel patch to change this behaviour. This patch cuts the first-write delay down to less than a second.

Use this patch for kernel version 2.4.20 or thereabout. The fat code hasn't changed much in a long time, so the patch can probably be used for most 2.4 kernels.

Use this patch for kernel version 2.5.68 or thereabout. Same thing here, since the fat driver is rarely modified the patch can probably be applied to other versions too.

I have submitted these patches to the linux-kernel mailing list for consideration into the mainline kernel. Time will tell when/if it is accepted.

2002-09-19: Incompatible with preempt and/or lock break patch

The isd200 driver appears to not be compatible with the preempt or lock break kernel patches. I am not sure what the exact problem is, but people report spurious system lockups when using isd200 with those patches.

If you find others bugs, or have questions, mail me.

/proc/bus/usb/devices entry

T:  Bus=01 Lev=02 Prnt=02 Port=03 Cnt=01 Dev#=  9 Spd=12  MxCh= 0
D:  Ver= 1.10 Cls=ff(vend.) Sub=00 Prot=ff MxPS=64 #Cfgs=  1
P:  Vendor=05ab ProdID=0031 Rev= 1.00
S:  Manufacturer=In-System Design
S:  Product=USB Storage Adapter
S:  SerialNumber=842C72F18502876E
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr= 98mA
I:  If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=ff Driver=usb-storage
E:  Ad=01(O) Atr=02(Bulk) MxPS=  64 Ivl=  0ms
E:  Ad=82(I) Atr=02(Bulk) MxPS=  64 Ivl=  0ms
E:  Ad=83(I) Atr=03(Int.) MxPS=   2 Ivl= 32ms

Page was last modified "Apr 23 2003" Björn Stenberg
aaa