芯片擦除正常,但在进入写入例程时收到错误“未知的核心 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-密度
我认为 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
将 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 相关。
最有用的评论
嗨,西齐托。
项目略有变化,但很容易对齐。
更改 /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 实用程序,它应该可以工作...