# udev help: no device nodes for Sansa e280 [solved]

## turtles

I recently purchased a Sansa e280 I plugged it in to my USB port then unplugged it before realizing it needed libmtp and now only the blue wheel lights up. No screen etc plugged or unplugged.

It appears to have gone into a read only mode.

A soloution is described here However the device needs to be mounted as a flash drive.

I can see the device but not mount it.

lsusb:

```
Bus 002 Device 006: ID 0781:7420 SanDisk Corp. Sansa E200 series (mtp)

Device Descriptor:

  bLength                18

  bDescriptorType         1

  bcdUSB               2.00

  bDeviceClass            0 (Defined at Interface level)

  bDeviceSubClass         0

  bDeviceProtocol         0

  bMaxPacketSize0        64

  idVendor           0x0781 SanDisk Corp.

  idProduct          0x7420 Sansa E200 series (mtp)

  bcdDevice            7.20

  iManufacturer           1 SanDisk

  iProduct                2 Sansa e280

  iSerial                 3 00000000-00000000-1551b4a4-d90df303-00000000

  bNumConfigurations      1

  Configuration Descriptor:

    bLength                 9

    bDescriptorType         2

    wTotalLength           39

    bNumInterfaces          1

    bConfigurationValue   128

    iConfiguration          0

    bmAttributes         0xc0

      Self Powered

    MaxPower              500mA

    Interface Descriptor:

      bLength                 9

      bDescriptorType         4

      bInterfaceNumber        0

      bAlternateSetting       0

      bNumEndpoints           3

      bInterfaceClass       255 Vendor Specific Class

      bInterfaceSubClass    255 Vendor Specific Subclass

      bInterfaceProtocol    255 Vendor Specific Protocol

      iInterface              0

      Endpoint Descriptor:

        bLength                 7

        bDescriptorType         5

        bEndpointAddress     0x01  EP 1 OUT

        bmAttributes            2

          Transfer Type            Bulk

          Synch Type               None

          Usage Type               Data

        wMaxPacketSize     0x0040  1x 64 bytes

        bInterval               0

      Endpoint Descriptor:

        bLength                 7

        bDescriptorType         5

        bEndpointAddress     0x82  EP 2 IN

        bmAttributes            2

          Transfer Type            Bulk

          Synch Type               None

          Usage Type               Data

        wMaxPacketSize     0x0040  1x 64 bytes

        bInterval               0

      Endpoint Descriptor:

        bLength                 7

        bDescriptorType         5

        bEndpointAddress     0x81  EP 1 IN

        bmAttributes            3

          Transfer Type            Interrupt

          Synch Type               None

          Usage Type               Data

        wMaxPacketSize     0x0040  1x 64 bytes

        bInterval             100

Device Qualifier (for other device speed):

  bLength                10

  bDescriptorType         6

  bcdUSB               2.00

  bDeviceClass          255 Vendor Specific Class

  bDeviceSubClass       255 Vendor Specific Subclass

  bDeviceProtocol       255 Vendor Specific Protocol

  bMaxPacketSize0        64

  bNumConfigurations      1

Device Status:     0x0001

  Self Powered

```

the kernel recognized the e280 with errors using ehci:

```
usb 3-3: new high speed USB device using ehci_hcd and address 2

usb 3-3: config 128 interface 0 altsetting 0 endpoint 0x81 has an invalid bInterval 100, changing to 10

usb 3-3: configuration #128 chosen from 1 choice

```

Then I used uhci:

```
usb 2-2: new full speed USB device using uhci_hcd and address 6

usb 2-2: configuration #128 chosen from 1 choice

```

In /sys/bus/usb/devices

I get 

```
-0:1.0  2-0:1.0  2-2  2-2:128.0  usb1  usb2
```

From my kernel config 

