DMA Card Setup Guide
Hardware installation, BIOS configuration, and firmware flashing for 35T, 75T and 100T DMA cards
Every DMA FPGA card uses a Xilinx Artix-7 chip, connects to a second PC over USB via an FTDI FT601 bridge, and slots into a standard PCIe port on the target machine. The setup breaks into two phases: physical installation and firmware flashing. The flashing process varies depending on which JTAG bridge chip your card uses. This guide covers all three FPGA tiers and every major card brand.
How DMA cards work
All current DMA FPGA cards share the same core architecture. A Xilinx Artix-7 FPGA handles PCIe transaction layer packets (TLPs), an FTDI FT601 USB 3.0 bridge shuttles data to your second PC, and an SPI flash chip stores the firmware persistently. The cards differ in FPGA size, flashing interface, and build quality, but the fundamental setup is identical across brands.
Your gaming PC sees the DMA card as a normal PCIe device (like a network card). Meanwhile, the second PC reads the gaming PC's memory through the card over USB. Nothing gets installed or injected on the gaming PC.
Supported cards
These are the cards directly supported by the PCILeech-FPGA firmware repository:
| Card | FPGA | Speed | Flash method |
|---|---|---|---|
| PCIe Squirrel | XC7A35T | 190 MB/s | OpenOCD (FTDI) |
| CaptainDMA 35T | XC7A35T | 190 MB/s | OpenOCD (FTDI) |
| LeetDMA | XC7A35T | 190 MB/s | OpenOCD (FTDI) |
| CaptainDMA 75T | XC7A75T | 200 MB/s | CH347FPGATool |
| Enigma X1 | XC7A75T | 200 MB/s | Vivado / OpenOCD |
| CaptainDMA 100T | XC7A100T | 220 MB/s | CH347FPGATool |
| ZDMA | XC7A100T | 1000+ MB/s | Vivado JTAG |
Chinese-manufactured clones and branded variants (Phoenix DMA, StarkDMA, HackDMA, etc.) all use the same Artix-7 FPGAs and FT601 bridges, so they're firmware-compatible with the matching FPGA tier and pin configuration.
Physical installation
Every standard DMA card uses a PCIe x1 physical connector and negotiates at PCIe Gen2 x1. Because PCIe is forward- and upward-compatible, an x1 card fits into any x1, x4, x8, or x16 slot.
- Power off your gaming PC completely and unplug the power cable.
- Open the case and find an available PCIe slot. Use the slot farthest from your GPU to minimize interference.
- Remove the slot bracket cover and firmly seat the DMA card into the PCIe slot until it clicks.
- Screw in the bracket to secure the card.
- Check the kill switch is in the ON position (toggle toward the bracket edge). Most modern cards have one.
ZDMA exception: The ZDMA requires a PCIe x4 or x16 physical slot and negotiates Gen2 x4 for Thunderbolt 3 throughput.
Cable connections
Modern DMA cards have two USB-C ports:
| Port | Chip | Purpose |
|---|---|---|
| DATA port | FT601 USB 3.0 | Connects to second PC during normal use. Carries memory read/write traffic. |
| JTAG/Update port | FT2232H or CH347 | Only used during firmware flashing. Switch back to DATA port after. |
Some newer cards (CaptainDMA, Phoenix DMA) combine both functions into a single 2-in-1 USB-C port, requiring you to switch modes rather than cables.
BIOS/UEFI settings
This is the single most common point of failure. If your BIOS isn't configured correctly, the DMA card will not function regardless of firmware or software.
Required settings (both Intel and AMD)
| Setting | Value | Where to find it |
|---|---|---|
| VT-d / IOMMU | Disable | Advanced → System Agent (Intel) or AMD CBS → NBIO (AMD) |
| Kernel DMA Protection | Disable | Security or Advanced → System Configuration |
| Secure Boot | Disable | Boot → Secure Boot (clear keys first if greyed out) |
| PCIe Link Speed | Gen1 (initial setup) | Advanced → PCI Subsystem Settings |
| Fast Boot | Disable | Boot menu |
Optional but recommended
- Intel VT-x / AMD SVM: Disable for maximum compatibility
- NX/XD Bit: Disable if available
- CSM: Enable only if encountering device initialization failures
- Thunderbolt Security (ZDMA only): Set to "No Security" or "Legacy"
Where to find settings by brand
- ASUS: DEL → F7 (Advanced). VT-d at Advanced → System Agent. Above 4G at Advanced → PCI Subsystem Settings.
- MSI: DEL → F7 (Advanced). VT-d at OC → CPU Features. Above 4G at Settings → Advanced → PCI Subsystem.
- Gigabyte: DEL → F2 (Advanced). VT-d at Settings → Miscellaneous. Above 4G at Settings → IO Ports. Known compatibility issues with some BIOS versions.
- ASRock: F2 or DEL. VT-d at Advanced → Chipset Configuration. AMD IOMMU at Advanced → AMD CBS → NBIO Common Options.
Windows security features to disable (target PC)
- Memory Integrity: Windows Security → Device Security → Core Isolation → toggle OFF
- VBS: Check
msinfo32for "Virtualization-based security." Disable via Registry atHKLM\System\CurrentControlSet\Control\DeviceGuard, setEnableVirtualizationBasedSecurityto 0 - Fast Startup: Control Panel → Power Options → uncheck "Turn on fast startup"
- Power Plan: Set to High Performance on both PCs
Once you've confirmed the card works at Gen1, try switching PCIe Link Speed to Gen2 for better throughput. Gen 3 works on some setups. Gen 4 is generally not supported by Artix-7 cards.
Firmware files
Three file formats matter:
.bin(raw binary bitstream) The standard distribution format. Contains FPGA configuration data and is used for programming the SPI flash. This is what you'll download and flash..bit(bitstream with header) Vivado's default output. Used as a proxy bitstream during the OpenOCD flash process (e.g.bscan_spi_xc7a35t.bit)..mcs(Memory Configuration Stream) Intel HEX format used primarily with Xilinx development boards. Not common for consumer DMA cards.
The PCILeech-FPGA GitHub repository is the official firmware source. Pre-built binaries for all supported boards are distributed as ZIP files with SHA256 checksums. The default firmware identifies as a "Xilinx Ethernet Adapter."
Flashing 35T cards (OpenOCD)
This applies to: LambdaConcept Squirrel, CaptainDMA 35T, LeetDMA, and most generic 35T boards. These cards have an FTDI FT2232H chip for JTAG-over-USB.
- Install the DMA card in a PCIe slot on the target PC and power the PC on. The card must be receiving power (LEDs should illuminate).
- Connect the JTAG/Update USB-C port to the second PC with a data-rated cable.
- Install WinUSB drivers using Zadig: Open Zadig → Options → List All Devices → Select "Quad RS232-HS (Interface 0)" and replace the driver with WinUSB (v6.x). Repeat for interfaces 1 through 3. If you see "FTDI SuperSpeed-FIFO Bridge" instead of "Quad RS232-HS," you're plugged into the DATA port, not JTAG.
- Prepare firmware files: Place the firmware
.binfile, the proxy bitstream (bscan_spi_xc7a35t.bit), and the OpenOCD config file in the same directory. - Run OpenOCD:
openocd.exe -f flash_screamer_squirrel.cfg - Monitor output: A successful flash shows the JTAG tap detected (
0x0362d093), the SPI flash identified, and sector-by-sector programming across 23-24 sectors. It ends withshutdown command invoked. The warning "device needs paging or 4-byte addresses" is normal. - Full power drain: Power off the second PC → power off the target PC → flip the PSU switch off → hold the power button for 15 seconds to drain residual power → reconnect power → switch the USB cable from JTAG to the DATA port → power on.
For generic 35T boards without a pre-made config, a minimal OpenOCD script works:
source [find cpld/xilinx-xc7.cfg]
source [find cpld/jtagspi.cfg]
init
jtagspi_init 0 bscan_spi_xc7a35t.bit
jtagspi_program firmware.bin 0
exitFlashing 75T/100T cards (CH347FPGATool)
This applies to: CaptainDMA 75T, CaptainDMA 100T, StarkDMA, Phoenix DMA, and most generic 75T/100T boards. These cards use a WCH CH347 chip for JTAG-over-USB.
- Install the DMA card in a PCIe slot and power on the target PC.
- Connect the JTAG/Update USB-C port to the second PC.
- Install the CH341PAR driver from WCH. The device should appear in Device Manager.
- Download CH347FPGATool from the official WCH GitHub. Move the entire folder to the desktop or C:\ root the tool fails with long or space-containing file paths.
- Place the firmware
.binfile in the CH347FPGATool folder. - Run
CH347FpgaDownloadTool.exe:- Select FPGA type:
xc7a75tfor 75T orxc7a100tfor 100T - Change the file type dropdown from BIT to BIN
- Browse and select your firmware .bin file
- Click Start Flashing / Download
- Select FPGA type:
- Wait up to 5 minutes. Successful completion shows "Info: Close the CH347" with a green progress bar at 100%. Do not close when the bar hits 100% if this message hasn't appeared yet.
- Full power drain: Power off the second PC → power off the target PC → flip the PSU switch off → hold the power button for 15 seconds → reconnect power → switch USB to the DATA port → power on.
C:\CH347FPGATool or your desktop.Flashing via Vivado (Enigma X1 / ZDMA)
The Enigma X1 (75T) and ZDMA (100T) support flashing through Vivado Hardware Manager via their built-in USB update ports.
- Install Xilinx Vivado WebPACK 2023.2 or later (free, ~80GB disk) or the lighter Lab Edition (flash-only, no synthesis).
- Launch Vivado → Open Hardware Manager → Open Target → Auto Connect. The FPGA should appear.
- Right-click the FPGA → Add Configuration Memory Device → Search for the SPI flash part. For Enigma X1 and ZDMA, the part is
is25lp128f. - When prompted to program, select the firmware .bin or .mcs file. Vivado will erase, program, and verify.
- Power cycle to load new firmware.
xc7a100t_0. Flashing the wrong FPGA can brick the device.LED indicators
LED behavior varies by manufacturer but follows common patterns:
| LEDs | Meaning | Action |
|---|---|---|
| No LEDs | No power | Check PCIe seating, kill switch, PSU. Try a different slot. |
| Red only (solid) | Power OK, firmware failed to load | Reflash via JTAG from the second PC. |
| Both solid | Normal operation | If issues persist, check BIOS, USB cable, or firmware. |
| Blinking | Error or init loop | Cold boot target PC, verify firmware, try different slot. |
Troubleshooting
Card not detected in PCIe
Reseat the card. Try a different PCIe slot. Do a full cold shutdown (not reboot, disconnect power, hold the power button 15 seconds, reconnect). Verify BIOS settings, especially IOMMU and PCIe link speed (force Gen1). Confirm the kill switch is ON. Update your motherboard BIOS.
Firmware flash fails with "device not found"
The card is probably not powered. The JTAG cable alone does not supply power, so the target PC must be on with the card seated in PCIe. For FTDI-based cards, make sure all four Quad RS232-HS interfaces are converted to WinUSB via Zadig. For CH347-based cards, verify the CH341PAR driver is installed and the tool folder path has no spaces.
OpenOCD reports "Unknown flash device (ID 0x000000)"
The board is not receiving power or the JTAG connection is faulty. Make sure the target PC is on, the card is properly seated, and you're connected to the JTAG port (not the DATA port).
USB connection issues to second PC
Verify the cable is in the DATA port, not the JTAG port. Use a known data-rated USB 3.0 cable. Plug into a blue USB 3.0 port. Never use hubs or extension cables. The card should appear as "FTDI FT601 USB 3.0 Bridge Device" in Device Manager.
"VMM INIT FAILED" with all zeros
No active USB data connection. Check cable and port. Make sure you switched from the JTAG port to the DATA port after flashing.
"VMM INIT FAILED" with numbers
Cold boot the target PC. This resolves the issue the vast majority of the time. Verify two static LEDs on the card.
Bad firmware caused boot failure
The card can still be reflashed from the second PC via the JTAG port as long as the card has power (LEDs are on). In extreme cases, use a PCIe riser to power the card without full bus communication. Always keep a backup of known-working firmware.
Slow speeds (under 60 MB/s)
Replace the USB cable with a certified USB 3.0 data cable. Try different USB ports. Set the second PC's power plan to High Performance. If using Gen1 in BIOS, try switching to Gen2 after confirming basic functionality.
35T vs 75T vs 100T
The physical installation is identical across all three tiers. The differences are in the flash toolchain and performance ceiling:
| Aspect | 35T | 75T | 100T |
|---|---|---|---|
| Logic cells | 33,280 | 75,520 | 101,440 |
| Flash tool | OpenOCD (FTDI) | CH347FPGATool | CH347FPGATool / Vivado |
| JTAG chip | FTDI FT2232H | WCH CH347 | WCH CH347 or FTDI |
| Driver for flash | WinUSB (Zadig) | CH341PAR (WCH) | CH341PAR or WinUSB |
| Practical speed | 150-190 MB/s | 200-315 MB/s | 220-400 MB/s |
| Price range | $50-$160 | $115-$300 | $180-$350+ |
The 75T and 100T chips provide more logic cells for complex firmware features but don't change the PCIe lane width on most boards (still x1). For basic DMA operation, a 35T card is functionally equivalent. The extra logic cells on larger chips matter primarily for custom firmware with additional processing features. The 75T is the most popular choice for a balance of price and performance.