问题标签 [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.

0 投票
1 回答
943 浏览

microcontroller - SWD 接口 SAM 设备

我正在尝试为微控制器设计定制板

我正在尝试使用 microchip 的 SAM 系列(SAMD21G18)

他们建议: 在此处输入图像描述

https://www.microchip.com/webdoc/GUID-DDB0017E-84E3-4E77-AAE9-7AC4290E5E8B/index.html?GUID-6A4D7A9A-C350-4FDF-BECA-198D23A19E44

我可以在数据表中看到(PA30 和 PA31)作为(SWCLK 和 SWDIO)

所以我买了 ATMEL-ICE,这些是我知道的连接

  1. VCC -> 目标 VDDIN
  2. 接地 -> 接地
  3. SWDIO -> PA31
  4. SWDCLK -> PA30
  5. nReset -> 目标重置

其他引脚(键)和(SWO)怎么样?


关于接口..这是从连接器顶部开始的吗?所以我应该在 pcb 上放置确切的焊盘或孔?或者这是来自连接器的底部,我必须翻转它们?


另一个问题,如果我打算制作电路板并将装载机闪入其中.. 将其放入电路的最佳方法是什么

我应该将 SWD 接口用作“盲孔”,然后将编程器引脚插入 pcb 吗?

0 投票
2 回答
2386 浏览

stm32 - stm32和外接flash(w25q)连接问题

我想用STM32 micro(stm32F030F4)从外部闪存(Winbond W25Q16BV)读/写。但在“HAL_SPI_Init()”函数上运行进程停止。

我检查了调试过程,发现了 HAL_SPI_STATE_BUSY。但我不知道为什么?

我正在使用 STM32CubeMX 生成主项目和 Keil IDE 来编写和调试。

这是我们的示意图: 在此处输入图像描述

不幸的是,我没有找到一个很好的例子/说明如何使用外部 SPI 库。对此问题的任何帮助都将受到高度赞赏。

0 投票
1 回答
356 浏览

stm32 - STM32 SWD协议-端口号

我开始在我的 STM32 探索板上使用 SWD 功能。我将 openocd 跟踪输出重定向到文本文件(因为我没有为 Linux 找到任何好的 SWD 监视器)。我不知道为什么我只发送一个字符时会得到两个字符。

在我的输出文件中,每个字符前面都有不同的 ASCII 码(大部分是不可打印的)。由于端口,此前面的代码是恒定的。例如:

我在 github 代码中发现使用 [preceded code] >> 3 公式来获取端口号。其作品。

我正在使用这样的 CubeMX 和 HAL 实用程序:

发送“ch”字符。

为什么我需要使用字节操作?这个前面的代码除了端口号还有其他信息吗?我尝试在 diocumentation 中为此提供资金,但每个示例都使用 ST 监视器

我会明白 SWD 中的确切代码是什么?

0 投票
1 回答
234 浏览

arm - 通过 M0+ 上的 SWD 进行芯片擦除

我想通过 SWD 刷新 M0+ 设备。这是由主机处理器而不是程序员实现的。

我已经能够写入并验证到 RAM 但不能写入闪存。

它似乎与 M3/4 内核有点不同,因此它不适用于 M0+。

也许你们中的某个人可以帮助我使用兼容的序列来通过 M0+ 上的 SWD 进行芯片擦除和写入命令?

谢谢丹尼尔

0 投票
1 回答
2661 浏览

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 控制台的最后一部分是

0 投票
2 回答
6021 浏览

embedded - 如何使用 OpenOCD ping 芯片(检测芯片是否连接)

1.问题说明

我正在尝试将 OpenOCD 用于不常见的事情。我不想连接到芯片,而只想检测芯片。
我想到的程序如下所示:

  1. stlink.cfg使用作为-f参数给出的探针配置文件(例如 )启动 OpenOCD 。所以 OpenOCD 知道使用什么探针,但不知道它会找到什么芯片。

  2. OpenOCD 检测到芯片并以某种方式报告(例如,向标准输出写入内容)。如果可能,此操作不应侵入芯片(如重置它)。

  3. 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寄存器而不是 TAP IDCODE)。因此,无论哪种方式,您都可以通过两种协议获得有关芯片的类似信息。[...]
