ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
9 мая
1430359
klen (27.04.2024 10:32, просмотров: 138)
отладчик BMP (blackmagic debug). попалась платка в которой stm32f405 заменили на gd32f405 - bmp отказался ее отлаживать ибо не опознал. пришлось в bmp добавить поддержку китайца, шьет и отлаживает. фузы не пробовал. 

https://black-magic.org/index.html

https://github.com/blackmagic-debug/blackmagic


diff --git a/src/target/stm32f4.c b/src/target/stm32f4.c
index b90ce269..7e93e704 100644
--- a/src/target/stm32f4.c
+++ b/src/target/stm32f4.c
@@ -137,6 +137,7 @@ typedef struct stm32f4_priv {
 #define ID_STM32F72X  0x452U
 #define ID_STM32F410  0x458U
 #define ID_STM32F413  0x463U
+#define ID_GD32F405   0xfa4U
 #define ID_GD32F450   0x2b3U
 #define ID_GD32F470   0xa2eU
 
@@ -195,6 +196,8 @@ static char *stm32f4_get_chip_name(const uint32_t device_id)
 		return "STM32F76x";
 	case ID_STM32F72X: /* F72/3xC/E RM0431 */
 		return "STM32F72x";
+	case ID_GD32F405: /* GigaDevice F405 */
+		return "GD32F405";
 	case ID_GD32F450: /* GigaDevice F450 */
 		return "GD32F450";
 	case ID_GD32F470: /* GigaDevice F470 */
@@ -247,7 +250,7 @@ bool stm32f4_probe(target_s *t)
 
 bool gd32f4_probe(target_s *t)
 {
-	if (t->part_id != ID_GD32F450 && t->part_id != ID_GD32F470)
+	if ( t->part_id != ID_GD32F405 && t->part_id != ID_GD32F450 && t->part_id != ID_GD32F470)
 		return false;
 
 	t->attach = cortexm_attach;
@@ -580,6 +583,7 @@ static bool optcr_mask(target_s *const t, uint32_t *const val)
 		break;
 	case ID_STM32F46X:
 	case ID_STM32F42X:
+	case ID_GD32F405:
 	case ID_GD32F450:
 	case ID_GD32F470:
 		val[0] &= ~0x30000000U;
@@ -622,7 +626,7 @@ static size_t stm32f4_opt_bytes_for(const uint16_t part_id)
 		return 3;
 	if (part_id == ID_STM32F42X || part_id == ID_STM32F46X || part_id == ID_STM32F74X || part_id == ID_STM32F76X)
 		return 2;
-	if (part_id == ID_GD32F450 || part_id == ID_GD32F470)
+	if (part_id == ID_GD32F405 || part_id == ID_GD32F450 || part_id == ID_GD32F470)
 		return 2;
 	return 1;
 }
@@ -679,6 +683,7 @@ static bool stm32f4_option_write_default(target_s *t)
 	switch (t->part_id) {
 	case ID_STM32F42X:
 	case ID_STM32F46X:
+	case ID_GD32F405:
 	case ID_GD32F450:
 	case ID_GD32F470:
 		val[0] = 0x0fffaaedU;