Request
|
Value
|
Index
|
Bytes
|
Description
|
R
0x00
|
xxxx
|
ADDR
|
1+
|
Read from external memory.
Addresses 0x2100-0x21FE are mapped to 0x1200; all others are left
alone. More than one byte is readable (I've verified 512). |
W
0x00
|
xx##
|
ADDR
|
0
|
Write a byte (in value_low) to
external memory
|
W
0x00
|
xxxx
|
ADDR
|
1+
|
Write multiple bytes to memory?
(just a guess)
|
W
0x10
|
xxxx
|
0000
|
|
Upload code. Use with care; will
probably destroy your camera.
|
W
0x10
|
xxxx
|
0001
|
|
Upload EEPROM data.
|
W
0x10
|
used
|
else
|
|
??
|
R
0x20
|
0000
|
0000
|
5
|
Get firmware revision. Returns
a constant 02 00 00 xx 02,
where xx is data at register
0x20FF, and was 05 when I tried. This might be a hardware
revision level. |
R
0x20
|
0000
|
0001
|
4
|
unknown. Returns a constant 01
26 30 00
|
R
0x21
|
0000
|
0000
|
1
|
Get ready status (ext. memory
0x0001). The upper nibble seems to be the operation mode, while the
lowest bit is set if data is ready for transfer from the Bulk Pipe.
|
R
0x21
|
0000
|
0001
|
1
|
Get some sort of status (ext.
memory 0x000b)
|
| R
0x21 |
0000
|
0002
|
1
|
Get some sort of status (ext.
memory 0x000c). While reading TOC, least significant bit set seems to
mean that the USB transfer was triggered. LS nibble is then cleared
when done. (May be called "Page Status")
|
R
0x21
|
0000
|
0003
|
7
|
Get all statuses at once:
Returns (0x000a) (index_low) (index_high) (0x0001) (0x000b) (0x000c)
(bRequest)
|
R
0x22
|
xxxx
|
xxxx
|
4
|
Returns 4 bytes from external
memory: (0x0005) (0x0004) (0x0003) (0x0002)
|
R
0x23
|
|
used
|
varies
|
??
|
R
0x24
|
xxxx
|
0000
|
1
|
Does some stuff, sets 0x0bb9 to
0,1,2, or 3, then returns (0bb9). 0bb9 seems to be some sort of
return-byte-count. - meaning unknown. |
R
0x24
|
xxxx
|
0008
|
1
|
Returns (0x0ed1) - meaning
unknown.
|
R
0x25
|
|
used
|
1
|
??
|
R
0x26
|
xxxx
|
xxxx
|
1
|
Returns (0x0264) - meaning
unknown. |
R
0x27
|
xxxx
|
xxxx
|
1
|
Returns (0x0f36) - meaning
unknown. |
R
0x28
|
0000
|
0000
|
1
|
Check to see if SDRAM-capable.
Returns 00 (not capable)
|
R
0x28
|
0000
|
0001
|
1
|
Check to see if FLASH-capable.
Returns 03, which I suspect is some size indicator.
|
R
0x28
|
0000
|
0002
|
-
|
Check to see if CARD-capable.
Does not return data (but there is a function to parse for this value!)
|
R
0x29
|
xxxx
|
xxxx
|
2
|
Return (0x0e9b) (0x0e5a) -
meaning unknown. May be "Data Time Request"
|
W
0x29
|
xxxx
|
xxxx
|
xx
|
Ignored. Is the time-of-day
clock setting,
but is not used in this camera.
|
R
0x2a
|
xxxx
|
0000
|
1
|
Return (0x0e5e) - meaning
unknown. |
R
0x2a
|
xxxx
|
0010
|
2
|
Return (0x25) (0x24) from
internal memory - meaning unknown. |
R
0x2d
|
xxxx
|
0000
|
3
|
Returns the first 3 digits of
the camera's serial number. This usually starts with 2 or 3 letters.
|
R
0x2d
|
xxxx
|
0001
|
8
|
Returns
the last 8 digits of the camera's serial number. These are usually
digits.
|
R
0x2d
|
xxxx
|
0002
|
1
|
Read
the initialization status. 0 means initialized, 1 means response was
incorrect, 2 means that the response has not been checked yet (write
the most significant byte last to check it). This status is stored in
external memory location 0x0ee7* and can be modified directly by a "W 0x00" command. (* will
probably change in future revisions of firmware)
|
R
0x2d
|
xxxx
|
0003
|
1
|
Read
the maximum number of pictures this camera can take (25).
|
R
0x2d
|
xxxx
|
0004
|
4
|
Returns
data - meaning unknown.
|
W
0x2d
|
xxxx
|
0000
|
1
|
Write
least significant byte of response. Set initialization status to 2
(in-progress)
|
W
0x2d
|
xxxx
|
0001
|
1
|
Write
next-to-least significant byte of response. Set initialization status
to 2 (in-progress) |
W
0x2d
|
xxxx
|
0002
|
1
|
Write
next-to-most significant byte of response. Set initialization status to
2 (in-progress) |
W
0x2d
|
xxxx
|
0003
|
1
|
Write most significant byte of
initialization response, calculates the correct response, and compare
the two. If correct, set initialization status to 0 (initialized),
otherwise set to 1 (wrong). You don't need to know the correct
initialization response or algorithm; you can read the correct response
from memory at 0x0ee1* (MSB) – 0x0ee4 (LSB). (* will probably
change in future revisions of firmware)
|
W
0x51
|
count
|
0000
|
0
|
Take a picture. Value contains the number of
pictures to take in succession (at a rate of about 1 every three
seconds), minus one. Since USB-only power alone doesn't seem to be
enough to charge the photo flash, these pictures are taken without it.
Not
in gphoto, but may work for other similar cameras cameras. Other values
of index may do
other things, but it seems that only 0000 works.
|
W
0x52
|
used
|
used
|
0
|
Delete picture(s). Index and
value parameters are used, but not quite known exactly how. gphoto sets
both to 0000, and that seems to delete all pictures (but I haven't
verified that).
|
R
0x54
|
0000
|
0000
|
2
|
Return
number of pictures stored
(n_toc_entries)
|
R
0x54
|
used
|
0001
|
varies
|
Get
table of contents (value =
n_toc_entries, must not be zero). Won't return anything if the
initialization hasn't been done.
|
R
0x54
|
used
|
0002
|
varies
|
Read a file. The value must be
the number in the file name, not the index number (as used in other
SPCA504-based cameras). For example, to load file "DSC_0003.JPG", value
should be 3. Won't return anything if the
initialization hasn't been done. |
R
0x54
|
xxxx
|
0003
|
1
|
Returns
some value (unknown, may be a counter, may be related to video capture)
|
R
0x54
|
xxxx
|
else
|
0
|
Resets
counter returned in index
= 0003. (not sure of function, may be a reset)
|
R
0x54
|
used
|
0003
|
1?
|
Return (0x0bce) (value
must not be zero)
|
R
0x54
|
used
|
else
|
0?
|
Sets (0x0bce) to 0. Value must
not be zero, index must not be 1, 2, or 3.
|