对于所有 Cortex 芯片,您基本上会得到“ARM”而不是芯片的实际制造商(例如“ST”)。虽然 ST(可能还有其他制造商)芯片具有单独的边界扫描 TAP(即仅 JTAG),但它提供了IDCODE可用于芯片识别的实际 ST。

由此,我得出结论:

  1. 第 10.7 节中描述的自动探测仅适用于 JTAG,不适用于 SWD。

  2. 由于 SWD 无法使用 Autoprobing,因此另一种方法是简单地连接到芯片,然后 OpenOCD 会自动打印DPIDR寄存器。该DPIDR寄存器相当于 JTAG TAP 的 SWD IDCODE,可以说是可以在一定程度上识别芯片。但是,如果一个人一开始不知道连接到 PC 的芯片是什么,那么
    如何简单地连接到芯片上呢?如果我没记错的话,OpenOCD 总是需要特定的配置文件,比如stm32f7x.cfg, stm32f4x.cfg, stm32l0.cfg, ... 来连接到芯片。

  3. 显然,JTAGIDCODE和 SWD 等效DPIDR寄存器为芯片设计者提供,对于 ARM-Cortex 芯片来说,它始终是“ARM”。这对于完整的芯片识别是不够的。但是,您说 ARM 芯片具有单独的边界扫描 TAP,提供更多IDCODE寄存器以进行更完整的识别。不幸的是,这些只是 JTAG。这意味着SWD在芯片识别方面处于死胡同?

  4. 使用 JTAG 进行自动探测(因此读取IDCODEreg)可以是完全非侵入式的。因此,可以使系统复位信号不可用:
    reset_config none
    您说读取DPIDR过度 SWD(我认为这是 JTAG 自动探测的 SWD 等效项)也是非侵入性的。我还可以通过使重置信号不可用来强制执行“非侵入性”吗?

 

3. 使用 JTAG-probe(但不是 ST-Link)

JTAG 协议似乎为芯片识别提供了最好的支持(使用 Autoprobing)。我的结论:

  1. 第 10.7 节中描述的自动探测IDCODE将从芯片打印 TAP。对于只打印“ARM”的 ARM 芯片,而不是实际的制造商(如“ST”)和芯片名称(如“STM32F767ZI”)。

  2. 我实际上如何确保该程序还打印这些进一步的信息,尤其是实际的芯片名称?换句话说,我应该在我的openocd.cfg文件(可能还有 openocd 启动命令)中放入什么来实现这一点?

 
非常感谢 :-)

0 投票
1 回答
217 浏览

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),或者我犯了一个错误。

问候,

0 投票
0 回答
314 浏览

arm - rockchipRV1107 需要哪种 JTAG/SWD 编程器-调试器?

我正在尝试为微处理器Rockchip RV1107创建一个SWD -debugg-session 。这是ARM Cortex A7。不幸的是,我不知道哪个程序员/调试器能够连接到这个微控制器。程序员/调试器支持 ARM Cortex A7 就足够了,还是我应该更具体地了解 RV1107 mC?每个人都可以给我一些好的程序员/调试器的建议吗?

一些可能有用的程序员/调试器:

这是我为 Rockchip RV1107 找到的数据表 http://rockchip.fr/RV1107%20datasheet%20V1.1.pdf 第 35 页上记录了 SWD 的引脚。

谢谢

0 投票
1 回答
393 浏览

microcontroller - SWD频率和MCU频率有什么关系?

我正在尝试使用 SWD(串行线调试)连接到我的电路板,频率 = 4000khz,MCU 的固定频率为 15KHz,但无法连接。

这两个频率之间是否有指定的关系或公式,以使 MCU 频率 15KHz 的最大 SWD 频率?

0 投票
1 回答
187 浏览

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

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述 在此处输入图像描述 在此处输入图像描述 在此处输入图像描述