diff --git a/boards/0xcb_helios.json b/boards/0xcb_helios.json
index 5a5ca17..11d16e3 100644
--- a/boards/0xcb_helios.json
+++ b/boards/0xcb_helios.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/adafruit_feather.json b/boards/adafruit_feather.json
index 9fa4cce..8837f89 100644
--- a/boards/adafruit_feather.json
+++ b/boards/adafruit_feather.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/adafruit_feather_dvi.json b/boards/adafruit_feather_dvi.json
index b829f7d..f68c823 100644
--- a/boards/adafruit_feather_dvi.json
+++ b/boards/adafruit_feather_dvi.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/adafruit_feather_rfm.json b/boards/adafruit_feather_rfm.json
index b46e713..a7e9bbe 100644
--- a/boards/adafruit_feather_rfm.json
+++ b/boards/adafruit_feather_rfm.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/adafruit_feather_scorpio.json b/boards/adafruit_feather_scorpio.json
index 02973e9..c4ac220 100644
--- a/boards/adafruit_feather_scorpio.json
+++ b/boards/adafruit_feather_scorpio.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/adafruit_feather_thinkink.json b/boards/adafruit_feather_thinkink.json
index 3c5b979..8947c7d 100644
--- a/boards/adafruit_feather_thinkink.json
+++ b/boards/adafruit_feather_thinkink.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/adafruit_feather_usb_host.json b/boards/adafruit_feather_usb_host.json
index 0651f47..5778786 100644
--- a/boards/adafruit_feather_usb_host.json
+++ b/boards/adafruit_feather_usb_host.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/adafruit_itsybitsy.json b/boards/adafruit_itsybitsy.json
index bb3e1c0..b70ad59 100644
--- a/boards/adafruit_itsybitsy.json
+++ b/boards/adafruit_itsybitsy.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/adafruit_kb2040.json b/boards/adafruit_kb2040.json
index 9b9e27c..9c013ba 100644
--- a/boards/adafruit_kb2040.json
+++ b/boards/adafruit_kb2040.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/adafruit_macropad2040.json b/boards/adafruit_macropad2040.json
index fd21d5a..dc0ec66 100644
--- a/boards/adafruit_macropad2040.json
+++ b/boards/adafruit_macropad2040.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/adafruit_qtpy.json b/boards/adafruit_qtpy.json
index 74bf84f..c2de2b2 100644
--- a/boards/adafruit_qtpy.json
+++ b/boards/adafruit_qtpy.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/adafruit_stemmafriend.json b/boards/adafruit_stemmafriend.json
index 5d3b432..2299a53 100644
--- a/boards/adafruit_stemmafriend.json
+++ b/boards/adafruit_stemmafriend.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/adafruit_trinkeyrp2040qt.json b/boards/adafruit_trinkeyrp2040qt.json
index 3765368..c4c10b4 100644
--- a/boards/adafruit_trinkeyrp2040qt.json
+++ b/boards/adafruit_trinkeyrp2040qt.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/arduino_nano_connect.json b/boards/arduino_nano_connect.json
index 68e9abb..f06b433 100644
--- a/boards/arduino_nano_connect.json
+++ b/boards/arduino_nano_connect.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/bridgetek_idm2040-7a.json b/boards/bridgetek_idm2040-7a.json
index 4c04fc4..42edf3d 100644
--- a/boards/bridgetek_idm2040-7a.json
+++ b/boards/bridgetek_idm2040-7a.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/challenger_2040_lora.json b/boards/challenger_2040_lora.json
index 4636c1d..5d56ca5 100644
--- a/boards/challenger_2040_lora.json
+++ b/boards/challenger_2040_lora.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/challenger_2040_lte.json b/boards/challenger_2040_lte.json
index e2ce6a4..dd33426 100644
--- a/boards/challenger_2040_lte.json
+++ b/boards/challenger_2040_lte.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/challenger_2040_nfc.json b/boards/challenger_2040_nfc.json
index 0b1ea74..1eade3d 100644
--- a/boards/challenger_2040_nfc.json
+++ b/boards/challenger_2040_nfc.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/challenger_2040_sdrtc.json b/boards/challenger_2040_sdrtc.json
index 0f39dc3..5ba1738 100644
--- a/boards/challenger_2040_sdrtc.json
+++ b/boards/challenger_2040_sdrtc.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/challenger_2040_subghz.json b/boards/challenger_2040_subghz.json
index 43d8e8b..a946eeb 100644
--- a/boards/challenger_2040_subghz.json
+++ b/boards/challenger_2040_subghz.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/challenger_2040_uwb.json b/boards/challenger_2040_uwb.json
index fb34b6d..784224a 100644
--- a/boards/challenger_2040_uwb.json
+++ b/boards/challenger_2040_uwb.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/challenger_2040_wifi.json b/boards/challenger_2040_wifi.json
index 6b2bcff..d76961d 100644
--- a/boards/challenger_2040_wifi.json
+++ b/boards/challenger_2040_wifi.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/challenger_2040_wifi_ble.json b/boards/challenger_2040_wifi_ble.json
index 5d4b829..687ded6 100644
--- a/boards/challenger_2040_wifi_ble.json
+++ b/boards/challenger_2040_wifi_ble.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/challenger_nb_2040_wifi.json b/boards/challenger_nb_2040_wifi.json
index 3d34647..11595d4 100644
--- a/boards/challenger_nb_2040_wifi.json
+++ b/boards/challenger_nb_2040_wifi.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/cytron_maker_nano_rp2040.json b/boards/cytron_maker_nano_rp2040.json
index 2ec7fdf..bce9977 100644
--- a/boards/cytron_maker_nano_rp2040.json
+++ b/boards/cytron_maker_nano_rp2040.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/cytron_maker_pi_rp2040.json b/boards/cytron_maker_pi_rp2040.json
index ccc793d..db57ee5 100644
--- a/boards/cytron_maker_pi_rp2040.json
+++ b/boards/cytron_maker_pi_rp2040.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/datanoisetv_picoadk.json b/boards/datanoisetv_picoadk.json
index 503763c..a7d0d8f 100644
--- a/boards/datanoisetv_picoadk.json
+++ b/boards/datanoisetv_picoadk.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/dfrobot_beetle_rp2040.json b/boards/dfrobot_beetle_rp2040.json
index 44bcd65..a7f879f 100644
--- a/boards/dfrobot_beetle_rp2040.json
+++ b/boards/dfrobot_beetle_rp2040.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/electroniccats_huntercat_nfc.json b/boards/electroniccats_huntercat_nfc.json
index 35ca902..00b210c 100644
--- a/boards/electroniccats_huntercat_nfc.json
+++ b/boards/electroniccats_huntercat_nfc.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/extelec_rc2040.json b/boards/extelec_rc2040.json
index ca2f3c8..d6e348c 100644
--- a/boards/extelec_rc2040.json
+++ b/boards/extelec_rc2040.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/flyboard2040_core.json b/boards/flyboard2040_core.json
index de6b228..6f0301c 100644
--- a/boards/flyboard2040_core.json
+++ b/boards/flyboard2040_core.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/generic.json b/boards/generic.json
index 3c95641..c22a678 100644
--- a/boards/generic.json
+++ b/boards/generic.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/ilabs_rpico32.json b/boards/ilabs_rpico32.json
index 97bffc0..82dfe28 100644
--- a/boards/ilabs_rpico32.json
+++ b/boards/ilabs_rpico32.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/melopero_cookie_rp2040.json b/boards/melopero_cookie_rp2040.json
index 5c8701c..d1980d2 100644
--- a/boards/melopero_cookie_rp2040.json
+++ b/boards/melopero_cookie_rp2040.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/melopero_shake_rp2040.json b/boards/melopero_shake_rp2040.json
index c36111b..0d4eeda 100644
--- a/boards/melopero_shake_rp2040.json
+++ b/boards/melopero_shake_rp2040.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/nekosystems_bl2040_mini.json b/boards/nekosystems_bl2040_mini.json
index 3fd2807..0b203fe 100644
--- a/boards/nekosystems_bl2040_mini.json
+++ b/boards/nekosystems_bl2040_mini.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/nullbits_bit_c_pro.json b/boards/nullbits_bit_c_pro.json
index 9367d14..420fae3 100644
--- a/boards/nullbits_bit_c_pro.json
+++ b/boards/nullbits_bit_c_pro.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/pico.json b/boards/pico.json
index 55fdfa4..b956978 100644
--- a/boards/pico.json
+++ b/boards/pico.json
@@ -41,6 +41,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/pimoroni_pga2040.json b/boards/pimoroni_pga2040.json
index fadcb61..17fc4ab 100644
--- a/boards/pimoroni_pga2040.json
+++ b/boards/pimoroni_pga2040.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/rpipico.json b/boards/rpipico.json
index 72d6beb..d5be483 100644
--- a/boards/rpipico.json
+++ b/boards/rpipico.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/rpipicow.json b/boards/rpipicow.json
index 33b4cc8..717deda 100644
--- a/boards/rpipicow.json
+++ b/boards/rpipicow.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/seeed_xiao_rp2040.json b/boards/seeed_xiao_rp2040.json
index 24eb648..7fba246 100644
--- a/boards/seeed_xiao_rp2040.json
+++ b/boards/seeed_xiao_rp2040.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/solderparty_rp2040_stamp.json b/boards/solderparty_rp2040_stamp.json
index a459449..ab9d517 100644
--- a/boards/solderparty_rp2040_stamp.json
+++ b/boards/solderparty_rp2040_stamp.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/sparkfun_promicrorp2040.json b/boards/sparkfun_promicrorp2040.json
index 2052a8b..ea50345 100644
--- a/boards/sparkfun_promicrorp2040.json
+++ b/boards/sparkfun_promicrorp2040.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/sparkfun_thingplusrp2040.json b/boards/sparkfun_thingplusrp2040.json
index a14c9d6..2e92ae7 100644
--- a/boards/sparkfun_thingplusrp2040.json
+++ b/boards/sparkfun_thingplusrp2040.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/upesy_rp2040_devkit.json b/boards/upesy_rp2040_devkit.json
index de0d5ce..8fdfb93 100644
--- a/boards/upesy_rp2040_devkit.json
+++ b/boards/upesy_rp2040_devkit.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/vccgnd_yd_rp2040.json b/boards/vccgnd_yd_rp2040.json
index 019c2f2..7d05b08 100644
--- a/boards/vccgnd_yd_rp2040.json
+++ b/boards/vccgnd_yd_rp2040.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/viyalab_mizu.json b/boards/viyalab_mizu.json
index c21774c..98cb7df 100644
--- a/boards/viyalab_mizu.json
+++ b/boards/viyalab_mizu.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/waveshare_rp2040_lcd_0_96.json b/boards/waveshare_rp2040_lcd_0_96.json
index 543f260..5d38d0c 100644
--- a/boards/waveshare_rp2040_lcd_0_96.json
+++ b/boards/waveshare_rp2040_lcd_0_96.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/waveshare_rp2040_lcd_1_28.json b/boards/waveshare_rp2040_lcd_1_28.json
index b1a68a5..772eb60 100644
--- a/boards/waveshare_rp2040_lcd_1_28.json
+++ b/boards/waveshare_rp2040_lcd_1_28.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/waveshare_rp2040_one.json b/boards/waveshare_rp2040_one.json
index 7861407..b287e15 100644
--- a/boards/waveshare_rp2040_one.json
+++ b/boards/waveshare_rp2040_one.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/waveshare_rp2040_plus_16mb.json b/boards/waveshare_rp2040_plus_16mb.json
index c3d93ad..6663f53 100644
--- a/boards/waveshare_rp2040_plus_16mb.json
+++ b/boards/waveshare_rp2040_plus_16mb.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/waveshare_rp2040_plus_4mb.json b/boards/waveshare_rp2040_plus_4mb.json
index 8414613..cbdbe1d 100644
--- a/boards/waveshare_rp2040_plus_4mb.json
+++ b/boards/waveshare_rp2040_plus_4mb.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/waveshare_rp2040_zero.json b/boards/waveshare_rp2040_zero.json
index d04692f..f586915 100644
--- a/boards/waveshare_rp2040_zero.json
+++ b/boards/waveshare_rp2040_zero.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/wiznet_5100s_evb_pico.json b/boards/wiznet_5100s_evb_pico.json
index f86924a..6ec8008 100644
--- a/boards/wiznet_5100s_evb_pico.json
+++ b/boards/wiznet_5100s_evb_pico.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/wiznet_5500_evb_pico.json b/boards/wiznet_5500_evb_pico.json
index b633f6d..973f18c 100644
--- a/boards/wiznet_5500_evb_pico.json
+++ b/boards/wiznet_5500_evb_pico.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/boards/wiznet_wizfi360_evb_pico.json b/boards/wiznet_wizfi360_evb_pico.json
index a911556..1c248d5 100644
--- a/boards/wiznet_wizfi360_evb_pico.json
+++ b/boards/wiznet_wizfi360_evb_pico.json
@@ -42,6 +42,7 @@
     "wait_for_upload_port": false,
     "protocol": "picotool",
     "protocols": [
+      "blackmagic",
       "cmsis-dap",
       "jlink",
       "raspberrypi-swd",
diff --git a/builder/main.py b/builder/main.py
index cd26eda..4534fd6 100644
--- a/builder/main.py
+++ b/builder/main.py
@@ -381,6 +381,28 @@ if upload_protocol == "mbed":
         env.VerboseAction(AutodetectPicoDisk, "Looking for upload disk..."),
         env.VerboseAction(UploadUF2ToDisk, "Uploading $SOURCE")
     ]
