问题标签 [swd]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
microcontroller - SWD 接口 SAM 设备
我正在尝试为微控制器设计定制板
我正在尝试使用 microchip 的 SAM 系列(SAMD21G18)
我可以在数据表中看到(PA30 和 PA31)作为(SWCLK 和 SWDIO)
所以我买了 ATMEL-ICE,这些是我知道的连接
- VCC -> 目标 VDDIN
- 接地 -> 接地
- SWDIO -> PA31
- SWDCLK -> PA30
- nReset -> 目标重置
其他引脚(键)和(SWO)怎么样?
关于接口..这是从连接器顶部开始的吗?所以我应该在 pcb 上放置确切的焊盘或孔?或者这是来自连接器的底部,我必须翻转它们?
另一个问题,如果我打算制作电路板并将装载机闪入其中.. 将其放入电路的最佳方法是什么
我应该将 SWD 接口用作“盲孔”,然后将编程器引脚插入 pcb 吗?
stm32 - STM32 SWD协议-端口号
我开始在我的 STM32 探索板上使用 SWD 功能。我将 openocd 跟踪输出重定向到文本文件(因为我没有为 Linux 找到任何好的 SWD 监视器)。我不知道为什么我只发送一个字符时会得到两个字符。
在我的输出文件中,每个字符前面都有不同的 ASCII 码(大部分是不可打印的)。由于端口,此前面的代码是恒定的。例如:
我在 github 代码中发现使用 [preceded code] >> 3 公式来获取端口号。其作品。
我正在使用这样的 CubeMX 和 HAL 实用程序:
发送“ch”字符。
为什么我需要使用字节操作?这个前面的代码除了端口号还有其他信息吗?我尝试在 diocumentation 中为此提供资金,但每个示例都使用 ST 监视器
我会明白 SWD 中的确切代码是什么?
arm - 通过 M0+ 上的 SWD 进行芯片擦除
我想通过 SWD 刷新 M0+ 设备。这是由主机处理器而不是程序员实现的。
我已经能够写入并验证到 RAM 但不能写入闪存。
它似乎与 M3/4 内核有点不同,因此它不适用于 M0+。
也许你们中的某个人可以帮助我使用兼容的序列来通过 M0+ 上的 SWD 进行芯片擦除和写入命令?
谢谢丹尼尔
arm - OpenOCD 执行 MI 命令失败:-target-select remote localhost:3333
我在工作中习惯使用 Segger,但我不想花那种钱在家使用,所以这是我第一次使用 OpenOCD 进行调试。我有 Olimex ARM-USB-TINY-H。
我的操作系统是 Ubuntu。我正在使用带有 OpenOCD 插件的 MCUXpresso (Eclipse)。我在 gdb 连接到 OpenOCD 时遇到问题。任何指针都会非常有帮助。
我已将配置选项设置为
控制台输出:
Eclipse 弹出这个错误:
这是 .cfg 文件
更新,运行 --debug 0 控制台的最后一部分是
embedded - 如何使用 OpenOCD ping 芯片(检测芯片是否连接)
1.问题说明
我正在尝试将 OpenOCD 用于不常见的事情。我不想连接到芯片,而只想检测芯片。
我想到的程序如下所示:
stlink.cfg
使用作为-f
参数给出的探针配置文件(例如 )启动 OpenOCD 。所以 OpenOCD 知道使用什么探针,但不知道它会找到什么芯片。OpenOCD 检测到芯片并以某种方式报告(例如,向标准输出写入内容)。如果可能,此操作不应侵入芯片(如重置它)。
OpenOCD 关闭。
以下是有关该过程的更多说明:
注意 1:如果 OpenOCD 没有达到我需要设置 Telnet 或 GDB 客户端与之交互的服务器状态,那就太好了。我很乐意以更方便的方式报告芯片检测,例如在标准输出通道上获取芯片信息。
注2:检测应不侵入芯片。但是,如果 OpenOCD 没有找到任何东西,我想要一种备份方法,让 OpenOCD 尝试更积极地找到芯片(比如按住nRST
引脚)。如果需要,我可以自己调用其他方法(因此 OpenOCD 不需要自动执行此操作)。
注 3:首先,我将仅在带有 STLinkV2 或 STLinkV3 探针的 STM32 芯片上应用此“芯片检测”,稍后还将在其他探针和芯片上应用。
注 4:有些板只有一个 SWD 连接(没有 JTAG)。
注意 5:我正在使用 Windows 10 计算机,并获得了从https://www.playembedded.org/blog/download/下载的最新 OpenOCD 版本(版本0.10.0_dev00921,构建于2019 年 7 月 6 日)
2.到目前为止我尝试过的
Tommy Murphy 先生向我介绍了 OpenOCD 参考手册中的第 10.7 节(参见http://openocd.org/doc/pdf/openocd.pdf)。我已阅读该部分并观察了以下示例:
因为我的芯片通过STLink 探针连接并使用SWD 传输协议(而不是 JTAG),所以我对示例进行了一些修改:
我将NUCLEO_F303K8板连接到我的 PC 以进行此测试。然后我在控制台中发出以下命令:
> openocd -s "C:\...\scripts" -f "C:\...\openocd.cfg"
OpenOCD 输出以下内容,然后终止:
所以我最终提出了一些关于自动探测的问题。
3. 我的问题
问题 1:
“自动探测”(如第 10.7 节所述)真的是我需要的吗?如果答案是否定的,请忽略接下来的问题。
问题 2:
我尝试模仿第 10.7 节中给出的示例,稍作修改以使示例适合我的 Nucleo 板。不幸的是,自动探测失败。这是因为 OpenOCD 不支持使用 SWD 协议进行自动探测吗?或者我只是在我的.cfg
文件中犯了一个错误?
问题 3:
我注意到第 10.7 节中的 Autoprobing 示例配置了 OpenOCD 的重置行为。这是否意味着自动探测在重置芯片的意义上总是“侵入性”的?
问题 4:
第 10.7 节中的 Autoprobing 示例似乎无论如何都将 OpenOCD 带入了服务器状态。有可能避免这种情况吗?我想让这个“芯片检测”保持简单,不需要 Telnet 或 GDB 客户端。
编辑
感谢@nattgris 的出色回答。不过,我还有一些更实际的问题。
1. 使用 ST-Link
假设我们使用的是 ST-Link,尽管它与 OpenOCD 的合作并不理想。你说:
.. 如果您只需要知道芯片是否存在,在某些配置中,ST-Link 可能会被说服为您提供该信息。
我实际上如何说服ST-Link 这样做?换句话说,我应该在我的openocd.cfg
文件中放入什么来实现这一点?
2. 使用 SWD-probe(但不是 ST-Link)
假设我们使用的是真正的 SWD 探针。你说:
如第 10.7 节所述,自动探测仅与 JTAG [...] 相关。只需通过 SWD 连接即可打印相应的信息(
DPIDR
寄存器而不是 TAPIDCODE
)。因此,无论哪种方式,您都可以通过两种协议获得有关芯片的类似信息。[...]
对于所有 Cortex 芯片,您基本上会得到“ARM”而不是芯片的实际制造商(例如“ST”)。虽然 ST(可能还有其他制造商)芯片具有单独的边界扫描 TAP(即仅 JTAG),但它提供了IDCODE
可用于芯片识别的实际 ST。
由此,我得出结论:
第 10.7 节中描述的自动探测仅适用于 JTAG,不适用于 SWD。
由于 SWD 无法使用 Autoprobing,因此另一种方法是简单地连接到芯片,然后 OpenOCD 会自动打印
DPIDR
寄存器。该DPIDR
寄存器相当于 JTAG TAP 的 SWDIDCODE
,可以说是可以在一定程度上识别芯片。但是,如果一个人一开始不知道连接到 PC 的芯片是什么,那么
如何简单地连接到芯片上呢?如果我没记错的话,OpenOCD 总是需要特定的配置文件,比如stm32f7x.cfg
,stm32f4x.cfg
,stm32l0.cfg
, ... 来连接到芯片。显然,JTAG
IDCODE
和 SWD 等效DPIDR
寄存器为芯片设计者提供,对于 ARM-Cortex 芯片来说,它始终是“ARM”。这对于完整的芯片识别是不够的。但是,您说 ARM 芯片具有单独的边界扫描 TAP,提供更多IDCODE
寄存器以进行更完整的识别。不幸的是,这些只是 JTAG。这意味着SWD在芯片识别方面处于死胡同?使用 JTAG 进行自动探测(因此读取
IDCODE
reg)可以是完全非侵入式的。因此,可以使系统复位信号不可用:reset_config none
您说读取DPIDR
过度 SWD(我认为这是 JTAG 自动探测的 SWD 等效项)也是非侵入性的。我还可以通过使重置信号不可用来强制执行“非侵入性”吗?
3. 使用 JTAG-probe(但不是 ST-Link)
JTAG 协议似乎为芯片识别提供了最好的支持(使用 Autoprobing)。我的结论:
第 10.7 节中描述的自动探测
IDCODE
将从芯片打印 TAP。对于只打印“ARM”的 ARM 芯片,而不是实际的制造商(如“ST”)和芯片名称(如“STM32F767ZI”)。我实际上如何确保该程序还打印这些进一步的信息,尤其是实际的芯片名称?换句话说,我应该在我的
openocd.cfg
文件(可能还有 openocd 启动命令)中放入什么来实现这一点?
非常感谢 :-)
jtag - Atollic TrueStudio 中调试程序的问题
我设计了一个电路,我在 PCB 上使用 STM32L452RETx 微控制器。这基本上是一个电流传感器。我正在使用 JTAG-20 连接器进行调试。我正在使用 Atollic TrueStudio IDE。
问题是当我通过在调试配置中选择 JTAG 选项在 TrueStudio 中调试程序时,它会给出错误,提示无法初始化 ST-Link 并且找不到目标,但是当我选择 SWD 时没有错误并且它编程成功。在 STM32CubeMx 中,我将调试设置为 JTAG 5 引脚配置,因为我在硬件中使用 JTAG 20。(串行外设-> 系统-> 调试-> Jtag 5 引脚)。程序正在调试没有错误,但串行终端没有输出。串行终端没有给出握手错误。
谁能告诉我这是正确的调试方式(TrueStudion 中的 SWD 和 STM32CubeMx 中的 JTAG),或者我犯了一个错误。
问候,
arm - rockchipRV1107 需要哪种 JTAG/SWD 编程器-调试器?
我正在尝试为微处理器Rockchip RV1107创建一个SWD -debugg-session 。这是ARM Cortex A7。不幸的是,我不知道哪个程序员/调试器能够连接到这个微控制器。程序员/调试器支持 ARM Cortex A7 就足够了,还是我应该更具体地了解 RV1107 mC?每个人都可以给我一些好的程序员/调试器的建议吗?
一些可能有用的程序员/调试器:
- http://www.embedded-projects.net/usbprog5/
- https://de.farnell.com/segger/8-08-93-j-link-edu-mini-classroom-pack/j-link-edu-mini-classroom-pack/dp/3106579
- 非常贵!
这是我为 Rockchip RV1107 找到的数据表 http://rockchip.fr/RV1107%20datasheet%20V1.1.pdf 第 35 页上记录了 SWD 的引脚。
谢谢
microcontroller - SWD频率和MCU频率有什么关系?
我正在尝试使用 SWD(串行线调试)连接到我的电路板,频率 = 4000khz,MCU 的固定频率为 15KHz,但无法连接。
这两个频率之间是否有指定的关系或公式,以使 MCU 频率 15KHz 的最大 SWD 频率?
python - nRF52840 调试 SWD Raspberry Pi 3B+ flash_writing 错误
我在使用 Raspberry PI 3B+ 向 nRF52840 加密狗写入闪存时遇到问题。我尝试更改引导加载程序,当我使用“nrf5 mass_erase”命令清理内存时,覆盆子说没有清除任何内容,因为它没有清除,我想我可以拔掉它。我知道如果你清除闪存,你不应该把它拔出来,但我不知道我做了。
现在,当我将它连接到计算机时,它根本检测不到我。我在 VDD 和 GND 引脚之间有 1.8V,这意味着默认情况下清除内存。由于我用 SB2 切割器切断了设备并连接了 SB1,确保 VDD 和 GND 的外部电压为 3.3V。我尝试上传软件,但出现以下错误。我查看了互联网,问题很相似,但就我而言,我不想提供帮助。
我想做视频中的内容: https ://www.youtube.com/watch?v=R5wub5ywzTU&list=PLKGiH5V9SS1g90s9mHTMPJT1i8N4fXWNT&index=2
打开ocd.cfg