In many ways this is a bit off-topic, but hopefully not too much...
I recently took my Kiddos to Disney. We brought along our old DSLR, which uses CF cards. I bought a new 16GB card for the trip so I wouldn't have to empty the camera each night. Anyway, halfway through epcot the camera stops working and reports "ERR CF". After we got home I tried other CF cards in the camera, and they work just fine. i.e. I think the camera is working.
When I plug the card into a USB CF card reader it doesn't get detected properly. If I use my linux box I see that it normally reports (along with tons of error messages) "[sdd] 2177891984 512-byte logical blocks: (1.11 TB/1.01 TiB)". With enough reinserting, pluging, unplugging, replugging... I will occasionally see it detected as 16GB (with 30408336 512 byte sectors). When this happens I can't mount the filesystem, but I can dump (via dd) the raw device. I have gotten 3 of these dumps so far. The fun part is that they are each different from each other. After a bit of python-foo I discovered that they only differences are in the high bit of odd numbered bytes. Looking at the CF card spec I see that among the 50 pins it has D0-D15. So I suspect that D15 is flaky.
I cracked open my cf card and cf card reader and buzzed all 50 pins, and to my limited abilities they all seem fine. Of course if it is a bad solder joint, then the pressure of the multimeter probe might be enough to make the connection.
Note that the number of sectors in 'bad' mode is 2177891984=0x81cffe90 and when it sort-of works we have 30408336=0x1cffe90. Again it looks like a high bit got set (possibly D15 ?)
The odd part is that we almost always get the bad bit in the size, but the bad bits in the data are much more rare. we seem to get a bunch then none for a few megs, then a bunch more....
Also, if I open the dumps in a hex editor I can find things that look like JPG images, including things like the camera model name in the EXIF data (occasionally with every other character garbled).
QUESTIONS/THOUGHTS:
1) The CF spec says that the cards can operate in an 8-bit mode, where D8-D15 are unused. That sounds like it might work (albeit slowly), but how can I do that? Are there magic Linux commands to do this? Is there a particularly flexible card reader out-there that can do this? I guess I could use an Arduino (or other dev-kit) to do it by hand... but that sound EXCRUCIATINGLY slow... puling 16GB via an Arduino might take a lifetime or three
2) The CF card has what appears to be a BGA controller chip ( PHISON PS3016-P9-R ). Should I try to borrow a hot-air station and try to reflow it, and the connector?
3) There are four flash chips on the CF card. I guess the extreme solution would be to desolder them and get a flash chip reader. Of course reassembling the filesystem from what is on the four chips might not be trivial, depending on how fancy that controller is.