Data recovery with PC-3000

This page is not intended to be a PC-3000 guide but it will mainly describe some features and techniques to recover data from Apple SSD drives. This matter is barely documented even on ACELAB website so i decided to gather some info. Long story short, PC3000 is (at the moment) almost as good as ddrescue with asmall difference which will be described later. 
One of the most important things to keep in mind before you consider buying PC-3000: it does support apple AHCI Gumstick (gen.4) drives but controller used by apple drives is not supported and probably will never be. This means that if you have firmware/NAND problem, most likely it wont really help you unless device works for a while after you power-cycle the drive. In this case Data Extractor (part of PC-3000) will provide excellent job: it can soft and hard reset the drive and you can configure it to skip few blocks and try further. 
Since Chris is interested in building ddrescue-helper which would use power switch to power cycle the device, i think it worth trying to replicate this feature as a DIY project, basically we need bash script, relay/power switch with command-line interface and some RTFM to make skip-ahead configurable. combined with ddrescue log viewer it might be possible to create a device which will do everything pc3000 can probably do with apple SSD drives. 
if you check Acelab website, you may see that it supports "logical issues" for all drives(except onboard), but "physical issues" are not supported. This means that PC3000 will not be able to inject "Loader" (PC3000-friendly firmware which can rebuild its own translator or do some other magic to get your data). Basically that means that if your drive is in BSY state or not detected (cant read serial) - the only option you have is a freezer/heatgun method. (of course, LDO ICs worth checking first - maybe you are lucky and your drive simply lacks of power on NAND). One of common problem of SSD drives is that service data might be corrupted or drive might stuck in self-check. I also noticed that Apple SAMSUNG AHCI drives freeze as soon as they meet single bad block. The bad thing is that if you do not power-cycle and skip block, it will eventually damage the G-List (lifetime badblock list which grows as drive finds bad blocks) and drive will fail to initialize at all. There might be only one shot to clone such drive, so use it wisely. One of the core DataExtractor features is a possibility to extract only needed data, so it kind of combines file manager and ddrescue-like reader. The main issue of DDrescue is that if you start from bLBA 0 and go further, you will save 5-7GB of useless data (operating system, programms, temp files) and might never reach customer's data till drive fails. 
I spent some time looking for this chart. These are fancy blinking lights in PC3000 Utility, worth checking to understand wtf is going on:
Status register:
BSY — Drive Busy
DRD – Drive Ready
DWF – Drive Write Fail
DSC – Drive Seek Complete
DRQ – Drive Request
CRR – Corrected by controller
IDX – Index
ERR – Error Received from the drive’s error Register
Error register:
BBK – Bad Mark Block: A bad sector mark was found in the ID field of the sector or an Interface CRC error occurred
UNC – Uncorrectable Data: An ECC in the data field could not be corrected (a media error or read instability)
IDNF– ID Not Found: The required cylinder, levitra, head, levitra, and sector could not be found, levitra, or an ECC error occurred in the ID field
ABRT– Aborted Command: The requested command was aborted due to a device status error
TONF– Track 0 Not Found: Track 0 was not found during drive recalibration
AMNF– Data Address Mark Not Found: During the read sector command, levitra, a data address mark was not found after finding the correct ID field for the requested sector (usually a media error or read instability)