```
grep USB /usr/src/linux/.config | grep -e '=m' -e '=y'

CONFIG_LIBERTAS_USB=m

CONFIG_USB_USBNET=m

CONFIG_USB_NET_AX8817X=m

CONFIG_USB_NET_CDCETHER=m

CONFIG_USB_NET_NET1080=m

CONFIG_USB_NET_RNDIS_HOST=m

CONFIG_USB_NET_CDC_SUBSET=m

CONFIG_USB_BELKIN=y

CONFIG_USB_ARMLINUX=y

CONFIG_USB_NET_ZAURUS=m

CONFIG_V4L_USB_DRIVERS=y

CONFIG_USB_HID=y

CONFIG_USB_SUPPORT=y

CONFIG_USB_ARCH_HAS_HCD=y

CONFIG_USB_ARCH_HAS_OHCI=y

CONFIG_USB_ARCH_HAS_EHCI=y

CONFIG_USB=y

CONFIG_USB_DEVICEFS=y

CONFIG_USB_SUSPEND=y

CONFIG_USB_C67X00_HCD=m

CONFIG_USB_EHCI_HCD=m

CONFIG_USB_ISP116X_HCD=m

CONFIG_USB_ISP1760_HCD=m

CONFIG_USB_OHCI_HCD=m

CONFIG_USB_OHCI_LITTLE_ENDIAN=y

CONFIG_USB_UHCI_HCD=m

CONFIG_USB_SL811_HCD=m

CONFIG_USB_R8A66597_HCD=m

CONFIG_USB_ACM=m

CONFIG_USB_PRINTER=m

CONFIG_USB_WDM=m

CONFIG_USB_STORAGE=m

CONFIG_USB_STORAGE_DATAFAB=y

CONFIG_USB_STORAGE_FREECOM=y

CONFIG_USB_STORAGE_ISD200=y

CONFIG_USB_STORAGE_DPCM=y

CONFIG_USB_STORAGE_SDDR09=y

CONFIG_USB_STORAGE_SDDR55=y

CONFIG_USB_STORAGE_JUMPSHOT=y

CONFIG_USB_STORAGE_ALAUDA=y

CONFIG_USB_STORAGE_ONETOUCH=y

CONFIG_USB_STORAGE_KARMA=y

CONFIG_USB_LIBUSUAL=y

CONFIG_USB_MON=y

CONFIG_USB_USS720=m

CONFIG_USB_SERIAL=m

CONFIG_USB_SERIAL_GENERIC=y

CONFIG_USB_SERIAL_AIRPRIME=m

CONFIG_USB_SERIAL_CP2101=m

CONFIG_USB_SERIAL_IPW=m

CONFIG_USB_SERIAL_MOTOROLA=m

CONFIG_USB_EMI62=m

CONFIG_USB_EMI26=m

CONFIG_USB_ADUTUX=m

CONFIG_USB_AUERSWALD=m

CONFIG_USB_RIO500=m

CONFIG_USB_LEGOTOWER=m

CONFIG_USB_LCD=m

CONFIG_USB_BERRY_CHARGE=m

CONFIG_USB_LED=y

CONFIG_USB_CYPRESS_CY7C63=m

CONFIG_USB_CYTHERM=m

CONFIG_USB_ISIGHTFW=m

CONFIG_USB_GADGET=m

CONFIG_USB_GADGET_SELECTED=y

CONFIG_USB_GADGET_AMD5536UDC=y

CONFIG_USB_AMD5536UDC=m

CONFIG_USB_GADGET_DUALSPEED=y

CONFIG_USB_ETH=m

CONFIG_USB_ETH_RNDIS=y

CONFIG_USB_GADGETFS=m

CONFIG_USB_FILE_STORAGE=m

CONFIG_USB_G_SERIAL=m

CONFIG_USB_G_PRINTER=m

```

```

grep SCSI /usr/src/linux/.config | grep -e '=m' -e '=y'

CONFIG_SCSI=y

CONFIG_SCSI_DMA=y

CONFIG_SCSI_NETLINK=y

CONFIG_SCSI_WAIT_SCAN=m

CONFIG_SCSI_SPI_ATTRS=y

CONFIG_SCSI_FC_ATTRS=y

CONFIG_SCSI_LOWLEVEL=y

CONFIG_SCSI_AIC7XXX=y

CONFIG_SCSI_AIC79XX=y

```

There are no scsi modules loading as most are compiled in.

I am not having problems with other USB drives

If I run mpt-detect I get lots of data:

