bsp: flash AT32 boards with probe-rs

flash-atlink is not defined anywhere, so make flash fails on every AT32
board. Add flash-probe-rs and point the seven families probe-rs 0.32.0
knows at it. at32f45x stays as is: probe-rs has no AT32F455/456/457.
diff --git a/hw/bsp/at32f402_405/family.mk b/hw/bsp/at32f402_405/family.mk
index 5f9f3cc..14b3c85 100644
--- a/hw/bsp/at32f402_405/family.mk
+++ b/hw/bsp/at32f402_405/family.mk
@@ -62,4 +62,5 @@
 # For freeRTOS port source
 FREERTOS_PORTABLE_SRC = $(FREERTOS_PORTABLE_PATH)/ARM_CM4F
 
-flash: flash-atlink
+PROBE_RS_CHIP = ${MCU_VARIANT}
+flash: flash-probe-rs
diff --git a/hw/bsp/at32f403a_407/family.mk b/hw/bsp/at32f403a_407/family.mk
index f7dde7d..8c965f8 100644
--- a/hw/bsp/at32f403a_407/family.mk
+++ b/hw/bsp/at32f403a_407/family.mk
@@ -37,4 +37,5 @@
 # For freeRTOS port source
 FREERTOS_PORTABLE_SRC = $(FREERTOS_PORTABLE_PATH)/ARM_CM4F
 
-flash: flash-atlink
+PROBE_RS_CHIP = ${MCU_VARIANT}
+flash: flash-probe-rs
diff --git a/hw/bsp/at32f413/family.mk b/hw/bsp/at32f413/family.mk
index 86744e1..c8f3de3 100644
--- a/hw/bsp/at32f413/family.mk
+++ b/hw/bsp/at32f413/family.mk
@@ -37,4 +37,5 @@
 # For freeRTOS port source
 FREERTOS_PORTABLE_SRC = $(FREERTOS_PORTABLE_PATH)/ARM_CM4F
 
-flash: flash-atlink
+PROBE_RS_CHIP = ${MCU_VARIANT}
+flash: flash-probe-rs
diff --git a/hw/bsp/at32f415/family.mk b/hw/bsp/at32f415/family.mk
index 72339b7..a570889 100644
--- a/hw/bsp/at32f415/family.mk
+++ b/hw/bsp/at32f415/family.mk
@@ -34,4 +34,5 @@
 
 LD_FILE ?= ${AT32_SDK_LIB}/cmsis/cm4/device_support/startup/gcc/linker/${MCU_LINKER_NAME}_FLASH.ld
 
-flash: flash-atlink
+PROBE_RS_CHIP = ${MCU_VARIANT}
+flash: flash-probe-rs
diff --git a/hw/bsp/at32f423/family.mk b/hw/bsp/at32f423/family.mk
index df53146..41ff28c 100644
--- a/hw/bsp/at32f423/family.mk
+++ b/hw/bsp/at32f423/family.mk
@@ -35,4 +35,5 @@
 
 LD_FILE ?= ${AT32_SDK_LIB}/cmsis/cm4/device_support/startup/gcc/linker/${MCU_LINKER_NAME}_FLASH.ld
 
-flash: flash-atlink
+PROBE_RS_CHIP = ${MCU_VARIANT}
+flash: flash-probe-rs
diff --git a/hw/bsp/at32f425/family.mk b/hw/bsp/at32f425/family.mk
index b659608..f2dc838 100644
--- a/hw/bsp/at32f425/family.mk
+++ b/hw/bsp/at32f425/family.mk
@@ -34,4 +34,5 @@
 
 LD_FILE ?= ${AT32_SDK_LIB}/cmsis/cm4/device_support/startup/gcc/linker/${MCU_LINKER_NAME}_FLASH.ld
 
-flash: flash-atlink
+PROBE_RS_CHIP = ${MCU_VARIANT}
+flash: flash-probe-rs
diff --git a/hw/bsp/at32f435_437/family.mk b/hw/bsp/at32f435_437/family.mk
index 7377740..6183301 100644
--- a/hw/bsp/at32f435_437/family.mk
+++ b/hw/bsp/at32f435_437/family.mk
@@ -40,4 +40,5 @@
 
 LD_FILE ?= ${AT32_SDK_LIB}/cmsis/cm4/device_support/startup/gcc/linker/${MCU_LINKER_NAME}_FLASH.ld
 
-flash: flash-atlink
+PROBE_RS_CHIP = ${MCU_VARIANT}
+flash: flash-probe-rs
diff --git a/hw/bsp/family_rules.mk b/hw/bsp/family_rules.mk
index 0115728..b88a2b9 100644
--- a/hw/bsp/family_rules.mk
+++ b/hw/bsp/family_rules.mk
@@ -137,6 +137,13 @@
 flash-openocd: $(BUILD)/$(PROJECT).elf
 	$(OPENOCD) $(OPENOCD_OPTION) -c "program $< verify reset exit"
 
+# --------------- probe-rs -----------------
+# flash with https://probe-rs.rs
+PROBE_RS ?= probe-rs
+PROBE_RS_OPTION ?=
+flash-probe-rs: $(BUILD)/$(PROJECT).elf
+	$(PROBE_RS) download --chip $(PROBE_RS_CHIP) $(PROBE_RS_OPTION) --verify --reset $<
+
 # --------------- openocd-wch -----------------
 # WCH parts need an openocd built with the wlinke adapter. The image is written
 # without verify: WCH code flash is not readable back over the debug bus.