| Register |
R/W |
Description |
Default
Value |
| 00h-1Fh |
- |
Probably unused |
Starts at 0xFF, decreases to 0x06 |
| 20h | (R?)W | Input Format Control (undocumented): Bit 7: Unused? No apparent effect. Bit 6: Unknown (OV518+ Windows driver sets this). No apparent effect . Bit 5: Unknown, affects image/compression format. ph[7], bit 4 -> 0 Bit 4: Unknown, affects image/compression format. ph[6], bit 0 -> 1 Bit 3: 1: Enable 8-bit YVYU/GRGB input format. 0: Enable 16-bit YUV/GBR 4:2:2 input format. ph[6], bit 3 -> 1 Bit 2: "Adjust YUV". Enables UV channel and disables Y. It is not known what data is in the UV channels. Bit 1: "Reverse UV". No apparent effect. Bit 0: Appears to decimate Y data. Low pass filter? Effect on UV is unknown. |
0x00 |
| 21h | (R?)W | Undocumented (related to frame rate control). Appears to be related to reg 71h. Only used with OV518+? | 0x10 |
| 22h | (R?)W | Undocumented (related to frame rate control, probably frame drop) | 0x18 |
| 23h | (R?)W | Undocumented (related to frame rate control, probably frame drop) | 0xFF |
| 24h | (R?)W* | Undocumented mode initialization function; dependent on sensor resolution (decimation?) | 0x00 |
| 25h | (R?)W | Undocumented mode initialization function; dependent on sensor resolution (decimation?) | 0x00 |
| 26h | (Has snapshot function) | 0x00 | |
| 27h | (Has snapshot function) | 0x00 |
| Register |
R/W |
Description |
Default
Value |
| 28h |
RW* |
Down-sampling Control: Bit 7~6: (ph[6], bit 6 and 5)
Bit 3~0: Setting this to >0 enables manual quantization level control. Higher => more quantization. Disables dynamic quantization tables in data stream. ph[6], bit 4 -> 0 |
0xC0 |
| 29h |
RW* |
Horizontal Segments Bit 5~0: width / 16 |
0x16 |
| 2Ah |
RW* |
Vertical Segments Bit 7~0: height / 4 |
0x48 |
| 2Bh |
RW* |
Horizontal Offset High Bit 1~0: Upper 2 bits of X offset (relative to HREF pulse) |
0x00 |
| 2Ch |
RW* |
Horizontal Offset Low Bit 7~0: Lower 8 bits of X offset (relative to HREF pulse) |
0x00 |
| 2Dh |
RW* |
Vertical Offset High Bit 1~0: Upper 2 bits of Y offset (relative to VSYNC pulse) |
0x00 |
| 2Eh |
RW* |
Vertical Offset Low Bit 7~0: Lower 8 bits of Y offset (relative to VSYNC pulse) |
0x00 |
| 2Fh |
W |
One Shot Register Bit 7: Changes to the registers marked with '*' in the R/W column won't take effect until this bit is set. Change takes place during vblank interval. Bit resets to 0 afterward. |
0x00 |
| Register |
R/W |
Bytes |
Description |
Default
Value |
| 30h |
W |
2 |
USB isochronous packet size. Must match
the current alternate selection. Optional packet number byte is not counted in size. |
0x80 |
| 31h |
(R?)W |
1 |
ISO Control (set to 0Fh during init) |
0x02 |
| 32h |
Undocumented |
0x00 |
||
| 33h |
(R?)W |
1 |
Unknown (set to 04h
during init) |
0x00 |
| 34h - 37h | Undocumented, probably unused | 0x00 |
||
| 38h
- 3Eh |
same | 1 |
Same functions as
28h-2Eh, but for snapshot mode |
same |
| 3Fh |
(R?)W |
1 |
Bit 7~5: Unused? Bit 4: Unknown initialization function Bit 3~0: Unused? |
0x00 |
| Register |
R/W |
Description |
Default
Value |
| 40h |
RW |
I2C Timeout Counter (bits 4~0) |
0x00 |
| 41h |
RW |
I2C Slave ID for 2 or 3 byte write cycles (bits 7~0) | 0x00 |
| 42h |
RW |
I2C Sub-address for 3-byte write cycles (bits 7~0) | 0x00 |
| 43h |
RW |
I2C Sub-address for 2-byte write cycles (bits 7~0) | 0x00 |
| 44h |
RW |
I2C Slave ID for 2-byte read cycles (bits 7~0) | 0x00 |
| 45h |
RW |
I2C Data Port (bits 7~0) | ~ |
| 46h |
RW |
I2C Clock Prescaler (bits 7~0) | 0x00 |
| 47h |
R/W |
I2C Control: (note: bits have
different meaning when read) Bit 7: Unknown function (set after write cycle in some cases) Bit 4: I2C Abort Bits 2-1: I2C Transaction Type: 00: 3-Byte write cycleBit 0: Launch new I2C bus cycle |
~ |
| 48h |
W |
I2C Snapshot Write Sub-address |
0x00 |
| 49h |
W |
I2C Snapshot Data Port |
0x00 |
| 4Ah-4Fh |
- |
Probably unused |
0x01 |
| Register |
R/W |
Description |
Default
Value |
| 50h |
RW |
System Reset: Bit 7: Omitted Bit 6: Reset registers and state machine (read-only, resets to 0 automatically) Bit 5: Omitted Bit 4: Omitted Bit 3: Omitted Bit 2: Undocumented, probably not used Bit 1: Omitted Bit 0: Do not set this bit! |
0x00 |
| 51h |
RW |
Bit 4~0: Camera clock
divisor. Lower == faster frame rate. Zero seems to be an invalid setting. |
0x02 |
| 52h |
-> |
Snapshot Control: Bit 4 (RW): Omitted Bit 3 (R): Snapshot status Bit 2 (W): Omitted Bit 1 (W): Reset snapshot Bit 0 (RW): Enable snapshot (must set again after every snapshot event) |
0x01 |
| 53h |
W |
System Reset and Control: Bit 7~1: Omitted Bit 0: Enable system |
0xC0 |
| 54h |
RW |
Bits 7~4: Unused Bits 3~2: GPIO clock ("Debounced Clock") select 00: 375 Hz 01: 750 Hz 10: 1.5 KHz 11: 96 KHz Bits 1~0: Switching power clock output select 00: 24 KHz 01: 48 KHz 10: 96 KHz 11: 192 KHz |
0x0E |
| 55h |
R |
Bits 7~0: GPIO data inputs |
~ |
| 56h |
RW |
Bits 7~0: GPIO data outputs (LED is usually
attached to bit 1) |
0x00 |
| 57h |
RW |
Bits 7~0: GPIO IO direction control (0=output,
1=input) |
0xFF |
| 58h |
R |
Bits 7~0: GPIO pulse data inputs |
~ |
| 59h |
W |
Bits 7~0: GPIO pulse clear (0=normal, 1=clear) |
~ |
| 5Ah |
RW |
Bits 7~0: GPIO pulse polarity (0=positive,
1=negative; documentation discrepancy: may be backwards) |
0xFF |
| 5Bh |
RW |
Bits 7~0: GPIO pulse enabled (0=disabled,
1=enabled) |
0x00 |
| 5Ch |
RW |
Bits 7~0: GPIO reset mask (0=unmask, 1=mask) |
0x00 |
| 5Dh |
RW |
Power-Down Control | 0x02 |
| 5Eh |
RW |
Bits 7~0: User defined R/W bits |
0x00 |
| 5Fh |
R |
Bits 4~0: Revision ID (Connected to revision
ID pins) |
~ |
| Register |
R/W |
Description |
Default
Value |
| 60h-6Fh |
- |
Probably unused |
0x01 |
| Register |
R/W |
Description |
Default
Value |
| 70h |
0x10 |
||
| 71h |
R/W |
Unknown (seems to
affect quantization when set to 00). Appears to be related to reg 21h. Possibly dynamic quantization range? |
0x1E |
| 72h |
0x81 |
||
| 73h-7Fh |
- |
Probably unused |
0x01 |
| Register |
R/W |
Description |
Default
Value |
| 80-8Fh |
RW |
Y Quantization Table 32 values: first value goes in lower 4 bits of each reg, next value goes in upper 4 bits and so on. |
(multiple values) |
| 90-9Fh |
RW |
UV Quantization Table 32 values: first value goes in lower 4 bits of each reg, next value goes in upper 4 bits and so on. |
(multiple values) |
| Register |
R/W |
Bytes |
Description |
Default
Value (lowest byte only) |
| C0h |
0x87 |
|||
| C1h |
0x02 |
|||
| C2h |
0x19 |
|||
| C3h |
0x0F |
|||
| C4h |
W |
2 |
Unknown (related to
memory/
frame rate control) |
0xC8 |
| C5h |
0x03 |
|||
| C6h |
W |
2 |
Unknown (related to
memory/
frame rate control) |
0x7D |
| C7h |
W |
2 |
Unknown (related to
memory/
frame rate control) |
0x7D |
| C8h |
W |
2 |
Unknown (related to
memory/frame rate control) |
0x72 |
| C9h |
0x03 |
|||
| CAh |
W |
3 |
Unknown (related to
memory/frame rate control) |
0x23 |
| CBh |
W |
2 |
Unknown (related to
memory/
frame rate control) |
0xEA |
| CCh |
W |
2 |
Unknown (related to
memory/
frame rate control) |
0xDC |
| CDh |
W |
2 |
Unknown (related to
memory/
frame rate control) |
0x2D |
| CEh |
W |
2 |
Unknown (related to
memory/
frame rate control) |
0x53 |
| CFh |
0x53 |
| Byte |
Description |
Controlling Register |
| 0 |
Always 0? |
N/A |
| 1 |
Always 0? |
N/A |
| 2 |
Always 0? |
N/A |
| 3 |
Always 0? |
N/A |
| 4 |
Bits 7~2: Unknown (Always 0?) Bits 1~0: Unknown (Usually 10 or 11) |
N/A? |
| 5 |
Always 0? |
N/A |
| 6 |
Bit 7: Unknown (Always 0?) Bit 6~5: Output format Bit 4: Dynamic quantization Bit 3: 8-bit YVYU/GRGB input format Bit 2: Unknown (Always 1?) Bit 1: Odd/Even field? Bit 0: Unknown |
Unknown Reg 0x28, Bit 7~6 Reg 0x28, ~Bits 3~0 Reg 0x20, Bit 3 Unknown Reg 0x46, Bit 2? Reg 0x20, Bit 4 |
| 7 |
Bit 7~5: Unknown (Always 1?) Bit 4: Unknown Bit 3~0: Frame counter |
Unknown Reg 0x20, ~Bit 5 Reset by Reg 0x2f? |