[sane-devel] Can't download firmware to my scanner

jk billy2000@fastmail.fm
Thu, 02 Jun 2005 15:29:54 -0400


Hi,

I have an Epson 1670 Perfection USB Scanner. I have tested it 
successfully on
MS Windows, but I have not been able to get it to work on GNU/Linux yet. 
I hope
someone will be able to help me.

I am using Debian with a 2.6.8 kernel, and the following sane packages:

   # dpkg-query -l | grep sane
   ii  libsane        1.0.15-9       API library for scanners
   ii  sane           1.0.13-2       scanner graphical frontends
   ii  sane-utils     1.0.15-9       API library for scanners -- utilities
   ii  xsane          0.97-3         GTK+-based X11 frontend for SANE 
(Scanner
   ii  xsane-common   0.97-3         GTK+-based X11 frontend for SANE 
(Scanner
   #

(Please note that I also tried downloading the sane-backend and compiling it
myself, but I still get the same negative result as documented below.)

The scanner uses the snapscan SANE backend.

When I plug my scanner into my USB port, it is recognized by hotplug, 
and when
I run 'scanimage -L', it is visible (see below).

However, when I attempt to access the scanner in any way, using xscan,
scanimage -T, etc., it does not work, and the scanner then disapears 
from the
'scanimage -L' output, and does not return unless hotplug services are
restarted & the scanner restarted & reattached.

Based on the error output (see below), it seems like there is a problem
downloading the firmware to the scanner. I haven't been able to figure
out why.  The firmware and the /etc/sane.d/snapscan.conf file seem to be
correct to me:

   # ls /etc/sane.d/snapscan.conf /etc/sane.d/ESFW30.BIN  -l
   -rw-r--r--  1 root root 64000 Jun  2 01:03 /etc/sane.d/ESFW30.BIN
   -rw----r--  1 root root  2075 Jun  2 01:04 /etc/sane.d/snapscan.conf
   #

   # head  -15 /etc/sane.d/snapscan.conf
       #------------------------------ General ----------------------------

       # Change to the fully qualified filename of your firmware file, if
       # firmware upload is needed by the scanner
       firmware /etc/sane.d/ESFW30.BIN

       # If not automatically found you may manually specify a device name.

       # For USB scanners also specify bus=usb, e.g.
       # /dev/usb/scanner0 bus=usb

       # For SCSI scanners specify the generic device, e.g. /dev/sg0 on 
Linux.
       # /dev/sg0
   #


Here is the verbose output:
# export SANE_DEBUG_SNAPSCAN=128
# scanimage -L
[sanei_debug] Setting debug level of snapscan to 128.
[snapscan] sane_snapscan_init
[snapscan] sane_snapscan_init: Snapscan backend version 1.4.42
[snapscan] add_usb_device(libusb:006:002)
[snapscan] add_usb_device: Detected (kind of) an USB device
[snapscan] snapscani_usb_open(libusb:006:002)
[snapscan] add_usb_device: Checking if 0x04b8 is a supported USB vendor ID
[snapscan] snapscani_check_device()
[snapscan] mini_inquiry
[snapscan] snapscan_cmd
[snapscan] snapscani_usb_cmd(0,0xbfffd1c0,6,0xbfffd190,0xbfffd18c (36))
[snapscan] atomic_usb_cmd(0,0xbfffd1c0,6,0xbfffd190,0xbfffd18c (36))
[snapscan] usb_cmd(0,0xbfffd1c0,6,0xbfffd190,0xbfffd18c (36))
[snapscan] usb_cmd: cmdlen=6, datalen=0
[snapscan] usb_write: writing:  0x12 0x00 0x00 0x00 0x24 0x00
[snapscan] Written 6 bytes
[snapscan] usb_read: reading:  0xf9 0x00 0x00 0x00 0x00 0x00 0x00 0x00
[snapscan] Read 8 bytes
[snapscan] usb_read: reading:  0x06 0x00 0x02 0x02 0x49 0x00 0x00 0x00 
0x45 0x50 ...
[snapscan] Read 36 bytes
[snapscan] usb_read: reading:  0xfb 0x00 0x00 0x00 0x00 0x00 0x00 0x00
[snapscan] Read 8 bytes
[snapscan] snapscani_check_device: Is vendor "EPSON" model "EPSON 
Scanner" a supported scanner?
[snapscan] snapscani_get_model_id(EPSON Scanner, 0, 2)
[snapscan] snapscani_get_model_id: looking up scanner for ID 0x04b8,0x011f.
[snapscan] snapscani_get_model_id: scanner identified
[snapscan] snapscani_check_device: Autodetected driver: Perfection 1670
[snapscan] snapscani_usb_close(0)
[snapscan] 1st read 3 write 1
[snapscan] snapscani_usb_cmd(0,0xbfffd1f0,6,0x0,0x0 (0))
[snapscan] atomic_usb_cmd(0,0xbfffd1f0,6,0x0,0x0 (0))
[snapscan] usb_cmd(0,0xbfffd1f0,6,0x0,0x0 (0))
[snapscan] usb_cmd: cmdlen=6, datalen=0
[snapscan] usb_write: writing:  0x00 0x00 0x00 0x00 0x00 0x00
[snapscan] Written 6 bytes
[snapscan] usb_read: reading:  0xfb 0x00 0x00 0x00 0x00 0x00 0x00 0x00
[snapscan] Read 8 bytes
[snapscan] 2nd read 4 write 2
[snapscan] snapscani_init_device_structure()
[snapscan] sane_snapscan_get_devices (0xbfffe3b8, 0)
device `v4l:/dev/video0' is a Noname Vanilla iTVC15 card virtual device
device `snapscan:libusb:006:002' is a EPSON EPSON Scanner flatbed scanner
[snapscan] sane_snapscan_exit
#
#
#
#
#
# scanimage -T -d snapscan:libusb:006:002 -v -v
[sanei_debug] Setting debug level of snapscan to 128.
[snapscan] sane_snapscan_init
[snapscan] sane_snapscan_init: Snapscan backend version 1.4.42
[snapscan] add_usb_device(libusb:006:002)
[snapscan] add_usb_device: Detected (kind of) an USB device
[snapscan] snapscani_usb_open(libusb:006:002)
[snapscan] add_usb_device: Checking if 0x04b8 is a supported USB vendor ID
[snapscan] snapscani_check_device()
[snapscan] mini_inquiry
[snapscan] snapscan_cmd
[snapscan] snapscani_usb_cmd(0,0xbfffd190,6,0xbfffd160,0xbfffd15c (36))
[snapscan] atomic_usb_cmd(0,0xbfffd190,6,0xbfffd160,0xbfffd15c (36))
[snapscan] usb_cmd(0,0xbfffd190,6,0xbfffd160,0xbfffd15c (36))
[snapscan] usb_cmd: cmdlen=6, datalen=0
[snapscan] usb_write: writing:  0x12 0x00 0x00 0x00 0x24 0x00
[snapscan] Written 6 bytes
[snapscan] usb_read: reading:  0xf9 0x00 0x00 0x00 0x00 0x00 0x00 0x00
[snapscan] Read 8 bytes
[snapscan] usb_read: reading:  0x06 0x00 0x02 0x02 0x49 0x00 0x00 0x00 
0x45 0x50 ...
[snapscan] Read 36 bytes
[snapscan] usb_read: reading:  0xfb 0x00 0x00 0x00 0x00 0x00 0x00 0x00
[snapscan] Read 8 bytes
[snapscan] snapscani_check_device: Is vendor "EPSON" model "EPSON 
Scanner" a supported scanner?
[snapscan] snapscani_get_model_id(EPSON Scanner, 0, 2)
[snapscan] snapscani_get_model_id: looking up scanner for ID 0x04b8,0x011f.
[snapscan] snapscani_get_model_id: scanner identified
[snapscan] snapscani_check_device: Autodetected driver: Perfection 1670
[snapscan] snapscani_usb_close(0)
[snapscan] 1st read 3 write 1
[snapscan] snapscani_usb_cmd(0,0xbfffd1c0,6,0x0,0x0 (0))
[snapscan] atomic_usb_cmd(0,0xbfffd1c0,6,0x0,0x0 (0))
[snapscan] usb_cmd(0,0xbfffd1c0,6,0x0,0x0 (0))
[snapscan] usb_cmd: cmdlen=6, datalen=0
[snapscan] usb_write: writing:  0x00 0x00 0x00 0x00 0x00 0x00
[snapscan] Written 6 bytes
[snapscan] usb_read: reading:  0xfb 0x00 0x00 0x00 0x00 0x00 0x00 0x00
[snapscan] Read 8 bytes
[snapscan] 2nd read 4 write 2
[snapscan] snapscani_init_device_structure()
[snapscan] sane_snapscan_open (libusb:006:002, 0xbfffe384)
[snapscan] find_device
[snapscan] sane_snapscan_open: Allocating 64512 bytes as scanner buffer.
[snapscan] sane_snapscan_open: allocated scanner structure at 0x80539f8
[snapscan] open_scanner
[snapscan] snapscani_usb_open(libusb:006:002)
[snapscan] sane_snapscan_open: waiting for scanner to warm up.
[snapscan] wait_scanner_ready
[snapscan] test_unit_ready
[snapscan] snapscan_cmd
[snapscan] snapscani_usb_cmd(0,0xbfffe290,6,0x0,0x0 (0))
[snapscan] atomic_usb_cmd(0,0xbfffe290,6,0x0,0x0 (0))
[snapscan] usb_cmd(0,0xbfffe290,6,0x0,0x0 (0))
[snapscan] usb_cmd: cmdlen=6, datalen=0
[snapscan] usb_write: writing:  0x00 0x00 0x00 0x00 0x00 0x00
[snapscan] Written 6 bytes
[snapscan] usb_read: reading:  0xfb 0x00 0x00 0x00 0x00 0x00 0x00 0x00
[snapscan] Read 8 bytes
[snapscan] sane_snapscan_open: performing scanner self test.
[snapscan] send_diagnostic
[snapscan] snapscan_cmd
[snapscan] snapscani_usb_cmd(0,0xbfffe2d0,6,0x0,0x0 (0))
[snapscan] atomic_usb_cmd(0,0xbfffe2d0,6,0x0,0x0 (0))
[snapscan] usb_cmd(0,0xbfffe2d0,6,0x0,0x0 (0))
[snapscan] sane_snapscan_open: self test passed.
[snapscan] inquiry
[snapscan] snapscan_cmd
[snapscan] snapscani_usb_cmd(0,0x8053a28,6,0x8062880,0x8053b38 (120))
[snapscan] atomic_usb_cmd(0,0x8053a28,6,0x8062880,0x8053b38 (120))
[snapscan] usb_cmd(0,0x8053a28,6,0x8062880,0x8053b38 (120))
[snapscan] usb_cmd: cmdlen=6, datalen=0
[snapscan] usb_write: writing:  0x12 0x00 0x00 0x00 0x78 0x00
[snapscan] Written 6 bytes
[snapscan] usb_read: reading:  0xf9 0x00 0x00 0x00 0x00 0x00 0x00 0x00
[snapscan] Read 8 bytes
[snapscan] usb_read: reading:  0x06 0x00 0x02 0x02 0x49 0x00 0x00 0x00 
0x45 0x50 ...
[snapscan] Read 120 bytes
[snapscan] usb_read: reading:  0xfb 0x00 0x00 0x00 0x00 0x00 0x00 0x00
[snapscan] Read 8 bytes
[snapscan] inquiry: exposure time: 0.0 ms
[snapscan] inquiry: ms per line: 0.000000
[snapscan] inquiry: G2R_DIFF: 0
[snapscan] inquiry: B2R_DIFF: 0
[snapscan] inquiry: Chroma offsets=0; Red=0, Green:=0, Blue=0
[snapscan] inquiry: hardware config = 0x00
[snapscan] inquiry: bits per pixel = 14
[snapscan] inquiry: pixels per scan line = 0
[snapscan] inquiry: bytes per scan line = 0
[snapscan] inquiry: number of scan lines = 0
[snapscan] inquiry: effective buffer size = 0 bytes, 0 lines
[snapscan] inquiry: expected total scan data: 0 bytes
[snapscan] Looking up 31
[snapscan] Downloading /etc/sane.d/ESFW30.BIN
[snapscan] Size of firmware: 45364
[snapscan] snapscan_cmd
[snapscan] snapscani_usb_cmd(0,0x8072488,45374,0x0,0x0 (0))
[snapscan] atomic_usb_cmd(0,0x8072488,45374,0x0,0x0 (0))
[snapscan] usb_cmd(0,0x8072488,45374,0x0,0x0 (0))
[snapscan] usb_cmd: cmdlen=10, datalen=45364
[snapscan] usb_write: writing:  0x2a 0x00 0x87 0x00 0x00 0x00 0x00 0xb1 
0x34 0x00
[snapscan] Written 10 bytes
[snapscan] usb_read: reading:  0xf8 0x00 0x00 0x00 0x00 0x00 0x00 0x00
[snapscan] Read 8 bytes
[snapscan] usb_write: writing:  0x02 0xae 0x34 0x32 0xff 0xff 0xff 0xff 
0xff 0xff ...
[snapscan] usb_write Only 1024 bytes written
[snapscan] Written 1024 bytes
[snapscan] sane_snapscan_open: download_firmware command failed: Error 
during device I/O
scanimage: open of device snapscan:libusb:006:002 failed: Error during 
device I/O
Calling sane_exit
[snapscan] sane_snapscan_exit
scanimage: finished
#
# scanimage -L
[sanei_debug] Setting debug level of snapscan to 128.
[snapscan] sane_snapscan_init
[snapscan] sane_snapscan_init: Snapscan backend version 1.4.42
[snapscan] add_usb_device(libusb:006:002)
[snapscan] add_usb_device: Detected (kind of) an USB device
[snapscan] snapscani_usb_open(libusb:006:002)
[snapscan] add_usb_device: Checking if 0x04b8 is a supported USB vendor ID
[snapscan] snapscani_check_device()
[snapscan] mini_inquiry
[snapscan] snapscan_cmd
[snapscan] snapscani_usb_cmd(0,0xbfffd1c0,6,0xbfffd190,0xbfffd18c (36))
[snapscan] atomic_usb_cmd(0,0xbfffd1c0,6,0xbfffd190,0xbfffd18c (36))
[snapscan] usb_cmd(0,0xbfffd1c0,6,0xbfffd190,0xbfffd18c (36))
[snapscan] usb_cmd: cmdlen=6, datalen=0
[snapscan] usb_write: writing:  0x12 0x00 0x00 0x00 0x24 0x00
[snapscan] Written 6 bytes
[snapscan] usb_read Only 0 bytes read
[snapscan] usb_read: reading:  0x12 0x00 0x00 0x00 0x24 0x00 0x00 0x00
[snapscan] Read 0 bytes
[snapscan] mini_inquiry: snapscan_cmd command failed: Error during 
device I/O
[snapscan] snapscani_check_device: mini_inquiry failed with Error during 
device I/O.
[snapscan] snapscani_usb_close(0)
[snapscan] 1st read 0 write 1
[snapscan] snapscani_usb_cmd(0,0xbfffd140,6,0xbfffd0c0,0xbfffd0b0 (120))
[snapscan] atomic_usb_cmd(0,0xbfffd140,6,0xbfffd0c0,0xbfffd0b0 (120))
[snapscan] usb_cmd(0,0xbfffd140,6,0xbfffd0c0,0xbfffd0b0 (120))
[snapscan] usb_cmd: cmdlen=6, datalen=0
[snapscan] usb_write: writing:  0x12 0x00 0x00 0x00 0x78 0x00
[snapscan] Written 6 bytes
[snapscan] usb_read Only 0 bytes read
[snapscan] usb_read: reading:  0x12 0x00 0x00 0x00 0x78 0x00 0x00 0x00
[snapscan] Read 0 bytes
[snapscan] 2nd read 0 write 2
[snapscan] sane_snapscan_get_devices (0xbfffe3b8, 0)
device `v4l:/dev/video0' is a Noname Vanilla iTVC15 card virtual device
[snapscan] sane_snapscan_exit
#

(the scanner is no longer presented, and only returns when everything is 
reset).