Edirol SD-20 Studio Canvas

Edirol SD-20 Studio Canvas MIDI synth module.

Related pages: Evolution eKeys 37,

back to gadgets page.

Work log

2021-08-26: I re-created this page on my self-hosted web server.

2011-02-22: under OpenBSD 4.8 / i386, the SD-20 shows up like this in /var/log/messages:

Feb 23 00:30:15 home99 /bsd: umidi1 at uhub2
Feb 23 00:30:15 home99 /bsd:  port 3 configuration 1 interface 0 "Roland EDIROL SD-20" rev 1.10/1.00 addr 4
Feb 23 00:30:15 home99 /bsd: umidi1: (Fixed Endpoint)
Feb 23 00:30:15 home99 /bsd: umidi1: out=2, in=3
Feb 23 00:30:15 home99 /bsd: midi1 at umidi1: <USB MIDI I/F>
Feb 23 00:30:15 home99 /bsd: midi2 at umidi1: <USB MIDI I/F>
Feb 23 00:30:15 home99 /bsd: midi3 at umidi1: <USB MIDI I/F>

and here is the usbdevs output:

tingo@home99$ usbdevs -dv -f /dev/usb0 -a 4
Controller /dev/usb0:
addr 4: full speed, power 500 mA, config 1, EDIROL SD-20(0x0027), Roland(0x0582), rev 1.00
  umidi1

Very cool.

2011-02-20: under FreeBSD 8.2-prerelease, with the snd_uaudio module loaded, I get this in /var/log/messages:

root@kg-v7# uname -a
FreeBSD kg-v7.kg4.no 8.2-PRERELEASE FreeBSD 8.2-PRERELEASE #4: Sun Feb 20 03:18:04 CET 2011     root@kg-v7.kg4.no:/usr/obj/usr/src/sys/GENERIC  amd64
Feb 20 20:17:11 kg-v7 root: Unknown USB device: vendor 0x0582 product 0x0027 bus uhub2
Feb 20 20:17:11 kg-v7 kernel: ugen0.4: <Roland> at usbus0

and here is the usbconfig output:

root@kg-v7# usbconfig -u 0 -a 4
ugen0.4: <EDIROL SD-20 Roland> at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON

usb device descriptor:

root@kg-v7# usbconfig -u 0 -a 4 dump_device_desc
ugen0.4: <EDIROL SD-20 Roland> at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON

  bLength = 0x0012
  bDescriptorType = 0x0001
  bcdUSB = 0x0110
  bDeviceClass = 0x00ff
  bDeviceSubClass = 0x0000
  bDeviceProtocol = 0x00ff
  bMaxPacketSize0 = 0x0008
  idVendor = 0x0582
  idProduct = 0x0027
  bcdDevice = 0x0100
  iManufacturer = 0x0001  <Roland>
  iProduct = 0x0002  <EDIROL SD-20>
  iSerialNumber = 0x0000  <no string>
  bNumConfigurations = 0x0001

current config:

