Stlink: [功能] 支持 GD32F303VGT6 (unknown coreid)

创建于 2019-02-15  ·  12评论  ·  资料来源: stlink-org/stlink

  • [X] 编程器/开发板类型:Stlink/v2
  • [X] 操作系统:Ubuntu 18.04.1
  • [X] Stlink 工具版本和/或 git commit hash: v1.5.1-15-g3295ab4
  • [X] Stlink 命令行工具名称:st-flash
  • [X] 目标芯片(和可选板):GD32F303VGT6

芯片擦除正常,但在进入写入例程时收到错误“未知的核心 ID,不确定要使用什么闪存加载程序,正在中止!核心 ID:2ba01477,芯片 ID:430”。

输出:

Flash page at addr: 0x080ff800 erased
2019-02-14T18:14:06 INFO common.c: Finished erasing 512 pages of 2048 (0x800) bytes
2019-02-14T18:14:06 INFO common.c: Starting Flash write for VL/F0/F3/F1_XL core id
2019-02-14T18:14:06 ERROR flash_loader.c: unknown coreid, not sure what flash loader to use, aborting! coreid: 2ba01477, chipid: 430
2019-02-14T18:14:06 WARN flash_loader.c: Failed to write flash loader to sram!
2019-02-14T18:14:06 ERROR common.c: stlink_flash_loader_init() == -1
2019-02-14T18:14:06 DEBUG common.c: *** stlink_read_debug32 ffffffff is 0x8000000
2019-02-14T18:14:06 DEBUG common.c: *** stlink_write_reg
data_len = 2 0x2
 81 00

2019-02-14T18:14:06 DEBUG common.c: *** stlink_read_debug32 ffffffff is 0x8000004
2019-02-14T18:14:06 DEBUG common.c: *** stlink_write_reg
data_len = 2 0x2
 80 00

2019-02-14T18:14:06 DEBUG common.c: *** stlink_run ***
stlink_fwrite_flash() == -1
2019-02-14T18:14:06 DEBUG common.c: *** stlink_exit_debug_mode ***
2019-02-14T18:14:06 DEBUG common.c: *** stlink_write_debug32 a05f0000 to 0xe000edf0
2019-02-14T18:14:06 DEBUG common.c: *** stlink_close ***

ST-LINK 实用程序 说:

