[M.D.L. 今機器] ImageMate SDDR-12

<Home> → <M.D.L.> → <今、そこにある機器、、、かも> → <[M.D.L. 今機器] ImageMate SDDR-12>

ImageMate SDDR-12

ImageMate SDDR-12 は MMC 専用のカードリーダーです。結構、昔に出荷されていたデバイスだけに興味深い動作をします。調査し終わって初めて買って良かったと思ったり =)。

Mass Storage Class については <[USB]: USB Mass Storage Class> をどうぞ。

xawtv でキャプチャした SDDR-12


USB Device Information

Summery

Class だけ見ると Vendor Specific Class ですが、どうも Mass Storage Class (CB) として動作しているようです。ホントは Storage Class をサポートしているにも係わらず Vendor Specific Class として応答するというのは古い USB リーダーにありがちな実装らしいようです。Windows XP の .inf ファイルや Linux Kernel の Header ファイルを見ると微笑ましいです。

皆、動作するか疑心暗鬼だったんですね =)。

Vendor ID / Product ID 0x0781(SanDisk Corp.) / 0x0100
Manufacture string "SanDisk"
Product string "USB MultiMediaCard"
Power 100mA (Bus Powered)
Class / SubClass / Protocol 0xFF (Vendor Specific Class) / 0x0 / 0x0
Endpipe (total=3) 0x01 (Bulk-OUT), 64bytes
0x82 (Bulk-IN), 64bytes
0x83 (Interrupt-IN), 64bytes

lsusb -v

cat /proc/bus/usb/devices

T:  Bus=01 Lev=02 Prnt=02 Port=01 Cnt=01 Dev#=  3 Spd=12  MxCh= 0
D:  Ver= 1.00 Cls=ff(vend.) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=0781 ProdID=0100 Rev= 1.00
S:  Manufacturer=SanDisk
S:  Product=USB MultiMediaCard
C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=100mA
I:  If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 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=  64 Ivl=255ms

Plug-in 時の dmesg

scsi2 : SCSI emulation for USB Mass Storage devices
  Vendor:           Model:                   Rev:
  Type:   Direct-Access                      ANSI SCSI revision: 02
Attached scsi removable disk sda at scsi2, channel 0, id 0, lun 0
SCSI device sda: 31360 512-byte hdwr sectors (16 MB)
usb-uhci.c: interrupt, status 2, frame# 1150
sda: test WP failed, assume Write Enabled
 sda: sda1
WARNING: USB Mass Storage data integrity not assured
USB Mass Storage device found at 3
scsi singledevice 2 0 0 1
scsi singledevice 2 0 0 2
scsi singledevice 2 0 0 3
scsi singledevice 2 0 0 4
scsi singledevice 2 0 0 5
scsi singledevice 2 0 0 6
usb-uhci.c: interrupt, status 3, frame# 1142

cat /proc/scsi/scsi

Host: scsi2 Channel: 00 Id: 00 Lun: 00
  Vendor: eUSB     Model: MultiMediaCard   Rev:
  Type:   Direct-Access                    ANSI SCSI revision: 02

動作状況

Knoppix 3.3

SCSI デバイスとして認識出来ました。Vendor Specific Class にも係わらず Storage Class として認識出来る原因を調査してみた所、どうやら「./linux/drivers/usb/storage/unusual_devs.h」に秘密があるようです。

このファイルに登録されると USB デバイスが返却する Class ではなく、登録された Class として動作するようです。以下は Linux Kernel 2.6.6 の引用です。Kernel 2.4 base でも動作しています。

UNUSUAL_DEV( 0x0781, 0x0100, 0x0100, 0x0100,
        "Sandisk",
        "ImageMate SDDR-12",
        US_SC_SCSI, US_PR_CB, NULL,
        US_FL_SINGLE_LUN ),

Windows 2000

Plug-in しても Storage として認識されませんでした。Windows 2000 では純粋に Vendor Specific Class として認識されるようです。もちろん Sandisk からデバイスドライバは用意されていますので、これを install すれば動作するのでしょう。

動作確認はしていませんけど。

Windows XP

Plug-in した所、Storage として認識出来ました。気になって調べてみた所、どうやら「\windows\inf\usbstor.inf」に秘密があるようです。usbstor.inf には以下の記述がありました。どうやら VID_0781&PID_0100 を認識した場合、USBSTOR_CB (多分、CB という意味だと思う) として認識するよう、指定されているのだと思います。

#Linux も Source に手を入れるより設定ファイルのようなものを弄る方法で何とか実装出来ないものでしょうかね。

USB\VID_0781&PID_0100.DeviceDesc = "SanDisk USB ImageMate Multimedia Card Reader"
%USB\VID_0781&PID_0100.DeviceDesc%=USBSTOR_CB, USB\VID_0781&PID_0100

デバイスマネージャでは以下のように認識されていました。

Windows XP で認識した SDDR-12

ちなみに usbstor.inf に以下の記述がありました。Class=8 かつ SubClass=2(ATAPI), 5(SFF-8070i), 6(SCSI) かつ Protocol=50(Bulk-Only) の場合、問答無用で USB Storage として動作させるのでしょうね。

[Generic]
%GenericBulkOnly.DeviceDesc%=USBSTOR_BULK, USB\Class_08&SubClass_02&Prot_50
%GenericBulkOnly.DeviceDesc%=USBSTOR_BULK, USB\Class_08&SubClass_05&Prot_50
%GenericBulkOnly.DeviceDesc%=USBSTOR_BULK, USB\Class_08&SubClass_06&Prot_50

Mac OS X

デバイスは認識しているっぽいが、Storage としてはマウントされませんでした。流石に無理か。


動作確認手順

mount して読み書き出来るか確認しました。


参考にした page


History


<Home> → <M.D.L.> → <今、そこにある機器、、、かも> → <[M.D.L. 今機器] ImageMate SDDR-12>
Copyright (c) 2004 Makoto NARA (Mc.N), All rights reserved.
<Terms of Use>

Valid CSS! Valid HTML 4.01!