Flashing firmware with the CH347 tool
Writing a .bin image to a 75T or 100T card with CH347FpgaDownloadTool: folder layout, the correct FPGA part, which port to use, and how to verify the flash afterwards.
Short answer
Put the .bin in the CH347FPGATool folder. Run CH347FpgaDownloadTool.exe with the cable in the card's JTAG port. Select xc7a75t or xc7a100t to match your board. Set the file format to BIN before you program. On success, power-cycle the game PC, move the cable to the data port and run a connection test.
On this page11
What a flash actually writes
The CH347 on your card is a WCH USB bridge that exposes a JTAG port over USB. The flash tool uses that JTAG path to write your firmware image into the SPI flash chip beside the FPGA. Nothing is written to the FPGA itself in a way that survives power loss — at every power-on the FPGA reads the flash and configures itself from what it finds there. That is the whole mechanism, and it is why a bad image means a card that does not appear rather than a card that is destroyed.
Paths, tools and file names
Exact names, because this is where typos cost an evening. Use the copies issued with your order or from the Downloads resource, not a random mirror.
C:\CH347FPGATool\
C:\CH347FPGATool\CH347FpgaDownloadTool.exe
C:\CH347FPGATool\your-order-image.bin
FPGA part selector: xc7a75t (75T boards)
FPGA part selector: xc7a100t (100T boards)
File format selector: BIN (not BIT)Before you open the tool
Six items. Every one of them is a support ticket that did not need to be opened.
- You know whether your board is a 75T or a 100T — read the FPGA marking, do not trust the listing
- The image you are about to flash was built for this board and this DNA ID
- The CH347 or WCH driver is installed on the second PC
- The cable is a data-rated USB cable, plugged into the card's JTAG port and a rear USB port
- The card is powered — on most boards that means seated in the game PC with the game PC on
- Nothing else on the second PC is holding the USB device: reader software and MemProcFS are closed
The flash, in order
Do not improvise the order. The part selection and the format selection both have to be right before you pick the file, because some builds of the tool reset the file path when you change either one.
- Copy the CH347FPGATool folder somewhere with a short path, then drop your .bin image inside it
- Move the USB cable to the card's JTAG port, on a rear USB port of the second PC
- Run CH347FpgaDownloadTool.exe — as Administrator if the tool reports it cannot open the device
- In the FPGA field, select the part that matches your silicon: xc7a75t or xc7a100t
- Change the file-format selector from BIT to BIN
- Click the file button and choose your .bin image
- Start the program operation and leave the machine alone — allow several minutes
- Wait for the tool's own success report before touching anything
Warning
Selecting the wrong FPGA part
The part selector tells the tool which JTAG device it expects to find. A 100T part selected against 75T silicon normally fails to open the chain and refuses to program, because the JTAG IDCODE does not match. Do not treat that as a safety net. Assume a mismatch is a recovery job, confirm the FPGA marking on the board before you select anything, and if you cannot read it, ask support rather than guessing between two options.
Warning
Do not interrupt a running flash
While the tool is writing, the flash chip contains neither the old image nor the new one. Pulling the cable, sleeping the second PC or cutting power to the game PC at that moment is the one action in this whole guide that reliably produces a card which will not enumerate. Disable sleep on the second PC first if it is aggressive about it.
What a successful flash looks like
The tool is the authority here, not the card's LEDs. LEDs on a DMA board are usually power and activity indicators and will light with a corrupt image in flash.
- Duration
- Several minutes for a full image. A flash that finishes in seconds did not write anything
- Tool output
- An explicit completion or success line, with no error rows above it
- Progress
- A progress indicator that reached the end rather than stalling partway
- Not evidence
- LEDs on the card. They say powered, not configured
- Next action
- Full shutdown of the game PC, not a restart. The slot has to lose power
Verifying afterwards
A flash is not verified until the card comes back as a PCIe device and a reader can talk to it. Six steps, in this order.
- Shut the game PC down fully, wait ten seconds, then power it back on
- Move the USB cable from the JTAG port to the DATA port on the card
- On the second PC, confirm the FTDI data device appears in Device Manager with no warning triangle
- Run the connection test supplied with your order and confirm it reaches the card
- Read the DNA ID and check it matches the ID the image was built against
- Only then launch anything that actually reads memory
When the flash fails
Work down the list. Each row's fix costs less than the one below it, so do not start by assuming the card is dead.
| Symptom | Likely cause | Fix |
|---|---|---|
| Tool cannot open the device, or lists no device at all | Cable is in the data port, the CH347 driver is missing, or another process holds the device | Move the cable to the JTAG port, install the CH347 or WCH driver, close reader software and MemProcFS, then run the tool as Administrator |
| JTAG chain opens but the part does not match | xc7a100t selected on a 75T board, or the reverse | Read the FPGA marking on the board and select the matching part. Do not program until the chain reports the expected device |
| Program starts and then errors partway through | Marginal USB link, a hub or front-panel header in the path, or the second PC slept mid-write | Go direct to a rear USB port with a short data-rated cable, disable sleep, then repeat the flash from the start |
| Flash reports success but the card still does not enumerate | The image was built for a different board or a different DNA ID, or the game PC was only restarted | Cold-boot the game PC with a full power-off first. If it still does not appear, confirm the image filename against your order before reflashing |
| Card enumerates but the reader cannot connect | Cable is still in the JTAG port, or the FTDI data driver is missing | Move to the data port and install the FTDI D3XX driver on the second PC. This is a driver problem, not a firmware problem |
| Nothing at all after an interrupted write | The flash holds a partial image, so FPGA configuration never completes | Reflash the correct image over the same JTAG port. JTAG does not depend on flash contents, so this is normally recoverable |
Flashing questions
Can I flash from the game PC instead of the second PC?
No. The tool talks to the card over USB on the JTAG port, and that cable belongs on the second PC. The game PC's only role is powering the slot.
Is BIT or BIN correct?
BIN. The BIT setting configures the FPGA directly and is lost at power-off. Firmware images for DMA cards are written into the SPI flash, which is the BIN path.
How long should a flash take?
Several minutes for a full image. If the tool claims completion after a couple of seconds, it almost certainly did not write, so check the format selector and the file path.
Do I need to erase the flash first?
No. The tool handles erase as part of programming. Manual erase steps from generic FPGA tutorials are not needed here and add a window in which the card has no image at all.
Can I reflash the same image twice?
Yes, and it is harmless. Reflashing is a reasonable first move when a card behaves oddly after an interrupted write, because it removes any doubt about what is in the flash.
Sources
The folder layout, the step order and the error rows are ours. They come from flashing these cards and from tickets.
- 01AMD/Xilinx UG910, Vivado Design Suite User Guide: Getting Started
the device programming flow, where programming the FPGA directly is lost at power-off and the flash image persists
docs.amd.com
- 02AMD/Xilinx DS180, 7 Series FPGAs Data Sheet: Overview
that xc7a75t and xc7a100t are different Artix-7 devices, so the part selector has to match the silicon
docs.amd.com
Read next
Still stuck? Open a ticket on Discord
All guides