```
设备 ID:0x430
设备闪存大小:1 MB
器件系列:STM32F10xx XL-密度

codfeature-request errounknown-coreid generadocumention olinux programmestlinkv2 targegd32f3

最有用的评论

嗨,西齐托。
项目略有变化,但很容易对齐。

更改 /include/stm32.h - 看起来像:
// 皮层核心 ID

定义 STM32VL_CORE_ID 0x1ba01477

定义 CS32VL_CORE_ID 0x2ba01477

定义 STM32F7_CORE_ID 0x5ba02477

将 src/flash_loader.c - 内部函数 stlink_flash_loader_write_to_sram 更改为(~第 264 行):
} else if (sl->core_id == STM32VL_CORE_ID
|| sl->core_id == CS32VL_CORE_ID
|| sl->chip_id == STLINK_CHIPID_STM32_F1_MEDIUM
|| sl->chip_id == STLINK_CHIPID_STM32_F3

然后您需要使用这些更改编译 stlink 实用程序,它应该可以工作...

所有12条评论

我认为 GD32 微控制器是真正的 ST Microelectronics 微控制器的克隆。 支持它们很好,但我们不能像这个问题 #761 那样破坏现有支持的微控制器。

供参考: http :

大家好,
我在 CS32F103C8T6 芯片上遇到了同样的问题,它是 STM32F103C8T6 的克隆。

也许它对记者很有价值,因为花了很多时间才弄清楚出了什么问题, - 我已经通过以下方式添加了我的芯片的核心 ID:

diff --git a/include/stlink.h b/include/stlink.h
index abacd12..582de7b 100644
--- a/include/stlink.h
+++ b/include/stlink.h
@@ -53,6 +53,7 @@ extern "C" {
     /* cortex core ids */
     // TODO clean this up...
 #define STM32VL_CORE_ID 0x1ba01477
+#define CS32VL_CORE_ID 0x2ba01477
 #define STM32F7_CORE_ID 0x5ba02477

     // Constant STM32 memory map figures
diff --git a/src/flash_loader.c b/src/flash_loader.c
index 7684680..72ed495 100644
--- a/src/flash_loader.c
+++ b/src/flash_loader.c
@@ -262,6 +262,7 @@ int stlink_flash_loader_write_to_sram(stlink_t *sl, stm32_addr_t* addr, size_t*
         loader_code = loader_code_stm32l;
         loader_size = sizeof(loader_code_stm32l);
     } else if (sl->core_id == STM32VL_CORE_ID
+            || sl->core_id == CS32VL_CORE_ID
             || sl->chip_id == STLINK_CHIPID_STM32_F3
             || sl->chip_id == STLINK_CHIPID_STM32_F3_SMALL
             || sl->chip_id == STLINK_CHIPID_STM32_F303_HIGH

在此之后 - 一切都按预期工作。 由于您的芯片不同,请注意仔细检查它应该克隆的核心标识符。

问候,沃洛迪米尔。

st-link (v2) 是“去处”,我刚刚刷了一个 nrf51822(北欧半导体 ble soc)
https://devzone.nordicsemi.com/f/nordic-qa/13869/openocd-promgram-nrf51822-with-st-link-v2-mini
https://devzone.nordicsemi.com/f/nordic-qa/12316/program-bluetooth-for-nrf51822-yunjia-board-with-stlink-v2
但我使用了 openocd 虽然哈哈
关键可能是我们可能需要将 st-link 重新设计为管道模块
st-link 几乎被用作通用的 swd 加密狗。 我认为 openocd 将加密狗即 st-link 和目标 soc 分开,例如 stm32f103(我猜这是默认的),其余的它们可能需要是“插件”或可能与 stm32 不同的附加 soc (甚至是它的克隆体)

大家好,
我在 CS32F103C8T6 芯片上遇到了同样的问题,它是 STM32F103C8T6 的克隆。

也许它对记者很有价值,因为花了很多时间才弄清楚出了什么问题, - 我已经通过以下方式添加了我的芯片的核心 ID:

diff --git a/include/stlink.h b/include/stlink.h
index abacd12..582de7b 100644
--- a/include/stlink.h
+++ b/include/stlink.h
@@ -53,6 +53,7 @@ extern "C" {
     /* cortex core ids */
     // TODO clean this up...
 #define STM32VL_CORE_ID 0x1ba01477
+#define CS32VL_CORE_ID 0x2ba01477
 #define STM32F7_CORE_ID 0x5ba02477

     // Constant STM32 memory map figures
diff --git a/src/flash_loader.c b/src/flash_loader.c
index 7684680..72ed495 100644
--- a/src/flash_loader.c
+++ b/src/flash_loader.c
@@ -262,6 +262,7 @@ int stlink_flash_loader_write_to_sram(stlink_t *sl, stm32_addr_t* addr, size_t*
         loader_code = loader_code_stm32l;
         loader_size = sizeof(loader_code_stm32l);
     } else if (sl->core_id == STM32VL_CORE_ID
+            || sl->core_id == CS32VL_CORE_ID
             || sl->chip_id == STLINK_CHIPID_STM32_F3
             || sl->chip_id == STLINK_CHIPID_STM32_F3_SMALL
             || sl->chip_id == STLINK_CHIPID_STM32_F303_HIGH

在此之后 - 一切都按预期工作。 由于您的芯片不同,请注意仔细检查它应该克隆的核心标识符。

问候,沃洛迪米尔。

你能告诉我你在哪里添加了这段代码以闪存到cs32中吗?
我正在使用 Ubuntu 来刷写代码,并且我有相同的 coreid 问题,但我有 0 条线索可以将上面的代码复制到哪里来解决我的问题。

嗨,西齐托。
项目略有变化,但很容易对齐。

更改 /include/stm32.h - 看起来像:
// 皮层核心 ID

定义 STM32VL_CORE_ID 0x1ba01477

定义 CS32VL_CORE_ID 0x2ba01477

定义 STM32F7_CORE_ID 0x5ba02477

将 src/flash_loader.c - 内部函数 stlink_flash_loader_write_to_sram 更改为(~第 264 行):
} else if (sl->core_id == STM32VL_CORE_ID
|| sl->core_id == CS32VL_CORE_ID
|| sl->chip_id == STLINK_CHIPID_STM32_F1_MEDIUM
|| sl->chip_id == STLINK_CHIPID_STM32_F3

然后您需要使用这些更改编译 stlink 实用程序,它应该可以工作...

嗨,西齐托。
项目略有变化,但很容易对齐。

更改 /include/stm32.h - 看起来像:
// 皮层核心 ID

定义 STM32VL_CORE_ID 0x1ba01477

定义 CS32VL_CORE_ID 0x2ba01477

定义 STM32F7_CORE_ID 0x5ba02477

将 src/flash_loader.c - 内部函数 stlink_flash_loader_write_to_sram 更改为(~第 264 行):
} else if (sl->core_id == STM32VL_CORE_ID
|| sl->core_id == CS32VL_CORE_ID
|| sl->chip_id == STLINK_CHIPID_STM32_F1_MEDIUM
|| sl->chip_id == STLINK_CHIPID_STM32_F3

然后您需要使用这些更改编译 stlink 实用程序,它应该可以工作...

嗨 dexvovich,
Ty 为了您的帮助,我更改了上述文件,但我遇到了一个新问题,即当我使用命令“make flash”时,系统正在使用“flash_loader.c”的旧内容。
我试图重新启动电脑,但我遇到了同样的问题,他没有阅读我所做的新更改。
如果您有任何想法如何强迫他使用新文件,请联系我。

我建议make clean并重建以最终解决后者,这似乎与实际问题无关。 如果需要进一步的帮助,请随时为此提交新的工单。 ;-)

@eugenesia :您很可能无法访问此 MCU,但在我看来,就电子标识符而言,此设备似乎与 CKS32F103 以某种方式相关。 此外,解决该问题的尝试与 CKS32F103 的第一种方法相同,后者引入了回归 (#757)。 因此,这也可能已通过 #805 解决。 你怎么看待这件事?

@rayslinky :你能用 #805 验证这一点吗?

@eugenesia :您很可能无法访问此 MCU,但在我看来,就电子标识符而言,此设备似乎与 CKS32F103 以某种方式相关。 此外,解决该问题的尝试与 CKS32F103 的第一种方法相同,后者引入了回归 (#757)。 因此,这也可能已通过 #805 解决。 你怎么看待这件事?

嗨@Nightwalker-87,我查看了您围绕 CS32 芯片的事件年表https://github.com/texane/stlink/issues/756#issuecomment -605629968。 这有点像错误喜剧,如果你没有解决它,它就会继续下去,所以感谢你终于做到了。

我认为 #805 不会解决这个问题,因为这会增加对STLINK_CHIPID_STM32_F1_MEDIUM (0x410) 芯片 ID 的检测。 来自https://github.com/texane/stlink/issues/769#issue -410536487 这个 GD32 板有芯片 ID 0x430(不是 0x410)和核心 ID 0x2ba01477。

通过芯片 ID 识别 GD32 板可能不起作用。 _chipid.h_ 的最新版本将芯片 ID 值 0x430 描述为属于 STM32F1 板STLINK_CHIPID_STM32_F1_XL 。 因此,将该值分配给 GD32 板(STM32F303 板的克隆)会破坏“STM32_F1_XL”板的识别。

我们可以尝试通过它的核心 ID 来识别这个板,但我们知道核心 ID 0x2ba01477 是有问题的,因为不同的板都有这个 ID。 这就是 #757 中的修复在 #761 中引入回归的原因。

以下是我可以收集到的关于这些板的信息:

董事会 | 制造商 | 克隆 | 核心 | 核心 ID | 芯片 ID | 参考
--- | --- | --- | --- | --- | --- | ---
CS32F103C8T6 | 中国密钥系统 (CKS) | STM32F103C8T6 | ARM Cortex-M3 | 0x2ba01477 | 0x410 ( STLINK_CHIPID_STM32_F1_MEDIUM ) | 第756章
STM32F401 | 圣 | 不适用(原件) | ARM Cortex-M4 | 0x2ba01477 | ? (我没有) | https://github.com/texane/stlink/issues/761#issuecomment -462068740
GD32F303VGT6 | 千兆设备 | STM32F303 | Arm Cortex-M4 | 0x2ba01477 | 0x430 | https://github.com/texane/stlink/issues/769#issue -410536487 GigaDevice GD32 产品页面

从我们遇到的问题来看,克隆芯片的 ID 似乎不可信。 也许我们应该能够使用命令行参数来选择闪存加载器,如此处所建议的https://github.com/texane/stlink/issues/761#issuecomment -462868649 ?

一个临时解决方案可能是通过其核心 ID 和芯片 ID 来识别克隆板,希望它们足够独特?

我认为 #805 不会解决这个问题,因为这会增加对STLINK_CHIPID_STM32_F1_MEDIUM (0x410) 芯片 ID 的检测。 来自#769(评论)这块 GD32 板的芯片 ID 为 0x430(不是 0x410),核心 ID 为 0x2ba01477。

通过芯片 ID 识别 GD32 板可能不起作用。 最新版本的chipid.h将芯片ID值0x430描述为属于STM32F1板STLINK_CHIPID_STM32_F1_XL。 因此,将该值分配给 GD32 板(STM32F303 板的克隆)会破坏“STM32_F1_XL”板的识别。

你就在这里。 老实说,如果我仔细观察的话,我本可以自己发现的——没关系……

我喜欢使用核心 ID + 芯片 ID + 读出制造商来正确识别电路板的想法 - 对于正版电路板以及克隆电路板。 也许甚至还有第四个参数可以帮助区分。 人们必须对此进行一些研究。 无论如何,这可能是一种避免相当多的错误识别的方法。 然而,这可以在不需要命令行参数的情况下进行硬编码。

从我的角度来看,将类似于上面示例的查找表放入我们的文档的想法也是可取的。 它可以基于/include/stlink/chipid.h/include/stm32.h 。 这也可以取代/doc/testedboards.md ,我认为它(部分)已经过时了。 然而,来自那里的可用信息可以包含在这样的表中。

与#903 相关。

此页面是否有帮助?
0 / 5 - 0 等级