CompactFlash Adapters
Background
This part will be dedicated to CompactFlash readers. CompactFlash used to be very popular back in the day, as it had the ability to offer higher read/write speeds that contemporary SecureDigital cards. However, with the improvement of SD technology, CF became less popular, because, with all the irony in its name, it is not compact enough compared to SD.
CF is still used by some high-end cameras, and memory cards are still being produced. However it is far less common now. Previously, many high end monitors, such as the DELL 2408WFP and DELL 3008WFP, offered a CF slot, alongside SD. However, their successors have eliminated the CF, and stuck with SD only.
CF is also much less common than SD on laptops. CF Card slots on Thinkpads have been gone since the X3x series, replaced by SD/multi-card slots, starting from the X4x series and up to modern machines. CF made a brief comeback in the short-lived W70x series, whose 17” chassis was considered large enough to accommodate the slot without sacrificing something else, more important.
CF cards and the CF protocol is by nature far more complicated than the SD card. CF cards can work in one of the following modes:
1) PC Card mode, in either memory-mapped or I/O-mapped sub-modes (the sub-mode is chosen by the PCMCIA configuration registers)
2) IDE mode, in which the CF card behaves like an IDE device
In IDE mode, the CF can be accessed either using PIO (programmable IO) or DMA (direct memory access), like typical IDE devices. The DMA mode is much preferred, as it gives far better performance, at far lower CPU utilization compared to the interrupt-driven PIO. Both the card and the host device must support DMA for it to be available, and indeed cards touting DMA (UDMA) support have become commonplace in the past decade.
Host device support for UDMA is far trickier. Physically, the CF pinout allows for passive adapters both to IDE (ATA) and CardBus/PCMCIA controllers, which makes CF slots very easy to implement off either interface. While any semi-modern IDE controller supports UDMA, the situation with CardBus/PCMCIA is very different. For whatever reason, DMA support was not integrated into the majority of said controllers. In fact, only one CardBus CF adapter is known to officially support UDMA – the Delkin CardBus UDMA CF Adapter, which was manufactured during a very short period between 2007 and 2008, probably in small quantities. It is very rare, and no manufacturer seems to be making similar products nowadays. This is probably due to the availability of USB-based solutions, which use memory-mapped mode and do not need UDMA, and the decline in CF popularity in general.
Some more light is shed on this subject in the following links:
CompactFlash cards and DMA/UDMA support in True IDE ™ mode
CardBus CF adapter – PIO only, CF supports UDMA 5
Thus, to get the full performance of a fast, modern, UDMA-capable CF card, one needs to either use it with an internal ATA/IDE controller (essentially as a hard drive replacement), or in a USB-based card reader.
The Cards
To investigate the performance of some of the different CF readers out there, I ran the CrystalDiskMark tests using two devices:
- Delkin 16GB 1000X UDMA7 CF Card(rated 150MB/s read and 80MB/s write)
- Delkin 32GB UHS-1 SD633X SDHC card (rated 95MB/s read and 80MB/s write), via SDXC-to-CF UDMA-Capable Adapter
The adapter I got on eBay is actually little different in appearance (see picture), but I believe it to be the same device.
The adapter sits flush inside any full-depth CF slot, and the SD card, when fully inserted is flush inside the adapter. However, as the orientation of the SD slot is perpendicular to the adapter, the SD card will not be accessible without removing with CF adapter from the slot as well.
The Devices
Built-in CF slot on the Thinkpad X32
The CF slot is wired to the Ricoh dual-slot CardBus controller, which also provides the CardBus slot on the laptop. However, the CF slot works in 16-bit PCMCIA (PC Card) mode only. When a card is plugged in, a PCMCIA IDE/ATAPI Controller appears in the device manager, which is not a PCI device, but a legacy PCMCIA one (enumerator shown as PCMCIA/PNP0600). The controller is only visible when a CF card is inserted, and the disk drive appears as volume under the controller (when “View devices by connection” is used).
Being PCMCIA has one inconvenient side effect of potential interrupt conflicts with other devices sharing the same IRQ. Apparently, while PCI devices are required to “play nice” in shared IRQ scenarios, PCMCIA devices do not always comply to these rules. In some cases when I had a device (such as a USB adapter) inserted into the CardBus slot, and the CF slot was occupied too, the system would freeze completely until the CF device was removed and the PCMCIA/IDE controller went offline, at which point it would function again normally.
The PCMCIA IDE/ATAPI Controller exposes “Advanced settings” for configuring DMA/PIO modes, but no matter what you try to configure, it will always say “PIO mode”, and you cannot enable DMA/UDMA. Because of that, the performance suffers terribly (more on that later).
It can be misleading (and confused me for a while) that the PCMCIA controller exposes settings similar to a plain IDE channel, and that the CF card shows IDE as the enumerator. But it appears that this is just a logical presentation to the OS. The slot actually operates in PC Card mode, which could be verified by looking at the X3x motherboard schematics and cross-referencing the Compact Flash pinouts (page 35) with the pin nominations in the Compact Flash specification. The fact that PCMCIA appears as the enumerator is also evidence to such (in IDE mode, the channel is enumerated by PCIIDE).
Lexar High Speed 32-bit CardBus CF Reader
Lexar released one of several native 32-bit CardBus adapters for CF cards. Similar adapters exist, such as the Delkin eFilm Pro CF, the ASKA CF32 adapter and a few others. I purchased this one used on eBay, where some of them are still being sold.
When plugged in, the reader appears as a PCI device behind the CardBus controller. Vendor ID is 1145 and Device ID is F021, which comes up as Workbit corporation. The Delkin eFilm Pro exposes the same IDs, which shows that these are just rebadges of the same thing. As such, either the Lexar or the Delkin drivers can be used. Depending on the driver installed, the device appears under IDE ATA/ATAPI Controllers either as Lexar 32-bit CardBus Reader or Delkin CardBus Adapter. I recommend the Delkin driver, as it appears newer (dated 2006 instead of 2004) and yielded somewhat higher performance (see below).
CF Slot on DELL 2408WFP monitor
Back in the day, DELL used to fit CompactFlash slots alongside SecureDigital on their large (24” and up) Ultrasharp monitors. Nowadays, only SD is available, as CF takes premium space and is rarely used. The 2408WFP is one of the last such models with a CF slot.
The CF reader is implemented as a USB mass storage device, attached to the USB hub that is built-in to the monitor. It appears as a standard USB Mass Storage Device with the drive itself showing as Generic Flash HS-CF USB Device (the SD multi-reader slot similarly appears as Generic Flash HS Combo USB Device). The USB IDs are 0424:2228:0539 (Standard Microsystems).
Delkin USB3.0 Multi-Card Reader
The same card reader was tested earlier in the update to the SD reader roundup. It ia a multi-LUN reader by Genesys systems (USB IDs 05E3:0732:0551), and shows 5 separate drives (displayed as Generic STORAGE DEVICE USB Device), one of which is the CF card.
Performance Compared
Because of the different interfaces utilized by the readers, it was impossible to test them all in the same system. As such, the CardBusreader was tested on the Thinkpad X32, while the Delkin USB3 reader was tested on the QX9650 desktop PC. The 2408WFP CF slot was tested on the Thinkpad T410, since that was what I had around. The results are summarized in the table below.
Reader | CF 1000X – Read | CF 1000X – Write | SD 633X – Read | SD 633X – Write | CPU Utilization |
X32 CF (PCMCIA) |
1.4MB/s | 1.4MB/s | 1.4MB/s | 1.4MB/s | 90-100% |
Lexar (Cardbus) |
7.9MB/s | 5.7MB/s | 8.1MB/s | 6.1MB/s | 25-45% |
2408WFP (USB2.0) |
10.3MB/s | 8.4MB/s | 10.2MB/s | 7.5MB/s | 1-5% |
Delkin (USB3.0) |
117.0MB/s | 69.0MB/s | 25.0MB/s | 23.9MB/s | 1-5% |
The PCMCIA-CF slot on the X32 showed abysmal performance (which is not surprising, as it has been well documented). No matter what card is used, 1.4MB/s is the maximum performance one is likely to get out of it, and that comes at a cost of 100% CPU utilization due to constant interrupt handling. This interface is therefore inadequate for any kind of data transfer of more than a few small files, which is a real pity.
The Lexar 32-bit Cardbus reader was somewhat better, peaking at about 8MB/s read and 6MB/s write. This performance was measured with the 2006 Delkin driver. The original Lexar driver from 2004 was somewhat slower.
However, despite faring much better than the PCMCIA-based slot, it still uses the slow PIO mode, which limits performance and causes high CPU utilization of 25-45% during the transfer (on the 2GHz Pentium M in the X32). It keeps the the promise of being “6-8 times faster than PCMCIA readers”, but while that may have been impressive 10 years ago, it is still insufficient for modern day transfer tasks.
It was somewhat surprising to me that the USB2.0 reader in the 2408WFP monitor showed lackluster performance, of about 10MB/s read, and 8MB/s write. I actually tried all 3 configurations – CF card in CF slot, SD card (via adapter) in CF slot and SD card in SD slot, and the results were all very similar. I have seen USB2.0-based devices achieve approximately double performance, of around 20MB/s, including some which were reviewed in previous entires, and the built-in reader of the DELL U2410 monitor (which was the successor to the 2408WFP).
Finally, the Delkin USB3.0 reader delivered awesome performance. A read speed of 117MB/s is somewhat short of the promised 150MB/s, but it is still excellent faster than any SD card I’ve ever seen. 69MB/s for writing is also very good, although better results have been obtained with fast SD cards on that same reader. It is theoretically possible that the speeds could be higher with a faster USB3.0 controller, or on a faster CPU (CPU speed greatly affects USB throughput).
Interesting results were seen using the SD 633x in the CF slot of the Delkin reader – the speeds are very clearly capped at 25MB/s. The SD review showed that the same card in the SD slot is capable of speeds upward of 70MB/s). The limitation is thus clearly in the SDXC-to-CF adapter. While it may be UDMA-capable, the speed cap shows it does not support the UHS-1 protocol. I can easily excuse that, since it was probably made before the UHS-1 standardization.
Sadly, I could not obtain the much coveted Delkin CardBus UDMA CF Adapter. I haven’t seen one for sale even once during the past couple of years. It would have been interesting to see whether UDMA in IDE-based CardBus devices can really keep up with today’s ultra-fast CardBus slots. Should I ever obtain such an adapter (which seems highly unlikely), I promise to update this survey with the results.
Conclusions
While SecureDigital clearly won the battle of the memory cards in terms of market share, in the high-end card segment CompactFlash can still pack a punch. The tests showed that in terms of raw speed, there are CF cards that beat even the fastest SDXC out there.
Unfortunately, not many host-based readers are able to utilize even a fraction of that speed. With the only UDMA-capable CardBus reader ever produced not being available, it takes a high-end USB3.0 -based reader to unlock the potential of high-end CF for mass-storage purposes. PCIe-based ExpressCard readers, which were not tested in this review, should also do the job.
However, when connected to an internal ATA/IDE controller, which is natively capable of DMA modes, the modern CF cards should operate at full-speed (or close to it, depending on which UDMA revision the controller supports).
Part 4, Update 1 – The Delkin UDMA CardBus-to-CompactFlash Adapter
Some years after the original review I finally obtained a specimen of the elusive Delkin CardBus32 UDMA CompactFlash Adapter – the only known CardBus-CF adapter supporting UDMA. The chip used in the adapter is also manufactured by WorkBit corporation, just like the more common non-UDMA version from Delkin/Lexar/ASKA discussed above; this is evident from the PCI vendor ID 0x1145. The device ID is 0xF103, which distinguishes it from the non-UDMA versions. Comparing the driver .INF files of the DMA and non-DMA adapters shows that there were several device IDs of each kind, with the UDMA-capable ones starting with 0xF1, and the non-UDMA with 0xF0.
The first hurdle to trying this ancient adapter was finding the drivers. The part of the Delkin website, which hosted them, was recently removed; fortunately, the Wayback Machine had the pages and files cached. To preserve the drivers in the (unlikely) event that Archive.org goes offline, I uploaded a single package containing both drivers: Cardbus32 (non-UDMA adapters, driver name: HSCA32) and CardbusUDMA (UDMA adapters, driver name: UTATAR). According to the documentation, the drivers support Windows 98 SE, ME, 2000, XP and Vista (32-bit only). They will probably work on 32-bit Windows 7 as well, not sure about later versions.
This time I decided to test on two laptops: T60, running XP, and X61, running Vista; both laptops also have different CardBus controllers (Texas Instruments PCI-1510 on T60, Ricoh R5C847 on X61), so I figured out I can get good coverage this way. To have a basis of comparison, I re-tested the Lexar 32-bit CardBus adapter (non-UDMA) in the same systems; Finally, the T60 also has USB 3.0 via ExpressCard, so I could test the Delkin USB 3.0 CF reader.
The cards I wanted to test are the same ones from the previous round-up: Delkin 16GB 1000X UDMA7 CF card and Delkin 32GB UHS-1 633X SDHC card via the SDXC-to-CF adapter. Immediately a major problem with the Delkin UDMA Adapter became obvious: even though it worked just fine with the SD card in the SDXC-to-CF adapter, it completely failed to read the UDMA7 CF card: it appeared in the Device Manager, but the drive itself showed up as “unreadable” in the Disk Management MMC snap-in, and nothing I tried could change it. This behavior was replicated on the T60 (XP), X61 (Vista), and just in case, A31p (Windows ME): SDXC adapter works, UDMA7 CF card does not.
Rare and poorly documented as these adapters are, I cannot determine where the problem lies: it could be some inherent incompatibility between the adapter and the UDMA7 card (perhaps UDMA fallback is not as fool-proof as some would have you believe), or it can be a driver bug (I could only ever find a single version of the Windows driver for this model), or it can even be a hardware failure with my adapter (which I obviously cannot test, unless I’ll get lucky in the next 5 years to get another one).
If I could find a way to force the CF card to fall back to a lower UDMA mode, I would possibly know more where the problem lies, but so far I found no way to do it. Alternatively, I can try testing in Linux, but apparently not everything is rosy there when it comes to supporting these adapters, from a few Bugzilla threads I’ve seen.
Thus, for now, the results for the Delkin Cardbus UDMA CF adapter only cover the SD card via the SD-to-CF adapter:
System/Device | CF 1000X
Read |
CF 1000X
Write |
SD 633X
Read |
SD 633X
Write |
CPU
Usage |
T60, CardBus 32 | 8.9MB/s | 7.7MB/s | 5.5MB/s | 5.0MB/s | 20-40% |
T60, CardBus UDMA | Error | Error | 24.8MB/s | 23.7MB/s | 1-5% |
T60, USB 3.0 Reader | 113.3MB/s | 61.5MB/s | 24.9MB/s | 23.8MB/s | 0-3% |
X61, CardBus 32 | 5.3MB/s | 4.1MB/s | 5.1MB/s | 3.9MB/s | 20-40% |
X61, CardBus UDMA | Error | Error | 24.3MB/s | 13.9MB/s | 1-5% |
The results confirm that, when the CF device is recognized, the Delkin adapter really works in UDMA mode, as evident by the higher speeds, and low CPU utilization. The 25MB/s speed cap is due to the SD-to-CF adapter not supporting UHS-1, and the lower write speeds across the board in the X61 are due to the lower performance of the X61 Ricoh CardBus controller: both of these facts are known from earlier reviews.
I thought about looking for a different SD-to-CF adapter, which supports UHS-1 (capable of unlocking the full speed of the SD 633x card) and UDMA, but is not clear whether such adapters exist; neither of the two adapters I tried (see picture) could deliver UHS-1 speeds with the SD 633x card, even though the second (red) variant of the “Extreme CF Adapter” mentions 90m/s on the package.
The conclusion is that the UDMA-capable CompactFlash CardBus adapter, even if you manage to find one, is not as good as one might hope. If you want to benefit from high-speed CompactFlash cards, you are probably better off with modern, USB/ExpressCard-based adapters.
