Skip to the content
2 layers91.2 × 48.3 mmJTAG SWD adapter, the printed circuit board in 3D

Universal JTAG/SWD/UART adapter based on FT2232H

Size
91.2 × 48.3 mm
Copper layers
2
Thickness
1.6 mm
Parts
103
Nets
124
Pads
455
Tracks, vias
1,376, 365
Pours
4
Routed
Yes
KiCad
KiCad 5 (file 20171130)
Created
10 Aug 2019
Updated
13 Apr 2022

Overview

JTAG SWD adapter is an open-source printed circuit board by Neofoxx, from the Neofoxx/JTAG-SWD-adapter repository on GitHub. It is a 2-layer board of 91.2 × 48.3 mm with 103 parts on 124 nets, routed with 1,376 tracks and 365 vias.

It is built around the 74LVC125AD, SRV05-4 and 74LVC157AD, with the LN1134A332MR-G, BC847 and BC857 among its other parts. Its parts include 34 resistors, 25 capacitors, 13 ICs, 6 diodes and 3 transistors. It belongs with the interfaces and adapters boards of this library.

Main components

6

README

README.md

JTAG-SWD-adapter

Universal JTAG/SWD/UART adapter based on FT2232H

PCB view

alt text

Finished product

alt text

Pinout

alt text

Description

This is a universal JTAG/SWD/UART/SPI/... adapter based around the FT2232H chip. This initially started based off the KT-Link specifications, but has since evolved into the following set of features:

  • USB Type-C connector
  • 1.8V - 5V traget supply
  • JTAG and SWD support on channel A, UART support on channel B.
  • ESD protection of USB and of target
  • Integrated power section, to power target from the adapter (5V/3.3V/2.5V/1.8V available)
  • Similar pinout to the standard found on commercial JTAG/SWD adapters, with the addition of UART pins
  • JTAG/SWD programming with simultaneous UART communication
  • LEDs for USB power, Target power, SWD interface, Activity, and RX&TX of the UART

The design has been tested and confirmed working with OpenOCD. Tested targets so far have been STM32F1 (SWD), STM32F3 (SWD), ESP32 (JTAG), and PIC32MX (JTAG)

Component selection & BOM

Components were selected based on the desire to try them out, usually based on price/performance. FT2232H and its support circuitry should not be changed, but other things (series resistors, LEDs, DCDC chip) can be changed & exprimented with without issue.

Setup (1/2) - EEPROM

After soldering the board together and verifying for no shorts, plug the debugger into your computer, and verify that it shows up. With no parameters in the EEPROM, it should show up as a generic FT2232H Dual UART device.

You can find the relevant files in the Setup folder.

Windows

Use the provided "Neofoxx FT-Prog template.xml".

  • Connect the device to your computer. Verify that VCP drivers for FT2232H are installed
  • Open FT-Prog. Click on "Devices" -> "Scan and Parse"
  • The device should now show up
  • Right clock on your device, and select "Apply template". Choose the template in the first step.
  • Afterwards, right-click on the device again, and select "Program". Confirm again that you want to progam the device.
  • After programming, unplug & re-plug your device. Wait for driver installation.
  • In FT-Prog, perform another "Scan and Parse".
  • Confirm the device has the proper parameters.
  • Success!

alt text

