I initially contacted SanDisk in regards to their USB Imagemate I, which is based on a chipset from Shuttle Technologies. In response to my original inquiry, they asked me to sign an NDA so that we could discuss an unreleased product. That product turned out to be the USB Imagemate II, and now that the product has been formally released, I can publish my work with the device.
The device utilizes a Bulk Only transport and uses the Transparent SCSI protocol. As such, these are the sections of code that I've worked on the most.
Currently, the driver works pretty well. Not perfectly, but pretty well. Unfortunately, the driver suffers from some design problems that I inherited when I took over development of the driver. This means that the driver doesn't handle the exceptional cases very well. The exceptional cases include removing the device while it's in use (either removing the CF card or unplugging the USB device), using a bad CF card, or any other non-normal operating condition.
The device I have is a late-model prototype. It has the final (or near final) plastics, and has been flash-upgraded to the release firmware. The serial number for this device is 3.
|Reads||Works pretty well, with both mtools and mounting as a filesystem|
|Writes||Also works pretty well, with both mtools and mounting as a filesystem|
|Error Handling||Downright poor. This is the area that needs the most work|
The first step for using this driver is to compile it for use. This will involve getting a kernel source tree from your favorite FTP site, and then enabling USB support. You'll also have to enable USB SCSI support (tho the name is likely to change in the near future -- USB SCSI is somewhat misleading).
Right now, the only supported configuration is for the driver to be compiled as a module. Later, compilation directly into the kernel will be supported.
Once the new kernel is configured, compiled, and installed, use modprobe to install the usbcore module, the apropriate host-controller module, and the usb-scsi driver. At this point, the system will probe to discover the device. You may see a variety of kernel messages go by on your screen as the system probes. The device will be assigned a /dev/sd[a-z] name, depending on what other devices are attached to your system.
Now, you're ready to use the device. You can use the mount command to mount the device (partition 1, as in /dev/sda1), or use mtools to access that partition. Most CF cards come formatted with a FAT16 filesystem (i.e. msdos), but that partition can be manipulated just like any other storage device. Remember to unmount the device before removing the card or the usb device.
I would like to thank Farshid Sabet and Robert Chang for all their help and support. Throughout this effort, they have made every effort to provide whatever hardware and information I needed for my development efforts.