Creative Zen Vision M rescue operation
Introduction
I’ve recently done a rescue operation of a Creative Zen Vision M 30G device that refuses to power up. I’m writing it up so people who have the same problem could find help.
Three primary failure points are:
- battery
- hard drive
- motherboard
Helpful links I discovered:
- various Zen problem discussions and instructions on how to open the thing up: Zen Vision:M Hacks, Mods, & Repairs forum at anythingbutipod.com
- battery might be dead too: Replacement battery LPCS285385
- seeing if the hard drive is alive and extracting the music: ZenRecover – A filesystem recovery tool for the Creative NJB3/Zen™ players
- ZIF to IDE conversion for the 1.8″ hard drive
- 0xED – pretty nice hex editor for OS X
Opening the device
Was relatively easy. Unscrew small screws and try not to break the plastic. anythingbutipod forum has videos and pictures on how to do this.
Hard drive
…is a ZIF connector 1.8″ Hitachi HTC426030G5CE00 30G. To do any meaningful recovery operations on it, you probably need to use a ZIF to 2.5″ IDE converter. That’s what I did anyway. That converter then connects to a run of the mill IDE to USB converter.
Fortunately, the disk seems to be alive and well, I could read everything through /dev/disk2.
Filesystem, extracting data
Zen uses custom filesystems to store whatever it needs to store, MiniFS for operating system stuff and CFS for user stuff. Tobia Conforto has just recently done some fabulous work with his ZenRecover python script and information web page. This information helped me along alot. His device was a Nomad Jukebox 3. There are some differences to the newer Vision M device, which we were fortunately able to figure out together over a few hours of debugging sessions over Skype.
Below are the differences I had to make to the original ZenRecover.py script:
- cluster size has changed from 0x2000 bytes (8K) to 0x8000 bytes (32K), so CFS starts at offset 0x3200000
- Vision M doesn’t need to do byteswapping on the data
- but uint32 is stored in a different order
- so are the metadata tag bytes
After making needed modifications to the script, I run:
python 8kzenrecover.py -o 52428800 /dev/disk2 songs /Volumes/ZenRescueDir
It worked! Thanks a lot to Tobia for his help figuring the newer device quirks out. I’m sending him the updated script and let him maintain the versions, URL is listed above. Write a comment on this post if you have any questions.
Source code
EDIT #2: I’ve gisted the source code: http://gist.github.com/237256, version control ftw.
EDIT: Tobia is a bit busy and hasn’t managed to upload the Vision:M compatible script on his web page, so I’m making it available for download here in the meanwhile.