diff --git a/tools/ls_cmsis_dap/Makefile b/tools/ls_cmsis_dap/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..3a1fefe7fa6953d733c704fad77a47a0d34d8449
--- /dev/null
+++ b/tools/ls_cmsis_dap/Makefile
@@ -0,0 +1,16 @@
+.PHONY: all clean
+
+all: ls_cmsis_dap-hidraw ls_cmsis_dap-libusb
+
+clean:
+	-rm *.o ls_cmsis_dap-hidraw ls_cmsis_dap-libusb
+
+ls_cmsis_dap.o: ls_cmsis_dap.c
+
+ls_cmsis_dap-hidraw: LDFLAGS=-lhidapi-hidraw
+ls_cmsis_dap-hidraw: ls_cmsis_dap.o
+	$(CC) $(LDFLAGS) -o $@ $<
+
+ls_cmsis_dap-libusb: LDFLAGS=-lhidapi-libusb
+ls_cmsis_dap-libusb: ls_cmsis_dap.o
+	$(CC) $(LDFLAGS) -o $@ $<
diff --git a/tools/ls_cmsis_dap/ls_cmsis_dap.c b/tools/ls_cmsis_dap/ls_cmsis_dap.c
new file mode 100644
index 0000000000000000000000000000000000000000..fc5c67bca052605f90875cdf702cfa83ac55f0dd
--- /dev/null
+++ b/tools/ls_cmsis_dap/ls_cmsis_dap.c
@@ -0,0 +1,28 @@
+#include <stddef.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <hidapi/hidapi.h>
+
+int main(int argc, char *argv[])
+{
+	int rc = 0;
+	if( (rc = hid_init()) ){
+		fprintf(stderr, "hid_init: %d\n", rc);
+		goto done;
+	}
+
+	struct hid_device_info *hid_devs = hid_enumerate(0x0d28, 0x0204);
+	if( !hid_devs ){
+		fprintf(stderr, "hid_enumerate: NULL\n");
+		rc = 1; goto done;
+	}
+
+	for( struct hid_device_info *dev = hid_devs; dev ; dev = dev->next ){
+		fprintf(stdout, "%s\n", dev->path);
+	}
+
+done:
+	if( hid_devs ){ hid_free_enumeration(hid_devs); }
+	hid_exit();
+	return -1;
+}