```
mtp-detect

libmtp version: 0.2.6.1

Attempting to connect device(s)

PTP: Opening session

Detect: Successfully connected 1 devices

USB low-level info:

   Using kernel interface "usbfs"

   bcdUSB: 512

   bDeviceClass: 0

   bDeviceSubClass: 0

   bDeviceProtocol: 0

   idVendor: 0781

   idProduct: 7420

   IN endpoint maxpacket: 64 bytes

   OUT endpoint maxpacket: 64 bytes

   Device flags: 0x00000043

Microsoft device descriptor 0xee:

        0000: 1203 4d00 5300 4600 5400 3100 3000 3000   ..M.S.F.T.1.0.0.

       ..........<snip>..........................

Potential MTP Device with VendorID:0781 and ProductID:7420 responded to control message 2 with a response that was too short. 

Problems may arrise but continuing

Device info:

   Manufacturer: SanDisk

   Model: Sansa e280

   Device version: PP5022AF-05.51-S301-02.18-S301.02.18A-D, (Build 32.10)

   Serial number: 00000000-00000000-1551b4a4-d90df303-00000000

   Vendor extension ID: 0x00000006

   Vendor extension description: microsoft.com/WMDRMPD: 10.1; portalplayer.com: 1.0;

   Detected object size: 64 bits

Supported operations:

   1014: Get device property description

   1015: Get device property value

   1016: Set device property value

   1017: Reset device property value

   1001: get device info

   1002: Open session

   1003: Close session

   1004: Get storage IDs

   1005: Get storage info

   1006: Get number of objects

   1007: Get object handles

   1008: Get object info

   1009: Get object

   101b: Get partial object

   100c: Send object info

   100d: Send object

   100b: Delete object

   1012: Set object protection

   100f: Format storage

   9801: Get object properties supported

   9802: Get object property description

   9803: Get object property value

   9804: Set object property value

   9805: Get object property list

   9806: Set object property list

   9810: Get object references

   9811: Set object references

   9201: Report Added/Deleted Items

   9101: Get secure time challenge

   9102: Get secure time response

   9103: Set license response

   9104: Get sync list

   9105: Send meter challenge query

   9106: Get meter challenge

   9107: Get meter response

   9108: Clean data store

   9109: Get license state

   910a: Send WMDRM-PD Command

   910b: Send WMDRM-PD Request

Events supported:

   None.

Device Properties Supported:

   0x5001: Battery Level

   0xd101: Secure Time

   0xd102: Device Certificate

   0xd401: Synchronization Partner

   0xd402: Friendly Device Name

Playable File (Object) Types and Object Properties Supported:

   3001: Association/Directory

      dc01: StorageID UINT32 data type ANY 32BIT VALUE form READ ONLY

      dc0b: ParentObject UINT32 data type ANY 32BIT VALUE form READ ONLY

      dc07: ObjectFileName STRING data type GET/SET

      dc04: ObjectSize UINT64 data type READ ONLY

      dc02: ObjectFormat UINT16 data type ANY 16BIT VALUE form READ ONLY

      dc41: PersistantUniqueObjectIdentifier UINT128 data type READ ONLY

      dc4f: NonConsumable UINT8 data type enumeration: 0, 1,  GET/SET

      dc44: Name STRING data type GET/SET

      dc03: ProtectionStatus UINT16 data type enumeration: 0, 1, 32770, 32771,  READ ONLY

      dc09: DateModified STRING data type GET/SET

   3009: MP3

      dc01: StorageID UINT32 data type ANY 32BIT VALUE form READ ONLY

      dc0b: ParentObject UINT32 data type ANY 32BIT VALUE form READ ONLY

      dc07: ObjectFileName STRING data type GET/SET

      dc04: ObjectSize UINT64 data type READ ONLY

      dc02: ObjectFormat UINT16 data type ANY 16BIT VALUE form READ ONLY

      dc41: PersistantUniqueObjectIdentifier UINT128 data type READ ONLY

      dc4f: NonConsumable UINT8 data type enumeration: 0, 1,  GET/SET

      dc03: ProtectionStatus UINT16 data type enumeration: 0, 1, 32770, 32771,  READ ONLY

      dc09: DateModified STRING data type GET/SET

      dc8b: Track UINT16 data type ANY 16BIT VALUE form GET/SET

      dc99: OriginalReleaseDate STRING data type GET/SET

      dc0a: Keywords STRING data type GET/SET

      dc44: Name STRING data type GET/SET

      dc46: Artist STRING data type GET/SET

      dc8c: Genre STRING data type GET/SET

      dc9a: AlbumName STRING data type GET/SET

      dc89: Duration UINT32 data type ANY 32BIT VALUE form GET/SET

      de9a: AudioBitRate UINT32 data type range: MIN 8000, MAX 1500000, STEP 1 GET/SET

      de93: SampleRate UINT32 data type range: MIN 8000, MAX 96000, STEP 50 GET/SET

      de94: NumberOfChannels UINT16 data type enumeration: 1, 2,  GET/SET

      dc8a: Rating UINT16 data type range: MIN 0, MAX 100, STEP 1 GET/SET

      dc91: UseCount UINT32 data type ANY 32BIT VALUE form GET/SET

      d901: BuyFlag UINT8 data type ANY 8BIT VALUE form GET/SET

   3008: MS Wave

      dc01: StorageID UINT32 data type ANY 32BIT VALUE form READ ONLY

      dc0b: ParentObject UINT32 data type ANY 32BIT VALUE form READ ONLY

      dc07: ObjectFileName STRING data type GET/SET

      dc04: ObjectSize UINT64 data type READ ONLY

      dc02: ObjectFormat UINT16 data type ANY 16BIT VALUE form READ ONLY

      dc41: PersistantUniqueObjectIdentifier UINT128 data type READ ONLY

      dc4f: NonConsumable UINT8 data type enumeration: 0, 1,  GET/SET

      dc03: ProtectionStatus UINT16 data type enumeration: 0, 1, 32770, 32771,  READ ONLY

      dc09: DateModified STRING data type GET/SET

      dc8b: Track UINT16 data type ANY 16BIT VALUE form GET/SET

      dc99: OriginalReleaseDate STRING data type GET/SET

      dc0a: Keywords STRING data type GET/SET

      dc44: Name STRING data type GET/SET

      dc46: Artist STRING data type GET/SET

      dc8c: Genre STRING data type GET/SET

      dc9a: AlbumName STRING data type GET/SET

      dc89: Duration UINT32 data type ANY 32BIT VALUE form GET/SET

      de9a: AudioBitRate UINT32 data type range: MIN 8000, MAX 1500000, STEP 1 GET/SET

      de93: SampleRate UINT32 data type range: MIN 8000, MAX 96000, STEP 50 GET/SET

      de94: NumberOfChannels UINT16 data type enumeration: 1, 2,  GET/SET

      dc8a: Rating UINT16 data type range: MIN 0, MAX 100, STEP 1 GET/SET

      dc91: UseCount UINT32 data type ANY 32BIT VALUE form GET/SET

      d901: BuyFlag UINT8 data type ANY 8BIT VALUE form GET/SET

   ba05: Abstract Audio Video Playlist

      dc01: StorageID UINT32 data type ANY 32BIT VALUE form READ ONLY

      dc0b: ParentObject UINT32 data type ANY 32BIT VALUE form READ ONLY

      dc07: ObjectFileName STRING data type GET/SET

      dc04: ObjectSize UINT64 data type READ ONLY

      dc02: ObjectFormat UINT16 data type ANY 16BIT VALUE form READ ONLY

      dc41: PersistantUniqueObjectIdentifier UINT128 data type READ ONLY

      dc4f: NonConsumable UINT8 data type enumeration: 0, 1,  GET/SET

      dc44: Name STRING data type GET/SET

      dc03: ProtectionStatus UINT16 data type enumeration: 0, 1, 32770, 32771,  READ ONLY

      dc09: DateModified STRING data type GET/SET

   ba03: Abstract Audio Album

      dc01: StorageID UINT32 data type ANY 32BIT VALUE form READ ONLY

      dc0b: ParentObject UINT32 data type ANY 32BIT VALUE form READ ONLY

      dc07: ObjectFileName STRING data type GET/SET

      dc04: ObjectSize UINT64 data type READ ONLY

      dc02: ObjectFormat UINT16 data type ANY 16BIT VALUE form READ ONLY

      dc41: PersistantUniqueObjectIdentifier UINT128 data type READ ONLY

      dc4f: NonConsumable UINT8 data type enumeration: 0, 1,  GET/SET

      dc03: ProtectionStatus UINT16 data type enumeration: 0, 1, 32770, 32771,  READ ONLY

      dc09: DateModified STRING data type GET/SET

      dc0a: Keywords STRING data type GET/SET

      dc44: Name STRING data type GET/SET

      dc46: Artist STRING data type GET/SET

    ........<snip>.........

   StorageID: 0x00010001

      StorageType: 0x0003

      FilesystemType: 0x0002

      AccessCapability: 0x0000

      MaxCapacity: 7998969924

      FreeSpaceInBytes: 7843047492

      FreeSpaceInObjects: 4981

      StorageDescription: PPI NAND

      VolumeIdentifier: VOL0_Sansa_e280_00000000-00000000-1551b4a4-d90df303-00000000

.......<snip>.........

MTP-specific device properties:

   Friendly name: Sansa e280

   Synchronization partner:

   Battery level 100 of 100 (100%)

libmtp supported (playable) filetypes:

   ISO MPEG-1 Audio Layer 3

   RIFF WAVE file

   Microsoft Windows Media Audio

.....<snip>

Device Certificate:

PTP: Closing session

OK.

```