root@kg-v7# usbconfig -u 0 -a 4 dump_curr_config_desc
ugen0.4: <EDIROL SD-20 Roland> at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON


 Configuration index 0

    bLength = 0x0009
    bDescriptorType = 0x0002
    wTotalLength = 0x00fd
    bNumInterfaces = 0x0001
    bConfigurationValue = 0x0001
    iConfiguration = 0x0000  <no string>
    bmAttributes = 0x0080
    bMaxPower = 0x00fa

    Interface 0
      bLength = 0x0009
      bDescriptorType = 0x0004
      bInterfaceNumber = 0x0000
      bAlternateSetting = 0x0000
      bNumEndpoints = 0x0002
      bInterfaceClass = 0x00ff
      bInterfaceSubClass = 0x0003
      bInterfaceProtocol = 0x0000
      iInterface = 0x0000  <no string>

      Additional Descriptor

      bLength = 0x07
      bDescriptorType = 0x24
      bDescriptorSubType = 0x01
       RAW dump:
       0x00 | 0x07, 0x24, 0x01, 0x00, 0x01, 0x52, 0x00


      Additional Descriptor

      bLength = 0x06
      bDescriptorType = 0x24
      bDescriptorSubType = 0x02
       RAW dump:
       0x00 | 0x06, 0x24, 0x02, 0x01, 0x10, 0x00


      Additional Descriptor

      bLength = 0x06
      bDescriptorType = 0x24
      bDescriptorSubType = 0x02
       RAW dump:
       0x00 | 0x06, 0x24, 0x02, 0x01, 0x11, 0x00


      Additional Descriptor

      bLength = 0x06
      bDescriptorType = 0x24
      bDescriptorSubType = 0x02
       RAW dump:
       0x00 | 0x06, 0x24, 0x02, 0x02, 0x20, 0x00


      Additional Descriptor

      bLength = 0x06
      bDescriptorType = 0x24
      bDescriptorSubType = 0x02
       RAW dump:
       0x00 | 0x06, 0x24, 0x02, 0x02, 0x21, 0x00


      Additional Descriptor

      bLength = 0x06
      bDescriptorType = 0x24
      bDescriptorSubType = 0x02
       RAW dump:
       0x00 | 0x06, 0x24, 0x02, 0x02, 0x22, 0x00


      Additional Descriptor

      bLength = 0x09
      bDescriptorType = 0x24
      bDescriptorSubType = 0x03
       RAW dump:
       0x00 | 0x09, 0x24, 0x03, 0x01, 0x30, 0x01, 0x20, 0x01,
       0x08 | 0x00

      Additional Descriptor

      bLength = 0x09
      bDescriptorType = 0x24
      bDescriptorSubType = 0x03
       RAW dump:
       0x00 | 0x09, 0x24, 0x03, 0x01, 0x31, 0x01, 0x21, 0x01,
       0x08 | 0x00

      Additional Descriptor

      bLength = 0x09
      bDescriptorType = 0x24
      bDescriptorSubType = 0x03
       RAW dump:
       0x00 | 0x09, 0x24, 0x03, 0x01, 0x32, 0x01, 0x22, 0x01,
       0x08 | 0x00

      Additional Descriptor

      bLength = 0x09
      bDescriptorType = 0x24
      bDescriptorSubType = 0x03
       RAW dump:
       0x00 | 0x09, 0x24, 0x03, 0x02, 0x40, 0x01, 0x10, 0x01,
       0x08 | 0x00

      Additional Descriptor

      bLength = 0x09
      bDescriptorType = 0x24
      bDescriptorSubType = 0x03
       RAW dump:
       0x00 | 0x09, 0x24, 0x03, 0x02, 0x41, 0x01, 0x11, 0x01,
       0x08 | 0x00

     Endpoint 0
        bLength = 0x0009
        bDescriptorType = 0x0005
        bEndpointAddress = 0x0001  <OUT>
        bmAttributes = 0x0002  <BULK>
        wMaxPacketSize = 0x0040
        bInterval = 0x0000
        bRefresh = 0x0000
        bSynchAddress = 0x0000

      Additional Descriptor

      bLength = 0x06
      bDescriptorType = 0x25
      bDescriptorSubType = 0x01
       RAW dump:
       0x00 | 0x06, 0x25, 0x01, 0x02, 0x10, 0x11


     Endpoint 1
        bLength = 0x0009
        bDescriptorType = 0x0005
        bEndpointAddress = 0x0081  <IN>
        bmAttributes = 0x0002  <BULK>
        wMaxPacketSize = 0x0040
        bInterval = 0x0000
        bRefresh = 0x0000
        bSynchAddress = 0x0000

      Additional Descriptor

      bLength = 0x07
      bDescriptorType = 0x25
      bDescriptorSubType = 0x01
       RAW dump:
       0x00 | 0x07, 0x25, 0x01, 0x03, 0x30, 0x31, 0x32



    Interface 0 Alt 1
      bLength = 0x0009
      bDescriptorType = 0x0004
      bInterfaceNumber = 0x0000
      bAlternateSetting = 0x0001
      bNumEndpoints = 0x0002
      bInterfaceClass = 0x00ff
      bInterfaceSubClass = 0x0003
      bInterfaceProtocol = 0x0000
      iInterface = 0x0000  <no string>

      Additional Descriptor

      bLength = 0x07
      bDescriptorType = 0x24
      bDescriptorSubType = 0x01
       RAW dump:
       0x00 | 0x07, 0x24, 0x01, 0x00, 0x01, 0x52, 0x00


      Additional Descriptor

      bLength = 0x06
      bDescriptorType = 0x24
      bDescriptorSubType = 0x02
       RAW dump:
       0x00 | 0x06, 0x24, 0x02, 0x01, 0x10, 0x00


      Additional Descriptor

      bLength = 0x06
      bDescriptorType = 0x24
      bDescriptorSubType = 0x02
       RAW dump:
       0x00 | 0x06, 0x24, 0x02, 0x01, 0x11, 0x00


      Additional Descriptor

      bLength = 0x06
      bDescriptorType = 0x24
      bDescriptorSubType = 0x02
       RAW dump:
       0x00 | 0x06, 0x24, 0x02, 0x02, 0x20, 0x00


      Additional Descriptor

      bLength = 0x06
      bDescriptorType = 0x24
      bDescriptorSubType = 0x02
       RAW dump:
       0x00 | 0x06, 0x24, 0x02, 0x02, 0x21, 0x00


      Additional Descriptor

      bLength = 0x06
      bDescriptorType = 0x24
      bDescriptorSubType = 0x02
       RAW dump:
       0x00 | 0x06, 0x24, 0x02, 0x02, 0x22, 0x00


      Additional Descriptor

      bLength = 0x09
      bDescriptorType = 0x24
      bDescriptorSubType = 0x03
       RAW dump:
       0x00 | 0x09, 0x24, 0x03, 0x01, 0x30, 0x01, 0x20, 0x01,
       0x08 | 0x00

      Additional Descriptor

      bLength = 0x09
      bDescriptorType = 0x24
      bDescriptorSubType = 0x03
       RAW dump:
       0x00 | 0x09, 0x24, 0x03, 0x01, 0x31, 0x01, 0x21, 0x01,
       0x08 | 0x00

      Additional Descriptor

      bLength = 0x09
      bDescriptorType = 0x24
      bDescriptorSubType = 0x03
       RAW dump:
       0x00 | 0x09, 0x24, 0x03, 0x01, 0x32, 0x01, 0x22, 0x01,
       0x08 | 0x00

      Additional Descriptor

      bLength = 0x09
      bDescriptorType = 0x24
      bDescriptorSubType = 0x03
       RAW dump:
       0x00 | 0x09, 0x24, 0x03, 0x02, 0x40, 0x01, 0x10, 0x01,
       0x08 | 0x00

      Additional Descriptor

      bLength = 0x09
      bDescriptorType = 0x24
      bDescriptorSubType = 0x03
       RAW dump:
       0x00 | 0x09, 0x24, 0x03, 0x02, 0x41, 0x01, 0x11, 0x01,
       0x08 | 0x00

     Endpoint 0
        bLength = 0x0009
        bDescriptorType = 0x0005
        bEndpointAddress = 0x0001  <OUT>
        bmAttributes = 0x0002  <BULK>
        wMaxPacketSize = 0x0040
        bInterval = 0x0000
        bRefresh = 0x0000
        bSynchAddress = 0x0000

      Additional Descriptor

      bLength = 0x06
      bDescriptorType = 0x25
      bDescriptorSubType = 0x01
       RAW dump:
       0x00 | 0x06, 0x25, 0x01, 0x02, 0x10, 0x11


     Endpoint 1
        bLength = 0x0009
        bDescriptorType = 0x0005
        bEndpointAddress = 0x0081  <IN>
        bmAttributes = 0x0003  <INTERRUPT>
        wMaxPacketSize = 0x0040
        bInterval = 0x0001
        bRefresh = 0x0000
        bSynchAddress = 0x0000

      Additional Descriptor

      bLength = 0x07
      bDescriptorType = 0x25
      bDescriptorSubType = 0x01
       RAW dump:
       0x00 | 0x07, 0x25, 0x01, 0x03, 0x30, 0x31, 0x32

