Linux Kernel 2.4.x Driver for
CARRY USB Card Readers
Be warned: use this at your own risk !
[ last update: 2002-03-15 ]
Supported drives:
- UISA2 / UISA6 / UISC3
- UISDA / UISDC
- UISMA / UISMC
Supported slots:
- CF (Read / Write)
- SM (Read only)
- SD/MMC (Read / Write)
- MS (Read / Write) - slow: 300-340K
Currently missing / todo's:
- SSFDC (SM) Write
- Speedup SSFDC Mapping table build on mount / media change
- MS WP Check
- SD/MMC WP Check
- Test with OHCI / EHCI Controllers
- Make this work with uhci (currently only well tested with usb-uhci)
Especially some descent way of BULK URB queueing to the different endpoints...
- More intelligent way to handle SSFDC Cards with bad sector mappings ?
- Make the /proc/carry interface multiple-device capable.
HOWTO
- First make sure you have the original carry drivers running under some
Win32 plattform first: www.carry.com.tw.
This driver will NOT work with OEM Firmwares (e.g. PQI Drivers) - they may
be totally different.
- Copy the installed Win32 drivers from %SystemRoot%\System32\Driver or
wherever
to your Linux box (eg. to /usr/src/linux-2.4.XX/drivers/usr/storage).
The drivers are normally named "uiXXX.sys" / "XXXusb.sys"
or similar (XXX = your device model).
NEW: as carry has changed their drivers, see the download section for "older
versions".
- Grab the patch and apply it to some recent kernel.
cd /usr/src/linux-2.4.xx
wget http://www.dauskardt.de/carry_2001-11-27_fwfree.diff.gz
gunzip carry_2001-11-27.fwfree.diff.gz (or maybe don't incase apache's
already done this)
[Maybe try patch --dry-run -p1 <carry_2001-11-27.fwfree.diff first]
patch -p1 <carry_2001-11-27.fwfree.diff
- Run paul's carry_make_firmware.pl script over these .dll's (.sys's). You should now have
carry_firmwares.h file.
cd drivers/usr/storage first.
- Check the resulting file "carry_firmware.h". It must contain at
least one 'loader' and one firmware for your device.
- make menuconfig.
Make sure you have:
SCSI (and "probe multiple luns"), SCSI-DISK,
all the USB
stuff, USB-STORAGE, CARRY, Generic SSFDC, and the appropriate firmwares,
- unplug, rmmod usb-storage, make bzImage / modules / whatever.
- make modules_install
- insmod your new usb-storage or configure your hotplug / usbmgr
- plug in your reader
- enjoy your new /edv/sdX1 nodes.
Notes:
- Watch out for odd device numbers (i.e. 0x07cc / 0x0005) - you've probably
got the wrong firmware !
Downloads
Thanks to
- Carry for the good support
- Paul Wagland for great firmware work
- Daniel Ceregatti for getting us to make this driver 'useable' ;-)
- Remco Treffkorn for the endian-patch
What things should/could look like (here a uismc):
root@ice:~ > cat /proc/bus/usb/devices
...
T: Bus=01 Lev=02 Prnt=02 Port=03 Cnt=01 Dev#= 6 Spd=12 MxCh= 0
D: Ver= 1.00 Cls=ff(vend.) Sub=ff Prot=ff MxPS=64 #Cfgs= 1
P: Vendor=07cc ProdID=0010 Rev= 0.01
C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=100mA
I: If#= 0 Alt= 0 #EPs= 0 Cls=ff(vend.) Sub=ff Prot=ff Driver=usb-storage
I: If#= 0 Alt= 1 #EPs=13 Cls=ff(vend.) Sub=ff Prot=ff Driver=usb-storage
E: Ad=81(I) Atr=03(Int.) MxPS= 16 Ivl= 10ms
E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl= 0ms
E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl= 0ms
E: Ad=84(I) Atr=02(Bulk) MxPS= 64 Ivl= 0ms
E: Ad=04(O) Atr=02(Bulk) MxPS= 64 Ivl= 0ms
E: Ad=86(I) Atr=02(Bulk) MxPS= 64 Ivl= 0ms
E: Ad=06(O) Atr=02(Bulk) MxPS= 64 Ivl= 0ms
E: Ad=88(I) Atr=01(Isoc) MxPS= 16 Ivl= 1ms
E: Ad=08(O) Atr=01(Isoc) MxPS= 16 Ivl= 1ms
E: Ad=89(I) Atr=01(Isoc) MxPS= 16 Ivl= 1ms
E: Ad=09(O) Atr=01(Isoc) MxPS= 16 Ivl= 1ms
E: Ad=8a(I) Atr=01(Isoc) MxPS= 16 Ivl= 1ms
E: Ad=0a(O) Atr=01(Isoc) MxPS= 16 Ivl= 1ms
I: If#= 0 Alt= 2 #EPs=13 Cls=ff(vend.) Sub=ff Prot=ff Driver=usb-storage
E: Ad=81(I) Atr=03(Int.) MxPS= 64 Ivl= 10ms
E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl= 0ms
E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl= 0ms
E: Ad=84(I) Atr=02(Bulk) MxPS= 64 Ivl= 0ms
E: Ad=04(O) Atr=02(Bulk) MxPS= 64 Ivl= 0ms
E: Ad=86(I) Atr=02(Bulk) MxPS= 64 Ivl= 0ms
E: Ad=06(O) Atr=02(Bulk) MxPS= 64 Ivl= 0ms
E: Ad=88(I) Atr=01(Isoc) MxPS= 256 Ivl= 1ms
E: Ad=08(O) Atr=01(Isoc) MxPS= 256 Ivl= 1ms
E: Ad=89(I) Atr=01(Isoc) MxPS= 16 Ivl= 1ms
E: Ad=09(O) Atr=01(Isoc) MxPS= 16 Ivl= 1ms
E: Ad=8a(I) Atr=01(Isoc) MxPS= 16 Ivl= 1ms
E: Ad=0a(O) Atr=01(Isoc) MxPS= 16 Ivl= 1ms
root@ice:/home/sda > lsmod
Module Size Used by
usb-storage 139776 0 (unused)
usb-uhci 21888 0 (unused)
usbcore 49376 1 [usb-storage usb-uhci]
root@ice:~ > cat /proc/scsi/scsi
Attached devices:
...
Host: scsi1 Channel: 00 Id: 00 Lun: 00
Vendor: Carry Model: UISMA Rev: 0001
Type: Direct-Access ANSI SCSI revision: 02
Host: scsi1 Channel: 00 Id: 00 Lun: 01
Vendor: Carry Model: UISMA Rev: 0001
Type: Direct-Access ANSI SCSI revision: 02
Host: scsi1 Channel: 00 Id: 00 Lun: 02
Vendor: Carry Model: UISMA Rev: 0001
Type: Direct-Access ANSI SCSI revision: 02
root@ice:/home/sda > cat /proc/scsi/usb-storage-0/1
Host scsi1: usb-storage
Vendor: Carry
Product: UISMA
Serial Number: None
Protocol: Transparent SCSI
Transport: Carry Control/Bulk
GUID: 07cc00100000000000000000
Attached: Yes