I tried adding a line to /etc/udev/rules.d/60-usb-flash.rules

and /etc/init.d/udev-postmount restart

# SanDisk Sansa e200/e250/e260/e270/e280

Bus=="usb" ATTR{idVendor}=="0781", ATTR{idProduct}=="7420", SYMLINK+="usbhd%n", MODE="0666", GROUP="plugdev"

I checked the file /etc/udev/rules.d/65-mtp.rules and see the device there

udevinfo gives me:

```
P: /devices/pci0000:00/0000:00:1d.1/usb2/2-2

N: bus/usb/002/006

S: libmtp-2-2

```

EDIT: Well I can connect to it with Amaork  

In Amorak Settings -> Media Devices -> Add Device ...

In the drop down, select "MTP Media Device"

In the text box labeled "Enter a name for this device" name it.

Leave the bottom text field blank. The right answer is there is no mount point.

Click OK

The e280 should now be listed under Media Devices. 

NOTE: The the right of the combo box for the Sansa media device is a button with an icon of 3 gears. Click on this to reconfigure the e280 device. 

 In the first text box labeled "Pre-Connect command" enter "mtp-detect".

 Click "OK"

----------

## Abraxas

You cannot mount a music player when in MTP mode.  It doens't act as a flash drive when in MTP mode.  You have to change the mode to get it to mount as a flash drive.  It should be an option in your Sansa player.  If your player is truly bricked and stuck in MTP mode you are probably out of luck.

