Products Features About Guides Discord Dashboard

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.

  1. Power off your gaming PC completely and unplug the power cable.
  2. Open the case and find an available PCIe slot. Use the slot farthest from your GPU to minimize interference.
  3. Remove the slot bracket cover and firmly seat the DMA card into the PCIe slot until it clicks.
  4. Screw in the bracket to secure the card.
  5. Check the kill switch is in the ON position (toggle toward the bracket edge). Most modern cards have one.
DMA cards draw all power from the PCIe slot. No auxiliary power connectors are needed. A standard x1 slot provides up to 10W, which is more than enough for any Artix-7 card.

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.
Always use a USB 3.0 data-rated cable. Charging-only cables will not work. Plug into a blue USB 3.0 port on the second PC. Never use USB hubs, docking stations, or extension cables.

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 msinfo32 for "Virtualization-based security." Disable via Registry at HKLM\System\CurrentControlSet\Control\DeviceGuard, set EnableVirtualizationBasedSecurity to 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.

  1. 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).
  2. Connect the JTAG/Update USB-C port to the second PC with a data-rated cable.
  3. 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.
  4. Prepare firmware files: Place the firmware .bin file, the proxy bitstream (bscan_spi_xc7a35t.bit), and the OpenOCD config file in the same directory.
  5. Run OpenOCD:
    openocd.exe -f flash_screamer_squirrel.cfg
  6. 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 with shutdown command invoked. The warning "device needs paging or 4-byte addresses" is normal.
  7. 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.
OpenOCD uses a two-stage process: it first loads a proxy bitstream into the FPGA SRAM that bridges JTAG signals to the SPI flash, then writes the firmware binary through that bridge. On the next power cycle, the FPGA loads the new firmware automatically.

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
exit

Flashing 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.

  1. Install the DMA card in a PCIe slot and power on the target PC.
  2. Connect the JTAG/Update USB-C port to the second PC.
  3. Install the CH341PAR driver from WCH. The device should appear in Device Manager.
  4. 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.
  5. Place the firmware .bin file in the CH347FPGATool folder.
  6. Run CH347FpgaDownloadTool.exe:
    • Select FPGA type: xc7a75t for 75T or xc7a100t for 100T
    • Change the file type dropdown from BIT to BIN
    • Browse and select your firmware .bin file
    • Click Start Flashing / Download
  7. 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.
  8. 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.
The CH347FPGATool will not work if the folder path contains spaces or is deeply nested. Always put it somewhere simple like 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.

  1. Install Xilinx Vivado WebPACK 2023.2 or later (free, ~80GB disk) or the lighter Lab Edition (flash-only, no synthesis).
  2. Launch Vivado → Open Hardware ManagerOpen TargetAuto Connect. The FPGA should appear.
  3. Right-click the FPGA → Add Configuration Memory Device → Search for the SPI flash part. For Enigma X1 and ZDMA, the part is is25lp128f.
  4. When prompted to program, select the firmware .bin or .mcs file. Vivado will erase, program, and verify.
  5. Power cycle to load new firmware.
ZDMA warning: The ZDMA board contains two FPGAs. Always flash only 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.