+
+elif upload_protocol.startswith("blackmagic"):
+    env.Replace(
+        UPLOADER="$GDB",
+        UPLOADERFLAGS=[
+            "-nx",
+            "--batch",
+            "-ex", "target extended-remote $UPLOAD_PORT",
+            "-ex", "monitor %s_scan" %
+            ("jtag" if upload_protocol == "blackmagic-jtag" else "swdp"),
+            "-ex", "attach 1",
+            "-ex", "load",
+            "-ex", "compare-sections",
+            "-ex", "kill"
+        ],
+        UPLOADCMD="$UPLOADER $UPLOADERFLAGS $SOURCE"
+    )
+    upload_source = target_elf
+    upload_actions = [
+        env.VerboseAction(env.AutodetectUploadPort, "Looking for BlackMagic port..."),
+        env.VerboseAction("$UPLOADCMD", "Uploading $SOURCE")
+    ]
 elif upload_protocol == "espota":
     if not env.subst("$UPLOAD_PORT"):
         sys.stderr.write(
diff --git a/platform.py b/platform.py
index f66db00..608fe06 100644
--- a/platform.py
+++ b/platform.py
@@ -86,7 +86,7 @@ class RaspberrypiPlatform(PlatformBase):
         if "tools" not in debug:
             debug["tools"] = {}
 
-        for link in ("cmsis-dap", "jlink", "raspberrypi-swd", "picoprobe"):
+        for link in ("blackmagic", "cmsis-dap", "jlink", "raspberrypi-swd", "picoprobe"):
             if link not in upload_protocols or link in debug["tools"]:
                 continue