Reg. | Data | Remark |
---|---|---|
0x00 | ---- | Write 0x04 to reset? |
0x01 | 0x03 | Scan type register? bit-oriented, bits 2, 3 and 7 are used. 12 bit pixels are used if bit 2 is set |
0x02 | 0xA0 | Scan type register? bit-oriented, bits 2, 3, 4, 5, and 7 are used. Bit 2 is set when reading/writing gamma data, bit 3 causes the carriage to move when reading USB bulk data, bit 5 enables the gain/offset table? |
0x03 | 0x05 | Status register? bit-oriented, bit 0, 1, 2, 3 and 4 are used. bit 0 controls lamp status, if bit 1 is writable the scanner supports gamma tables with 16-bit entries, bit 3 is set when the carriage is in the home position. |
0x04 | ---- | Not used, but register is readable and writeable |
0x05 | 0x01 | Low nibble and high nibble have separate meanings. When set incorrectly causes the carriage to move too far. Bit 0 needs to be set and seems the only relevant bit |
0x06 | 0x00 | bit-oriented. When bit 0 is set, the carriage moves twice as far (used for low LPI?). When bit 1 is set, the carriage does not move, but makes a buzzing sound. Readable on a HP3400c. |
0x07 | ---- | HP3400c specific. Writeable on a HP3400c. |
0x08 | 0x17 | 5399. Exposure time? The LPI (lines-per-inch) is determined by the ratio of this register and registers 0x0A/0x0B times 1200 (which also happens to be the hardware resolution). A higher number results in a brighter picture. |
0x09 | 0x15 | |
0x0A | 0xA2 | Motor speed code (lower is faster). Has a value of 674 for 150 lpi, 1349 for 300 lpi and 8099 for 600 lpi. Appears to be related to register 0x1E. I think this value should be an integer sub-multiple of register 0x08/0x09. |
0x0B | 0x02 | |
0x0C | 0x96 | 150. DPI code (horizontal resolution) |
0x0D | 0x00 | |
0x0E | 0x4A | 330. Right coordinate of scan area, inches * 1800 |
0x0F | 0x01 | |
0x10 | 0xE9 | 15593. Left coordinate of scan area, inches * 1800 |
0x11 | 0x3C | |
0x12 | 0xF7 | 1271. Width of scan area - 1, (number of pixels output) |
0x13 | 0x04 | |
0x14 | 0xF9 | (x - 1). Maximum buffer level (as read from reg 0x20) before backtracking occurs. Written with 0x24 (=36) when calibrating. Some high values still give a lot of backtracking. |
0x15 | ---- | 0x90 |
0x16 | ---- | 0x70 |
0x17 | 0xC4 | 452. Top of scan area, inches * 1200 |
0x18 | 0x01 | |
0x19 | 0xC4 | 452. Top of scan area |
0x1A | 0x01 | |
0x1B | 0x3C | 14652. Bottom of scan area.
(-> height = 14200 steps = 11.83 inch = 300.6 mm) This register does not seem to have an effect on the HP3300, it does on the HP3400/4300 |
0x1C | 0x39 | |
0x1D | 0x60 | Forward jogging speed. Agfa Touch writes 0x55 here. |
0x1E | 0x15 | Not written when calibrating. Controls reversing speed when backtracking (lower is faster). Value written to this register is value written to registers 0x0A/0x0B divided by 32. |
0x1F | 0x30 | Not written when calibrating. Value is either 0x18 or 0x30. Sets the distance to move back when backtracking. |
0x20 | ---- | Scanner buffer level. As data is scanned in but not quickly enough read out, the internal scanner buffer fills up. When the buffer level approaches the level given by register 0x14, the scanner backtracks to rescan part of the image. |
0x21 | ---- | HP3400/4300 specific. RAM data address, low 8 bits |
0x22 | ---- | HP3400/4300 specific. RAM data address, mid 8 bits |
0x23 | ---- | HP3400/4300 specific. RAM data address, high 8 bits |
0x24 | ---- | Data transfer register. This register is selected just before USB bulk transfer |
0x25 | xxxx | Analog front-end control. See also the table below. |
0x26 | xxxx | |
0x27 | 0x62 | 0x62 or 0xD2. Readable on HP3400c. |
0x28 | 0xC8 | 0xC8 or 0x7F. Readable on HP3400c. Another gain register? On my niash00014 chip, bit7 should always be set, bit 4/5 set the gain, bit 6 set means max gain. The low nibble represents a FIFO level? A value of 0 means no more garbage in the first few lines. |
0x29 | 0x53 | 0xB853 or 0x6421. Readable on HP3400c. Non-linearity compensation? Each nibble represents a factor, and should be smaller than the preceding one. |
0x2A | 0xB8 | |
0x2B | 0x15 | Not written when calibrating. Value is always 0x15. Controls backtracking reversing behaviour. |
0x2C | 0xFF | Lamp power control Value between 0 (lamp off) and 0x1FF (full on). The relationship between value and brightness is strongly non-linear, e.g. 0x010 already results in half brightness. See also this graph, which shows the average intensity measured during calibration vs. register value. |
0x2D | 0x01 | |
0x2E | ---- | Button status. Bits 1-4 indicate buttons states.
On the HP3300c: bit 2 = left button (scan), bit 4 = right button (print). On the HP4300c: bit 1 = scan, bit 2 = mail, bit 4 = print |
0x2F | ---- | Backward jogging speed. Agfa Touch writes 0x55 here. |
0x30 | ---- | ???. Agfa Touch writes 0x3F here. |
0x31 | ---- | |
0x32 | ---- | |
0x33 | ---- | |
0x34 | ---- | |
0x35 | ---- | |
0x36 | ---- | |
0x37 | ---- | |
0x38 | ---- | HP3400/4300 specific. Readable. Eeprom address? |
0x39 | ---- | HP3400/4300 specific. Readable. Eeprom data? |
0x3A | ---- | |
0x3B | ---- | HP3400/4300 specific. Readable. Eeprom control?. Bit 3 is status bit. |
0x3C | ---- | HP3400/4300 specific. Readable. LCD data = Number to write to display (BCD coded). Invalid BCD nibbles show up as 0x09 (0x0B displays 0x09 for example) |
0x3D | ---- | HP3400/4300 specific. Readable. LED and button control. bit0 = ColorLED, bit1 = BWLED, bit2 = UpDown?, bit3 = button1?, bit5 = (+) button, bit6 = button3?, bit7 = (-) button |
0x3E | ---- | Readable |
0x3F | ---- |
Reg. 0x25 | Reg 0x26 | Description |
---|---|---|
0x04 | 0x00 | Reset the AFE |
0x03 | 0x12 |
CDS Mode Reset Timing = normal Reset Level Clamp Voltage = 3.5V |
0x02 | 0x04 |
ADC output = inverting MUX output mode = 12 bit |
0x05 | 0x10 |
ADC output = 12 bit Offset DAC output range = +/- 1.25V |
0x01 | 0x03 |
Mode 4 = off Mono/colour select = colour Sampling mode = CDS ADC standby control = active |
0x20 | 0xC0 | Red offset |
0x21 | 0xC0 | Green offset |
0x22 | 0xC0 | Blue offset |
0x28 | 0x02 | Red gain |
0x29 | 0x02 | Green gain |
0x2A | 0x02 | Blue gain |
Address | Length | Data |
---|---|---|
0x000000 | 96 | Stepper motor acceleration profile, used when positioning head |
0x000400 | 36 | Stepper motor acceleration profile, used when actually scanning |
0x002000 | 56376 | Gamma and gain/offser table |