----------

## turtles

That is kinda what I thought until I read this which basicly says you can boot a e280 into recovery mode.

 *daniel.haxx.se's web site wrote:*   

> If you put a bad mi4 on the device it can no longer function properly, but you must then enter Recovery Mode and correct the bad image. 
> 
>  Power off 
> 
>  Turn ON lock/hold 
> ...

 

But I cant seem to get to show up in dmesg therefore I was thinking a udev rule would work.

Edit:

See the thing is bricked thats true but since you can force the device into MSC mode you can recover the device with rockbox or the original firmware. I dont have the firmware so I am going to try rockbox.

Got it to work! 

I had commented the udev rule out in 60-usb-flash-rules.

```
SanDisk Sansa e200/e250/e260/e270/e280

Bus=="usb" ATTR{idVendor}=="0781", ATTR{idProduct}=="7420", SYMLINK+="usbhd%n", MODE="0666", GROUP="plugdev"

LABEL="usb-storage_rules_end"
```

So what I am wondering is how can I have udev deal with a device in MPT mode or MSC mode?

Perhaps thats it?

Just add the rule to 0-usb-flash-rules?

So this needs testing.

Notes:

EDIT# 2 can confirm that following this guide works:

http://www.rockbox.org/twiki/bin/view/Main/SansaE200Unbrick

I was able to update the frimware on the disk as you can read the header for the binary file at version.txt

However I have not had any luck getting the display to work. 

* I got the e200tool to work by holding down the center button then plugging it in to the USB. *

Must be a hardware issue. Usually the refurbs are better than new. I have 2 friends that have had these refurbs for a few months now.

sending it back try again with a new one.

It took me a really long time to realise that the e200 = e2* when looking for firm ware. I thought size would be an issue as usual it is not.

There are 2 boards 1 is the daughter flash mem which can be any X gigs and the main board is a version 1 or 2.

Plus the sansa site makes it appear that you need to install a .exe program to install the firmware etc etc and does not have a download for the firmware other than here:

```
wget http://mp3support.sandisk.com/firmware/e200/e200v101.02.24a.zip

```

and unzip

So have the unit off the press the middle button and insert usb cable. Usit will power itself on.

There should be no mount point.

```
e200tool recover BL_SD_boardSupportSD.rom

e200tool v0.2.3-alpha (c) by MrH 2006, 2007

Searching for device 0781:0720 ... found!

Initializing USB stub (4780 bytes) ... done!

Writing 'BL_SD_boardSupportSD.rom' to address 0x10600000

Searching for device 6666:e200 ... 9 found!

Write at 0x10660198

Write done!

Running from address 0x10600000

Searching for device 6666:e200 ... found!

Execution started!

```

After that unit will appear in KDE as a new sd* drive.

say ok 

go to the drive for me it was:

/media/16MB-FORMAT/

and just cp the files there.

The interesting thing is lsusb tells you the mode you are in:

```
lsusb

Bus 001 Device 001: ID 1d6b:0001

Bus 002 Device 028: ID 0781:0720 SanDisk Corp. Sansa C200 series in recovery mode

Bus 002 Device 001: ID 1d6b:0001

```

----------

