[sane-devel] Canoscan 3000f protocol

Stef stef.dev at free.fr
Wed Apr 10 04:56:34 UTC 2013


     Hello,

     the Canon 3000F is reported to be a gl660+gl646 genesys ASIC. While 
analyzing USB log from this scanner, I could confirm it is using a GL660 
USB to IEEE-1284 bridge. However the procotol used on top of if doesn't 
look like a genesys GLxxx one. Another thing is that GL646 datasheet 
describes IEEE 1394 (firewire) and USB operation, no IEEE 1284 mode. So 
I would be surprised if an USB genesys scanner ASIC is used. I'd rather 
expect an 1284 chip behind the bridge, not one that can do USB natively.

     In the hope someone can suggest the scanner chip (so I don't have 
to disassemble and unsolder my scanner to find out the real ASIC), here 
are some excerpts of a semi decoded USB log (read/write are actually 
EPPADR+EPPDATA read and write):

At start there are many small blocks like this:
......
write(0x92,0x00)
write(0xcf,0x00)
write(0xa3,0x10)
write(0xa1,0x3f)
write(0x97,0x0a)
read(0x8b)=0x5f
read(0x8b)=0x5f
write(0x97,0x0f)
read(0x8b)=0xc3
.......

     And "full register set" write looks like:
write(0xb0,0x00)
write(0xb1,0x00)
write(0xb2,0x00)
write(0xb3,0xff)
write(0xb4,0x7f)
write(0xb5,0x04)
write(0xb6,0xfc)
write(0xb7,0x0f)
write(0xb8,0xf8)
write(0xb9,0x1f)
write(0xbc,0x00)
write(0xbd,0x01)
write(0x83,0x22)
write(0x85,0xd0)
write(0x83,0x02)
write(0x85,0x07)
write(0x9b,0x14)
write(0x98,0x00)
write(0x99,0x00)
write(0x9a,0x00)
write(0x9b,0x15)
write(0x98,0x00)
write(0x99,0x00)
write(0x9a,0x00)
write(0x9b,0x16)
write(0x98,0x00)
write(0x99,0x00)
write(0x9a,0x00)
write(0x9b,0x17)
write(0x98,0x00)
write(0x99,0x00)
write(0x9a,0x00)
write(0x9b,0x14)
write(0xcf,0x0c)
write(0x9e,0x00)
write(0x9f,0x60)
write(0x83,0xa0)
write(0xa0,0x00)
write(0x9c,0x00)
write(0x9d,0x00)
write(0x8e,0x00)
write(0x8b,0x00)
write(0xbb,0x00)
write(0x80,0xe0)
write(0x80,0xe1)
write(0x83,0x82)
write(0x8d,0x00)
write(0x93,0x86)
write(0x83,0xa2)
write(0x8d,0xff)
write(0xa8,0x80)
write(0x04,0x00)
write(0x00,0x00)
write(0x01,0x03)
write(0x03,0x52)
write(0x02,0x04)
write(0x05,0x00)
write(0x28,0x01)
write(0x29,0x01)
write(0x2a,0x01)
write(0x20,0xb9)
write(0x21,0xb9)
write(0x22,0xb9)
write(0x24,0x00)
write(0x25,0x00)
write(0x26,0x00)
write(0x83,0x22)
write(0x85,0x08)
write(0x83,0x02)
write(0x85,0x00)
write(0x84,0x00)
write(0x84,0x95)
write(0xc0,0xd0)
write(0xc1,0x01)
write(0xc2,0x00)
write(0xc3,0x01)
write(0xc4,0x00)
write(0xc5,0x00)
write(0xc6,0xd0)
write(0xc7,0xd0)
write(0xc8,0x11)
write(0x88,0xd0)
write(0x89,0x24)
write(0x86,0x00)
write(0x90,0x20)
write(0x83,0x82)
write(0x90,0x20)
write(0xb0,0x00)
write(0xb1,0x80)
write(0xb2,0x1e)
write(0xb3,0xfd)
write(0xb4,0xff)
write(0xb5,0x1f)
write(0x92,0x60)
.....

     Only "register" 0x8b seems to be read back from ASIC, while 0x00, 
0x01, 0x02, 0x03, 0x04, 0x05, 0x20, 0x21, 0x22, 0x24, 0x25, 0x26, 0x28, 
0x29, 0x2a, 0x80, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8b, 
0x8c, 0x8d, 0x8e, 0x90, 0x92, 0x93, 0x94, 0x97, 0x98, 0x99, 0x9a, 0x9b, 
0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 
0xa8, 0xa9, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 
0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 
0xc7, 0xc8, 0xce, 0xcf are written.

     Any suggestion is welcomed.

Regards,
     Stef







More information about the sane-devel mailing list