CVS Camcorder Hacking Progress...

Introduction

This page provides info on my hacking progress of the CVS camcorder. This is not an instruction
page with steps for others to reproduce. My plan is to modify a CVS camcorder by replacing the
installed NAND flash chip with an xD-Picture card. While this will allow me to remove my movies,
it is way too much work to repeat on multiple cameras. A camera modified in this way will be an
an excellent test-bed for firmware hacking. I will be able to test firmware modifications
without worrying about "killing" the camera. I can simply re-program the flash through my PC's
card reader with modified versions of firmware whenever needed.


The Plan

1. Unsolder NAND flash from camcorder (mine is a B3 with a Samsung flash chip)
2. Solder xD socket into camcorder using the NAND pads
3. Connect NAND flash to USB xD reader (will use the one that provided the socket)
4. Use Linux and 'dd' to dump the entire contents of the flash to my computer
5. Use Linux and 'dd' to write this image (or the important parts) to a 128MB xD card
6. Insert the card into the camcorder and it boots normally (hopefully)


Progress

1. I was able to unsolder the flash chip without too much difficulty. I work at a company
that builds surface mount boards, so I have access to hot-air tools to do this work.

2. I purchased a multiformat flash reader, xD to smartmedia adapter and a 128MB xD card.
I removed the xD socket from the adapter and after about 3 hours of very careful soldering
under the scope, I was able to mount the xD socket in my camcorder and wire it to the pads
of the removed flash chip.

NOTE: I revised the schematic after realizing that my adapter card did not route the GND signal
as I originially thought.

REVISED: Schematic of the wiring of the xD socket to flash (pads & chip)

Pictures...

xD to Smartmedia adapter with the xD socket removed. I will be attaching the Samsung flash
chip to the pads on this card as soon as my TSOP1 proto board from schmartboards arrives. I
should then be able to dump the contents of the flash to my Linux box.

 


Pics of the modified camera with the xD socket installed. Some are a little blurry, but you
get the idea.







These pics are extracted from a video clip shot through the soldering scope at the office.
A few of the pin numbers are marked in red to give a frame of reference. The clear stuff is silicone
adhesive to help keep the wires from lifting the solder pads.







Picture of the completed flash reader. This worked exactly as planned. I plugged this into
my multi-format card reader on my Linux box and dumped the entire 128MB with the command

    dd if=/dev/sda of=flashchip.img bs=512 count=256000



Dumping the entire 128MB only took about 7-9 minutes. I then repeated this process to "flashchip2.img" and
used the diff command to compare the two files. The files were identical, which confirms that there were no
random bit flips. I removed the flash chip and inserted my xD card into the reader. I used the following command
to dump the chip image to my card:

    dd of=/dev/sda if=flashchip.img bs=512 count=256000

This took a bit longer (not sure how long, I went to pick up my daughter and came back and it was done).
I read the contents back and used diff to verify that it matched flashchip.img.

I have had some problems getting the camera running using the xD card. While I work that issue, here is
some additinal info on the flash image I downloaded:

I was able to mount the individual disk partitions from the image file on my linux box using the following commands:

     mount -o loop,offset=1819136 -t vfat flashchip.img /mnt/data              /* 0x1BC200 */
     mount -o loop,offset=1285120 -t vfat flashchip.img /mnt/resourceA       /* 0x139C00 */
     mount -o loop,offset=130482176 -t vfat flashchip.img /mnt/resourceB    /* 0x7C70000 */
     mount -o loop,offset=130547712 -t vfat flashchip.img /mnt/resourceC    /* 0x7C80000 */
Filesystem               1K-blocks    Used Available Use% Mounted on
/bd2/flash/flashchip.img    125616    5840    119776   5% /mnt/data
/bd2/flash/flashchip.img       506     150       356  30% /mnt/resourceA
/bd2/flash/flashchip.img        59       3        56   6% /mnt/resourceB
/bd2/flash/flashchip.img       506     438        68  87% /mnt/resourceC
You will notice that these offsets do not agree completely with morcheeba's map. This might be due to
the fact that my camera is a B3 version. I don't think I can mount the firmware partition as it does
not appear to be a real disk partition. I should still be able to modify it directly or extract it
from the overall image if needed.