Linux

  • Use the provided "Neofoxx_ftdi_eeprom.conf".
  • (Feel free to change the serial number, but do not increase the number of characters)
  • Install/build libftdi1 from https://www.intra2net.com/en/developer/libftdi/download.php
  • (Link for reference, if you run into trouble: https://www.acmesystems.it/CM3-HOME_ft4232_setup )
  • Flash the eeprom with the following command: ftdi_eeprom --device i:0x0403:0x6010 --flash-eeprom Neofoxx_ftdi_eeprom.conf
  • Run the command again. Afterwards, unplug & re-plug the device.
  • With dmesg or similar, you can check that the attached device now has the proper Manufacturer and Description string
  • Alternatively, in the examples folder, run the eeprom utility, and see what it outputs.
Known issues
  • FT-Prog and ftdi_eeprom do not write 100% identical settings. The adapter will work nonetheless.
  • If flashed with ftdi_eeprom, then checked in FT-Prog, the device will LOSE ITS PARAMETERS. In that case, upload them again in FT-Prog. If you don't check it in FT-Prog, it will work in Windows just fine. (Possible issue, that ftdi_eeprom doesn't write the eeprom type?)
  • If you manage to mangle the parameters, and your VID/PID is suddenly 0000:0000, you can revive the device with a Windows box (virtualization won't work, unless you can pass a device with 0000:0000 to it).
  • -> Connect the device to a Windows box, and force install the VCP drivers on the "Unknown device"
  • -> This should then allow you to see the device in FT-Prog, and allow you to erase the eeprom and flash it with the proper parameters.

Setup (2/2) - OpenOCD settings

  • Copy the neofoxx.cfg file into your openocd scripts/interface/ftdi/ folder.

Linux

  • Done!

Windows

  • If you want to use the adapter with OpenOCD under Windows, you will have to change its drievr from the FTDI one a WinUSB one.
  • Download zadig from here: https://zadig.akeo.ie/
  • Run the tool.
  • If necessary, in the Options menu, select "List All Devices"
  • Select "Neofoxx JTAG/SWD adapter (Interface 0)"
  • Select WinUSB, then click Replace Driver.
  • Done!
  • Note, if you have multiple adapters connected at the same time and want to use them, you have to do this on all of them.
  • If the adapter suddenly stops working under Windows, fist check if the driver has changed. Windows have a nasty habit of changing things without telling you.

alt text

Normal operation and things to look out for

  • To use SWD with this board, you need to pass the proper flags to OpenOCD. Try something like this openocd -f interface/ftdi/neofoxx.cfg -c "transport select swd" -f target/stm32f1x.cfg -c "adapter_khz 1000"
  • Because the board is compliant to the standard pinout, it will, when used in SWD mode, connect the TDO line to the RX of the UART channel, to be used as SWO.
  • -> If this is undesired, the jumper on the board can be moved from "Auto" to "RX". This way, the UART RX pin will always be the RX pin, bypassing the switching of pins.
  • The adapter includes a power section to power the target
  • -> The maximum current draw is limited with a 1 ohm resistor, to protect the PC.
  • -> When changing voltages, first turn the EN/1.8V pin to off, then set the voltage, then enable it again.
  • -> When using 5V, disable the EN/1.8V switch first (the other two do not matter), then enable the 5V switch. Also in this case, if you make a mistake and short a high voltage onto the VTarget rail, your computer is at risk. There is some protection, but it's your computer. If you suspect this might happen, replace the 1 ohm resistor with an SMD fuse.
  • The USB/Power LED shines when the USB cable is plugged in (5V is present)
  • The VTarget LED shines when the voltage on VTarget is over 0.7V
  • The SWD LED shines when the SWD interface is selected
  • The Acivity light is SW driven from OpenOCD or others.

Housing

The housing has been designed with latches, so it can be quickly opened and closed. 3D printing with PLA has given the best results so far. Be warned, the housing was designed with minimal tolerances, so it might be a snug fit.

Future improvements:

  • Possibly split the two Vtarget pins into two separate pins - possibility of powering the target with say 5V, while communication works on 1.8V, etc.
  • Instead of rounded corners, use inverted rounded corners, or no rounding at all. This would reduce waste during production of PCBs, since they could be panelized more easily (just V-cut, no mouse bites required)
  • Fixup ftdi_eeprom & FT-Prog differences
  • Update schematic to newer version of KiCad, and not use rescue symbols.
  • Test the power section & enabling via the FTDI. As it is, that is UNTESTED

Parts

103
QtyValueFootprintReferences
14100nFCapacitor_SMD:C_0603_1608Metric_Pad1.05x0.95mm_HandSolderC2, C4, C6, C9, C11, C14, C18, C19, C20, C21, C22, C23, C24, C26
111kResistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolderR9, R12, R13, R15, R17, R21, R22, R26, R31, R32, R33
6LEDLED_THT:LED_D3.0mmD1, D2, D3, D4, D5, D6
5100kResistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolderR8, R14, R16, R28, R29
54u7Capacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolderC1, C3, C5, C7, C8
54x220RResistor_SMD:R_Array_Convex_4x0603RN4, RN5, RN6, RN7, RN8
410kResistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolderR2, R7, R27, R30
474LVC125Package_SO:TSSOP-14_4.4x5mm_P0.65mmU9, U11, U12, U13
4MountingHoleMountingHole:MountingHole_3.2mm_M3H1, H2, H3, H4
4SRV05-4Package_TO_SOT_SMD:SOT-23-6U1, U2, U3, U5
3220kResistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolderR18, R19, R20
34x470kResistor_SMD:R_Array_Convex_4x0603RN1, RN2, RN3
210RResistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolderR5, R6
227pFCapacitor_SMD:C_0603_1608Metric_Pad1.05x0.95mm_HandSolderC10, C12
24.7uFCapacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolderC13, C16
25k1Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolderR24, R25
2600R, 1AInductor_SMD:L_0603_1608Metric_Pad1.05x0.95mm_HandSolderFB1, FB3
2BC847Package_TO_SOT_SMD:SOT-23Q1, Q2
2DNSCapacitor_SMD:C_0603_1608Metric_Pad1.05x0.95mm_HandSolderC17, C25
10RResistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolderR1
11.5uHKiCAD library:SMNR4018_(1616FPS)L1
112MHzCrystal:Crystal_SMD_3225-4Pin_3.2x2.5mm_HandSolderingY1
112kResistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolderR4
1180kResistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolderR10
11RResistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolderR23
1220R, 2.5AInductor_SMD:L_0603_1608Metric_Pad1.05x0.95mm_HandSolderFB2
12kResistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolderR3
1330kResistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolderR34
1470kResistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolderR11
174LVC157APackage_SO:TSSOP-16_4.4x5mm_P0.65mmU10
193LCxxBPackage_SO:SOIC-8_3.9x4.9mm_P1.27mmU6
1BC857Package_TO_SOT_SMD:SOT-23Q3
1BL8028Package_TO_SOT_SMD:SOT-23-5U8
1CONN_02X10Connector_Multicomp:Multicomp_MC9A22-2034_2x10_P2.54mm_HorizontalJ4
1Conn_01x03_MaleConnector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJ2
1FT2232H-56QPackage_DFN_QFN:QFN-56-1EP_8x8mm_P0.5mm_EP5.6x5.6mmU7
1LN1134A332MR-GPackage_TO_SOT_SMD:SOT-23-5U4
1LOGOKiCAD library:FOX_LOGO_MASKMARK1
1SW_DIP_x04Button_Switch_THT:SW_DIP_SPSTx04_Slide_9.78x12.34mm_W7.62mm_P2.54mmSW1
1USB_C_Receptacle_USB2.0KiCAD library:Jing USB C 2.0 16pin receptableJ1

Similar boards

  • 4 layers150 × 99.5 mmRnvm bart, the printed circuit board in 3D

    Rnvm bart

    kitspace-test-repos/kicad6-file-collection

    883 partsMIT
  • 2 layers70.1 × 63.5 mmCps1 adapter, the printed circuit board in 3D

    Cps1 adapter

    marqs85/cps2_digiav

    CPS2 digital AV interface

    41 parts49
  • 2 layers161.3 × 90.2 mmFull Card, the printed circuit board in 3D

    Full Card

    flypie/Ace-2019

    Reimplimentation of the Jupiter ACE with slightly more modern hardware. https://www.jupiter-ace.co.uk/ the KiCad versions are the up to date designs which are available at https://jupiterdeuce.blogspot.com and…

    76 parts13GPL-3.0
  • 4 layers50 × 75 mmAOS16 Double Buffer, the printed circuit board in 3D

    AOS16 Double Buffer

    AJain9199/AOS16

    Table of Contents About The Project Pictures Technical Details Directory Structure To-Do Acknowledgments

    69 parts1
  • 4 layers130 × 64.3 mmTspico v2.6, the printed circuit board in 3D

    Tspico v2.6

    timex-sinclair-projects/tspico-hardware

    Status 2026-10-19: prototype 3 (v3.0-proto3, changes below). Proto1 (v3.0-proto1) was built and brought up; proto2 added its fixes (below).

    93 partsCERN-OHL-S-2.0
  • 4 layers100 × 100 mmPCBA OCTV, the printed circuit board in 3D

    PCBA OCTV

    intechstudio/grid-hardware

    403 parts59GPL-3.0
  • 4 layers56 × 60 mmPCBA KNOT, the printed circuit board in 3D

    PCBA KNOT

    intechstudio/knot

    Knot is the bridge between old-school MIDI gear like synthesizers, groove boxes, guitar pedals and neat USB MIDI devices.

    111 parts58GPL-3.0

Questions

How big is the JTAG SWD adapter PCB?

It measures 91.2 × 48.3 mm and has 2 copper layers, 1.6 mm thick.

What parts does the JTAG SWD adapter use?

103 parts, built around the 74LVC125AD, SRV05-4, 74LVC157AD and LN1134A332MR-G. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the JTAG SWD adapter KiCad files?

From the Neofoxx/JTAG-SWD-adapter repository on GitHub, at the commit this page was made from: the board is HW/V4/JTAG-SWD-adapter.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.

Can I use the JTAG SWD adapter design in my own project?

Its repository states no licence, so its author keeps all rights: ask Neofoxx before reusing the design.