That's it.

2010-01-16: under FreeBSD 8.0-stable, this is what it looks like:

tingo@kg-v2$ uname -a
FreeBSD kg-v2.kg4.no 8.0-STABLE FreeBSD 8.0-STABLE #1: Wed Jan  6 21:21:40 CET 2010     root@kg-v2.kg4.no:/usr/obj/usr/src/sys/GENERIC  amd64

from /var/log/messages:

Jan 16 23:57:32 kg-v2 root: Unknown USB device: vendor 0x0582 product 0x0027 bus uhub0
Jan 16 23:57:32 kg-v2 kernel: ugen0.3: <Roland> at usbus0

from usbconfig:

tingo@kg-v2$ usbconfig -u 0
ugen0.1: <OHCI root HUB nVidia> at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON
ugen0.2: <PS2 to USB Converter CHESEN> at usbus0, cfg=0 md=HOST spd=LOW (1.5Mbps) pwr=ON
ugen0.3: <EDIROL SD-20 Roland> at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON

(ugen0.2 is just an usb-to-ps2 adapter)

tingo@kg-v2$ cat /dev/midistat
FreeBSD Midi Driver (midi2)
No devices installed.

2009-01-26: connected the SD-20 to a machine running FreeBSD 7.1-prerelease (for completeness):