Here is a complete file listing of all the partitions I can mount:
/mnt/data:
total 32
drwxr-xr-x  3 root root 16384 May 25 11:09 dcim
-rwxr-xr-x  1 root root  1394 Jul 28 12:20 statfile.txt

/mnt/data/dcim:
total 16
drwxr-xr-x  2 root root 16384 Jul 28 11:43 100coach

/mnt/data/dcim/100coach:
total 5792
-rwxr-xr-x  1 root root 2842382 Jul 28 11:44 pict0001.avi
-rwxr-xr-x  1 root root  842406 Jul 28 12:18 pict0002.avi
-rwxr-xr-x  1 root root 2217742 Jul 28 12:20 pict0003.avi

/mnt/resourceA:
total 150
-rwxr-xr-x  1 root root   898 Jul 31  1971 adc.bin
-rwxr-xr-x  1 root root   220 Jul 31  1971 ae.bin
-rwxr-xr-x  1 root root   224 Jul 31  1971 aegain.bin
-rwxr-xr-x  1 root root    72 Jul 31  1971 af.bin
-rwxr-xr-x  1 root root   263 Jul 31  1971 agc1.bin
-rwxr-xr-x  1 root root   263 Jul 31  1971 agc.bin
-rwxr-xr-x  1 root root    13 Jul 31  1971 agccfg.bin
-rwxr-xr-x  1 root root    16 Jul 31  1971 AVIMODELSTR.BIN
-rwxr-xr-x  1 root root    38 Jul 31  1971 AVISTRLSTR.BIN
-rwxr-xr-x  1 root root    54 Jul 31  1971 awbcfg.bin
-rwxr-xr-x  1 root root    24 Jul 31  1971 AWBSETTINGS.BIN
-rwxr-xr-x  1 root root   128 Jul 31  1971 BASENLGF0.BIN
-rwxr-xr-x  1 root root  4592 Jul 31  1971 b.bin
-rwxr-xr-x  1 root root 17328 Jul 31  1971 COLORCHART.JPG
-rwxr-xr-x  1 root root 10460 Jul 31  1971 comic.bin
-rwxr-xr-x  1 root root  7844 Jul 31  1971 ctlut1.bin
-rwxr-xr-x  1 root root    64 Jul 31  1971 dlut.bin
-rwxr-xr-x  1 root root   124 Jul 31  1971 eps_gcp0.bin
-rwxr-xr-x  1 root root    64 Jul 31  1971 eps_xscl.bin
-rwxr-xr-x  1 root root   256 Jul 31  1971 GAMMADDE1.BIN
-rwxr-xr-x  1 root root   960 Jul 31  1971 GAMMALUT0.BIN
-rwxr-xr-x  1 root root   960 Jul 31  1971 GAMMALUT1.BIN
-rwxr-xr-x  1 root root   960 Jul 31  1971 GAMMALUT2.BIN
-rwxr-xr-x  1 root root   960 Jul 31  1971 GAMMALUT3.BIN
-rwxr-xr-x  1 root root   960 Jul 31  1971 GAMMALUT4.BIN
-rwxr-xr-x  1 root root   960 Jul 31  1971 GAMMALUT5.BIN
-rwxr-xr-x  1 root root   960 Jul 31  1971 GAMMALUT6.BIN
-rwxr-xr-x  1 root root   960 Jul 31  1971 GAMMALUT7.BIN
-rwxr-xr-x  1 root root   960 Jul 31  1971 GAMMALUT8.BIN
-rwxr-xr-x  1 root root   960 Jul 31  1971 GAMMALUT9.BIN
-rwxr-xr-x  1 root root  4252 Jul 31  1971 gpp.bin
-rwxr-xr-x  1 root root  2159 Jul 31  1971 GRAYCHART.JPG
-rwxr-xr-x  1 root root   928 Jul 31  1971 i.bin
-rwxr-xr-x  1 root root   512 Jul 31  1971 lclut0.bin
-rwxr-xr-x  1 root root    50 Jul 31  1971 MEDIAFORMAT.BIN
-rwxr-xr-x  1 root root 59268 Jul 31  1971 motofont.bin
-rwxr-xr-x  1 root root  3320 Jul 31  1971 p.bin
-rwxr-xr-x  1 root root   782 Jul 31  1971 tg1.bin
-rwxr-xr-x  1 root root   782 Jul 31  1971 tg.bin
-rwxr-xr-x  1 root root    12 Jul 31  1971 tgcfg.bin
-rwxr-xr-x  1 root root     6 Jul 31  1971 USBDEVDESC.BIN
-rwxr-xr-x  1 root root    36 Jul 31  1971 USBMODEDESC.BIN
-rwxr-xr-x  1 root root    28 Jul 31  1971 USBMSINQSTR.BIN
-rwxr-xr-x  1 root root    46 Jul 31  1971 USBSTRINGS.BIN
-rwxr-xr-x  1 root root    38 Jul 31  1971 vidsize.bin
-rwxr-xr-x  1 root root    44 Jul 31  1971 wavexif.bin
-rwxr-xr-x  1 root root    64 Jul 31  1971 ylut.bin

