This is some information about my Canon LiDE 35. It is probably partly wrong. GPIO-Infos: name function dir startup scan GPIO1: SCAN button in on on GPIO2: FILE button in on on GPIO3: E-MAIL button in on on GPIO4: COPY button in on on GPIO5: ? in on on GPIO6: ? in off off GPIO7: ? in off on GPIO8: ? out off on GPIO9: ? out on off GPIO10: ? out off on GPIO11: ? out off off GPIO12: ? out off off GPIO13: ? in on on GPIO14: ? out off off GPIO15: ? out off off GPIO16: ? out off off GPO17: ? out off on GPO18: ? out off on These are observations while playing with the GPIO pins: - before switching GPIO17 from off to on GPIO8 must be on. GPIO8 can be reset afterwards(Scanner hangs/reconnects? otherwise). - GPIO16 is off during calibration. i get ff ff ff ... when off, (like)45 12 41 ... when on - if GPIO18 is off scanner does not stop at home position - If GPIO9 is on the motor is switched off(not completely though. while scanning it is still actuated, but not moving) - if GPIO17 is off scanner does not light leds and does not detect "not home" Motor: bipolar Chips: Genesys GeneScan III,GL842, USB 2.0 2-in-1 Scanner Controller GL842 Wolfson Microelectronics, WM8199CDS, 16bit 20MSPS Image Digitiser WM8199CDS M11L41625SA, 3.3V EDO RAM 4MB(i didn't look inside mine, but should be similar) motordriver chip: SANYO LB1940T 20pin : LB1940 other chips: 14pin :LA5664 SANYO LA5664M: "provides a stable 5V output for inputs from 4 to 5.6V" 14pin : 324 Z27211/Z9S428 SGS-THOMSON Microelectronics(from Logo), Guess: LM324, Quad OpAmp 8 pin : 9953A(Dual P-Channel MOSFET?)/4801 A2288 no information about this one FEEDL, SCANFED and LINECNT define steps FMOVNO, STEPNO, FSHDEC, MOVDEC and DECSEL define pixel time (?) FASTFED = 1 speed | FEEDL | ^ ----------> | SCANFED | LINECNT | ! ^ \ -------------------------> ! / \ ^ \ ! /<--FMOVNO(4)-->\ /<--STEPNO(1) FSHDEC(3)-->\ !/ v/ v --+---------------------------------------------------->position !^ / ! \<--MOVDEC(5), DECSEL FMOVNO(4)-->/ ! \ / ! \ v ! <------------------------------------------ FASTFED = 0 speed ^ | FEEDL | LINECNT | ! --------------------------------------------> ! ^ \ ! /<--STEPNO(1) FSHDEC(3)-->\ !/ v --+---------------------------------------------------->position !^ / ! \<--MOVDEC(5), DECSEL FMOVNO(4)-->/ ! \ / ! \ v ! <------------------------------------------ speed ^ buffer full v !------>------------>------------> ! ^ \ ! /<--STEPNO(1)-->\ ! / v --+------------------------------->position ! ^ / ! \<--FASTNO(2)-->/ ! \ / ! \ v ! <---------- RAM:(1200dpi in hw) +---------------+ ! 0x00000 !red channel shading mapping ! 0x054ff ! +---------------+ ! 0x05500 !green channel shading mapping ! 0x0a9ff ! +---------------+ ! 0x0aa00 !blue channel shading mapping ! 0x0feff ! +---------------+ ! 0x10000 !slope curve table 1 ! 0x101ff ! +---------------+ ! 0x10200 !slope curve table 2 ! 0x103ff ! +---------------+ ! 0x10400 !slope curve table 3 ! 0x105ff ! +---------------+ ! 0x10600 !slope curve table 4 ! 0x107ff ! +---------------+ ! 0x10800 !slope curve table 5 ! 0x109ff ! +---------------+ ! 0x10b00 !written to by windows driver ! 0x10cff ! +---------------+ ! 0x11000 !image data buffer !0x3FFFF/0x7FFFF! +---------------+ slope-tables: little-endian 16bit. each entry represents the pixeltime to wait before actuating the motor again longest time(slowest) first. Two values per step. white/dark-shading: output=(input-darkvalue)*whitevalue/0x4000 gamma: increment mode: output is first value >= input decrement mode: output is last value <= input gamma is calculated as usual. windows driver uses 2.2. given a dark color dc and a bright color bc the white/darkvalue is: whitevalue=0x40000000/(bc-dc) darkvalue=dc make sure to use the same settings for calibration and scanning, otherwise you may observe vertical lines. There is an usb request which i cannot make sense of: requesttype = REQUESTTYPE_IN request = REQUEST_REQISTER value = 0x8e index = 0x18 or 0x0c results in one byte sent back For index=0x18 result bit3 seems to indicate a bulk read/write in progress