tingo@kg-work2$ uname -a
FreeBSD kg-work2.kg4.no 7.1-PRERELEASE FreeBSD 7.1-PRERELEASE #3: Mon Dec  1 19:10:45 CET 2008     root@kg-work2.kg4.no:/usr/obj/usr/src/sys/SX270  i386

From /var/log/messages output:

Jan 26 00:50:14 kg-work2 root: Unknown USB device: vendor 0x0582 product 0x0027 bus uhub1
Jan 26 00:50:14 kg-work2 kernel: ugen2: <Roland EDIROL SD-20, class 255/0, rev 1.10/1.00, addr 2> on uhub1

From usbdevs -v output:

Controller /dev/usb1:
addr 1: full speed, self powered, config 1, UHCI root hub(0x0000), Intel(0x0000), rev 1.00
 port 1 addr 2: full speed, power 500 mA, config 1, EDIROL SD-20(0x0027), Roland(0x0582), rev 1.00
 port 2 powered

2009-01-26: connected the SD-20 to a machine running NetBSD 5.0 BETA:

$ uname -a
NetBSD kg-v2.kg4.no 5.0_BETA NetBSD 5.0_BETA (GENERIC) #0: Wed Jan 21 10:13:28 PST 2009  builds@wb27:/home/builds/ab/netbsd-5/amd64/200901210002Z-obj/home/builds/ab/netbsd-5/src/sys/arch/amd64/compile/GENERIC amd64

from /var/log/messages:

Jan 26 00:17:18 kg-v2 /netbsd: umidi0 at uhub0 port 5 configuration 1 interface 0
Jan 26 00:17:18 kg-v2 /netbsd: Roland EDIROL SD-20, rev 1.10/1.00, addr 3
Jan 26 00:17:18 kg-v2 /netbsd: umidi0: (Fixed Endpoint)
Jan 26 00:17:18 kg-v2 /netbsd: umidi0: out=2, in=3
Jan 26 00:17:18 kg-v2 /netbsd: midi1 at umidi0: <0 >0 on umidi0
Jan 26 00:17:18 kg-v2 /netbsd: midi2 at umidi0: <1 >1 on umidi0
Jan 26 00:17:18 kg-v2 /netbsd: midi3 at umidi0: >1 on umidi0

From usbdevs:

kg-v2# usbdevs
addr 1: OHCI root hub, vendor 0x10de
 addr 2: PS2 to USB Converter, CHESEN
 addr 3: EDIROL SD-20, Roland
addr 1: EHCI root hub, vendor 0x10de
 addr 2: USB 2.0 Reader, Generic
addr 1: OHCI root hub, vendor 0x10de
addr 1: EHCI root hub, vendor 0x10de

From usbdevs -v:

kg-v2# usbdevs -v
Controller /dev/usb0:
addr 1: full speed, self powered, config 1, OHCI root hub(0x0000), vendor 0x10de(0x10de), rev 1.00
 port 1 powered
 port 2 powered
 port 3 addr 2: low speed, power 100 mA, config 1, PS2 to USB Converter(0x0205), CHESEN(0x0a81), rev 0.10
 port 4 powered
 port 5 addr 3: full speed, power 500 mA, config 1, EDIROL SD-20(0x0027), Roland(0x0582), rev 1.00
 port 6 powered

2009-01-25: connected the SD-20 to a machine running Xubuntu 8.10. From /var/log/messages:

Jan 25 22:02:21 kg-home kernel: [172767.376273] usb 2-2: new full speed USB device using uhci_hcd and address 6
Jan 25 22:02:21 kg-home kernel: [172767.574398] usb 2-2: configuration #1 chosen from 1 choice
Jan 25 22:02:21 kg-home kernel: [172767.839019] usbcore: registered new interface driver snd-usb-audio

Output from lsusb:

tingo@kg-home:~$ lsusb -d 0582:0027
Bus 002 Device 006: ID 0582:0027 Roland Corp. EDIROL SD-20

and lsusb -v output.

2008-03-11: connected an Edirol SD-20 to a machine running FreeBSD 7.0-stable. From /var/log/messages:

Mar 11 20:22:21 kg-i82 kernel: ugen0: <Roland EDIROL SD-20, class 255/0, rev 1.10/1.00, addr 2> on uhub0
Mar 11 20:22:21 kg-i82 root: Unknown USB device: vendor 0x0582 product 0x0027 bus uhub0

and lsusb output:

root@kg-i82# lsusb
Bus /dev/usb0 Device /dev/ugen0: ID 0582:0027 Roland Corp.