/mnt/resourceB:
total 3
-rwxr-xr-x  1 root root 2052 Jul 28 12:21 usp.bin

/mnt/resourceC:
total 116
-rwxr-xr-x  1 root root   764 Nov 28  2037 DEFECTIVEPIXEL0.BIN
-rwxr-xr-x  1 root root  2052 Jul 31  1971 fsp.bin
-rwxr-xr-x  1 root root 14705 May 25 11:09 logo.jpg
-rwxr-xr-x  1 root root  7994 Jul 31  1971 playback.wav
-rwxr-xr-x  1 root root 24552 Jul 31  1971 PROCESSED.JPG
-rwxr-xr-x  1 root root 18274 May 25 11:09 shutdown.jpg
-rwxr-xr-x  1 root root   998 Jul 31  1971 sound0.wav
-rwxr-xr-x  1 root root  3186 Jul 31  1971 sound1.wav
-rwxr-xr-x  1 root root  7994 Jul 31  1971 sound2.wav
-rwxr-xr-x  1 root root  3508 Jul 31  1971 sound8.wav
-rwxr-xr-x  1 root root 24634 May 25 11:09 splash.jpg
drwxr-xr-x  2 root root  5120 Jul 31  1971 zbm

/mnt/resourceC/zbm:
total 322
-rwxr-xr-x  1 root root  1056 Jul 31  1971 BATTLEVEL0.ZBM
-rwxr-xr-x  1 root root  1056 Jul 31  1971 BATTLEVEL1.ZBM
-rwxr-xr-x  1 root root  1056 Jul 31  1971 BATTLEVEL2.ZBM
-rwxr-xr-x  1 root root  1056 Jul 31  1971 BATTLEVEL3.ZBM
-rwxr-xr-x  1 root root  1056 Jul 31  1971 BATTLEVELE.ZBM
-rwxr-xr-x  1 root root 30832 Jul 31  1971 blank.zbm
-rwxr-xr-x  1 root root 30832 Jul 31  1971 camempty.zbm
-rwxr-xr-x  1 root root 30832 Jul 31  1971 camfull.zbm
-rwxr-xr-x  1 root root 38432 Jul 31  1971 camproce.zbm
-rwxr-xr-x  1 root root  4128 Jul 31  1971 clear.zbm
-rwxr-xr-x  1 root root   544 Jul 31  1971 colon.zbm
-rwxr-xr-x  1 root root 30832 Jul 31  1971 deleted.zbm
-rwxr-xr-x  1 root root  7200 Jul 31  1971 DELETE-VIDEO.ZBM
-rwxr-xr-x  1 root root  6176 Jul 31  1971 NOTDELETED.ZBM
-rwxr-xr-x  1 root root   288 Jul 31  1971 PLAYTIMER-0.ZBM
-rwxr-xr-x  1 root root   288 Jul 31  1971 PLAYTIMER-1.ZBM
-rwxr-xr-x  1 root root   288 Jul 31  1971 PLAYTIMER-2.ZBM
-rwxr-xr-x  1 root root   288 Jul 31  1971 PLAYTIMER-3.ZBM
-rwxr-xr-x  1 root root   288 Jul 31  1971 PLAYTIMER-4.ZBM
-rwxr-xr-x  1 root root   288 Jul 31  1971 PLAYTIMER-5.ZBM
-rwxr-xr-x  1 root root   288 Jul 31  1971 PLAYTIMER-6.ZBM
-rwxr-xr-x  1 root root   288 Jul 31  1971 PLAYTIMER-7.ZBM
-rwxr-xr-x  1 root root   288 Jul 31  1971 PLAYTIMER-8.ZBM
-rwxr-xr-x  1 root root   288 Jul 31  1971 PLAYTIMER-9.ZBM
-rwxr-xr-x  1 root root   288 Jul 31  1971 PLAYTIMER-COLON.ZBM
-rwxr-xr-x  1 root root  4128 Jul 31  1971 play.zbm
-rwxr-xr-x  1 root root 30832 Jul 31  1971 PROCESSED.ZBM
-rwxr-xr-x  1 root root 30832 Jul 31  1971 ready.zbm
-rwxr-xr-x  1 root root  4128 Jul 31  1971 rec0000.zbm
-rwxr-xr-x  1 root root  4128 Jul 31  1971 record.zbm
-rwxr-xr-x  1 root root   288 Jul 31  1971 REC-TIMER-0.ZBM
-rwxr-xr-x  1 root root   288 Jul 31  1971 REC-TIMER-1.ZBM
-rwxr-xr-x  1 root root   288 Jul 31  1971 REC-TIMER-2.ZBM
-rwxr-xr-x  1 root root   288 Jul 31  1971 REC-TIMER-3.ZBM
-rwxr-xr-x  1 root root   288 Jul 31  1971 REC-TIMER-4.ZBM
-rwxr-xr-x  1 root root   288 Jul 31  1971 REC-TIMER-5.ZBM
-rwxr-xr-x  1 root root   288 Jul 31  1971 REC-TIMER-6.ZBM
-rwxr-xr-x  1 root root   288 Jul 31  1971 REC-TIMER-7.ZBM
-rwxr-xr-x  1 root root   288 Jul 31  1971 REC-TIMER-8.ZBM
-rwxr-xr-x  1 root root   288 Jul 31  1971 REC-TIMER-9.ZBM
-rwxr-xr-x  1 root root   288 Jul 31  1971 REC-TIMER-COLON.ZBM
-rwxr-xr-x  1 root root   544 Jul 31  1971 redcolon.zbm
-rwxr-xr-x  1 root root   288 Jul 31  1971 STATTIMER-0.ZBM
-rwxr-xr-x  1 root root   288 Jul 31  1971 STATTIMER-1.ZBM
-rwxr-xr-x  1 root root   288 Jul 31  1971 STATTIMER-2.ZBM
-rwxr-xr-x  1 root root   288 Jul 31  1971 STATTIMER-3.ZBM
-rwxr-xr-x  1 root root   288 Jul 31  1971 STATTIMER-4.ZBM
-rwxr-xr-x  1 root root   288 Jul 31  1971 STATTIMER-5.ZBM
-rwxr-xr-x  1 root root   288 Jul 31  1971 STATTIMER-6.ZBM
-rwxr-xr-x  1 root root   288 Jul 31  1971 STATTIMER-7.ZBM
-rwxr-xr-x  1 root root   288 Jul 31  1971 STATTIMER-8.ZBM
-rwxr-xr-x  1 root root   288 Jul 31  1971 STATTIMER-9.ZBM
-rwxr-xr-x  1 root root   288 Jul 31  1971 STATTIMER-COLON.ZBM
-rwxr-xr-x  1 root root   288 Jul 31  1971 STATTIMER-E.ZBM
-rwxr-xr-x  1 root root  4640 Jul 31  1971 STATUSBARTEXT.ZBM
-rwxr-xr-x  1 root root  3104 Jul 31  1971 VIDEO-LENGTH.ZBM
-rwxr-xr-x  1 root root  3104 Jul 31  1971 VIDEO-NUMBER.ZBM
-rwxr-xr-x  1 root root  3104 Jul 31  1971 VIDEOS-SAVED.ZBM

Questions or comments? Send me an email, or better yet, post it to the camcorder forum at
www.camerahacking.com.


Tom Vickers, Last updated 08/06/2005
Send comments to vickers_tom@yahoo.com