DAPLINK 之仿真调试器介绍

news2024/12/27 2:50:44

文章目录

    • 前言
    • 1 协议
      • 1.1 JTAG 协议
      • 1.2 SWD 协议
    • 2 调试仿真器
      • 2.1 ST-Link 仿真器
      • 2.2 ULink 仿真器
      • 2.3 J-Link 仿真器
      • 2.4 DAPLINK 仿真器
    • 3 LINKer 搭配 CLion 的使用
      • 3.1 ST-Link + CLion + STM32F103RCT6
      • 3.2 DAPLINK + CLion + STM32F103RCT6
    • 参考

前言

本文算是 DAPLINK 学习的一个引子,主要介绍一下各类调试器及其使用。
接下来我会首先使用合宙 AIR32F103 进行复刻,然后是分析 DAPLINK 源码,最后根据学习情况来自制 DAPLINK。

烧录方式:

  • 1)ISP(In-System Preogramming,在系统编程):通过 MCU 片内 BootROM 完成在板 Flash 烧写操作

    • (1)要求芯片出厂时带有 ISP 固件程序
    • (2)一般通过串行方式烧写,速度较慢,不适合烧写容量大的代码
    • (3)如:LPC1700 系列芯片,通过串口使用上位机软件 FlashMagic 即可烧写
  • 2)IAP(In-Application Programming,在应用编程):支持用户程序运行时烧写 Flash

    • (1)要求部分用户程序已经烧写至 MCU 片内 Flash
  • 3)调试接口(JTAG、SWD 等)烧写:借助仿真器 MCU 的调试接口控制 MCU 完成片内 Flash,甚至外扩的 Flash 烧写

    • (1)适合前期开发调试阶段,量产后一般不同保留这种接口,除非是开发板

1 协议

1.1 JTAG 协议

  • JTAG(Joint Test Action Group,联合测试工作组)是一种国际标准测试协议,主要用于芯片测试。
  • 多数芯片都支持 JTAG 协议,并提供以下引脚来实现:
    • TCK:测试时钟输入
    • TDI:测试数据输入,数据通过 TDI 输入 JTAG 口
    • TDO:测试数据输出,数据通过 TDO 从 JTAG 口输出
    • TMS:测试模式选择,TMS 用来设置 JTAG 口处于某种特定的测试模式
    • TRST:可选引脚,测试复位输入引脚,低电平有效

一个 IEEE 小组专注于硅芯片测试方法。 许多调试和编程工具都使用联合测试
动作组(JTAG)接口端口, 用于与处理器通信。

参见 IEEE Std 1149.1-1990《IEEE 标准测试访问端口和边界扫描体系结构规范》 ,
来自 IEEE 标准协会。—— 出自创芯工坊《用户手册》。

1.2 SWD 协议

  • SWD(Serial Wire Debug,串行调试),也是 ARM 内核调试器的一种通信协议。相比 JTAG 协议,占用更少的端口资源。

  • JTAG 协议与 SWD 协议端口对比:

使用 SOC 和调试器之间的串行连接的调试实现。 这个连接正常需要一个双向数据信号和一个单独的时钟信号, 而不是 JTAG 所需的 4 到 6 个信号连接。—— 出自创芯工坊《用户手册》。

2 调试仿真器

  • 嵌入式开发时,连接电脑与单片机,用于调试、仿真、下载程序的设备。

2.1 ST-Link 仿真器

  • ST(意法半导体)官方发布了 3 种仿真器:ST-LINK、ST-LINK/V2、STLINK-V3SET,用于 STM8 和 STM32 系列芯片仿真。

  • ST-Link 仿真器支持 SWIM / JTAG / SWD 协议下载,其中 SWIM 协议是一种用于 STM8 微控制器的调试编程协议。

ST-LINK/V2 实物及引脚说明:

2.2 ULink 仿真器

  • ULink 是 ARM/Keil 公司的仿真器,因此仅可在 Keil 上使用,支持 JTAG / SWD 下载。

ULink 仿真器实物图:

2.3 J-Link 仿真器

  • J-Link 是德国 SEGGER 公司的仿真器,得到所有主流 IDE 的支持,支持 SWIM / JTAG / SWD 下载下载。

J-Link 仿真器实物图:

2.4 DAPLINK 仿真器

DAPLINK 仿真器是一类基于 ARM 开源的 DAPLINK(https://github.com/ARMmbed/DAPLink.git)实现,并修改优化的仿真器。

  • 如手头的 PWLINK2 是创芯工坊推出的 PowerWriter 系列中的产品,集成了调试器(Debugger)+ 烧录工具(Programmer)

PWLINK 仿真器实物图片:

3 LINKer 搭配 CLion 的使用

以下方式均基于 OpenOCD 实现烧录

3.1 ST-Link + CLion + STM32F103RCT6

  • (1)使用 STM32CubeMX 初始化工程,并编写完成代码

  • (2)创建 ./config/stlink.cfg 文件,并添加:

    # choose st-link/j-link/dap-link etc.
    # adapter driver cmsis-dap
    # transport select swd
    source [find interface/stlink.cfg]
    transport select hla_swd
    source [find target/stm32f1x.cfg]
    # download speed = 10MHz
    adapter speed 10000
    

从上述配置文件中注意到:接口配置文件为 stlink.cfg,目标配置文件为 stm32f1x.cfg,且传输方式选择 hla_swd。

  • (3)选择上面添加的文件(当然最好是选择 OpenOCD 自带的安装目录下的 board/st_nucleo_f103rb.cfg 文件):

3.2 DAPLINK + CLion + STM32F103RCT6

  • (1)使用 STM32CubeMX 初始化工程,并编写完成代码

  • (2)创建 ./config/daplink.cfg 文件,并添加:

    # choose st-link/j-link/dap-link etc.
    adapter driver cmsis-dap
    
    transport select swd
    
    source [find target/stm32f1x.cfg]
    

从上述配置文件中注意到:虽然未使用接口配置文件,但手动设置适配驱动器选择 cmsis-dap,传输方式选择 swd,目标配置文件为 stm32f1x.cfg。
由此可知,interface 文件中一般配置烧录器支持的驱动协议。

  • (3)选择上面添加的文件:

  • (4)PWLINK 与 JTAG 接口接法:

参考

  • 调试/仿真器:https://blog.csdn.net/m0_46511220/article/details/120615692
  • 知乎稚晖君:https://zhuanlan.zhihu.com/p/145801160
  • ARM 代码烧录方案与原理详解:https://blog.csdn.net/m0_37621078/article/details/106798909

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2205702.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PyQt5 的 designer.exe 使用布局详解

文章目录 采用designer.exe原因一、打开 designer.exe二、界面布局介绍1. 菜单栏和工具栏2. 组件面板3. 窗体设计区域4. 属性编辑器5. 信号 / 槽编辑器 三、示例代码及图片展示 采用designer.exe原因 Python使用PyQt5界面开发为啥不使用py文件创建而是采用designer.exe原因&…

通过redis实现高性能计费处理逻辑

计费服务一般都是跟资金相关,所以它在系统中是非常核心的模块,要保证服务的高可用、事务一致性、高性能。服务高可用需要集群部署,要保证事务一致性可以通过数据库来实现,但是只通过数据库却很难实现高性能的系统。 这篇文章通过使…

人工智能——引领未来的科技革命

随着科技的飞速发展,人工智能(AI)已经成为我们生活中不可或缺的一部分。从智能手机的语音助手到自动驾驶汽车,从智能家居到工业自动化,AI的应用正在不断拓展,其影响力也在持续增强。今天,我们将…

图像的两种结构

彩色图像数据 (color_image_data) 彩色图像数据是一个三维数组,其中每个维度分别对应: 高度:图像的行数。宽度:图像的列数。颜色通道:每个像素的颜色信息,通常为RGB三个通道。 例如,一个3x3像…

【进阶】面向对象之权限修饰符代码块

文章目录 权限修饰符权限修饰符的使用规则 代码块分类局部代码块(了解就行)构造代码块(了解就行)静态代码块(重点) 权限修饰符 权限修饰符的使用规则 成员变量私有方法公开 特例: 如果方法中的代码是抽取其他方法中共性代码,这个方法一般也私有. 代码…

智诊小助手TF卡记录文件导出

若想将TF卡中记录的数据文件导出可按以下的流程进行配置: 点击主界面中的导出选项即可进入到下图中TF卡应用界面 点击TF卡应用界面中“查看记录文件”的选项,进入导出文件界面。 …

南科大分享|大数据技术如何赋能大模型训练及开发

嘉宾介绍 张松昕,南方科技大学统计与数据科学系研究学者,UCloud 顾问资深算法专家,曾任粤港澳大湾区数字经济研究院访问学者,主导大模型高效分布式训练框架的开发,设计了 SUS-Chat-34B 的微调流程,登顶 Ope…

什么是iPaaS?iPaaS选型、落地及案例分析

在iPaaS行业摸爬滚打已经8个年头了。从最初的技术支持做起,到现在负责整个集成项目的规划和实施,我见证了iPaaS技术在国内的快速发展。今天,我想和大家深入聊聊iPaaS这个话题,希望能给正在考虑数字化转型的企业一些参考。 什么是…

大模型LoRA微调过程

LoRA (Low-Rank Adaptation of Large Language Models) 是一种用于微调大型预训练模型的方法,尤其适合在计算资源有限的情况下进行微调。通过限制参数更新的范围,并巧妙利用矩阵分解,LoRA 大幅减少了微调过程中的参数量,从而提高了…

探索实缴注册资金的魅力:知识产权实缴的关键所在

在企业的运营和发展中,实缴注册资金具有一系列显著的优势,特别是当知识产权能够资本化时,更是为企业带来了多重机遇和价值。以下将分重点进行解析。 一、实缴注册资金的优势 增强企业信用和信誉 实缴注册资金向外界展示了企业的资金实力和承…

仓库管理是什么?有哪些核心要点?

一个运转良好的仓库就像是一台精密的机器,而仓库管理者就是那个让这台机器高效运作的关键人物。仓库可不只是堆货的地方,它关系着企业的供应链能否顺畅运转,成本能否得到有效控制。一个优秀的仓库管理者,能让仓库井井有条&#xf…

echarts多折线按组分类控制显示隐藏

需求:目前有俩个组数组分别为sss和aaa,sss和aaa有4个属性,分别为温度、湿度、气压和ppm,根据不同的属性每组画出4条折现,结果应该为8条折现,每条折现颜色不一致,名称也不一致,时间也…

Overfrp内网穿透用例:使用域名部署穿透服务器以访问内网http/https服务

项目地址:https://github.com/sometiny/overfrp 使用overfrp部署穿透服务器,绑定域名后,可使用域名访问内网的http/https服务。 用例中穿透服务器和内网机器之间的访问全链路加密,具有ssh2相当的安全级别。!&#xf…

软件测试的常用的面试题【带答案】

1. 请自我介绍一下(需简单清楚的表述自已的基本情况,在这过程中要展现出自信,对工作有激情,上进,好学) 面试官您好,我叫XXX,今年24岁,来自XX,就读专业是电子商务,毕业后就…

Spring18——Spring事务角色(事务管理员、事务协调员)

39-Spring事务角色 这部分我们重点要理解两个概念,分别是事务管理员和事务协调员。 当未开启Spring事务时 AccountDao的outMoney因为是修改操作,会开启一个事务T1 AccountDao的inMoney因为是修改操作,会开启一个事务T2AccountService的tr…

爬虫(反调试)

其实就是一种给页面反爬机制,一般页面用不到。 万能解决反调试方法:

康师傅涨价背后:是自救还是失策?

涨价策略虽缓解成本压力,却可能导致消费者忠诚度下降,促使消费者转向竞品,加剧康师傅市场份额的流失。 转载:原创新熵 作者丨璐萱 编辑丨蕨影 康师傅方便面又双叒叕涨价了! 今年5月份以来,在人们感叹买不…

C++与Rust那些事之跳过析构函数

C与Rust那些事之跳过析构函数 在Rust中mem::forget用于防止对象的析构,跳过清理工作,从而让资源的释放交给其他机制管理。 例如: let file File::open("foo.txt").unwrap(); mem::forget(file); 那么在C中如何防止析构&#xff1f…

滚柱导轨适配技巧与注意事项!

滚柱导轨是一种重要的传动元件,它由滚柱作为滚动体。用于连接机床的运动部件和床身基座,其设计旨在提供高承载能力和高刚度,适用于重型机床和精密仪器,而滚柱导轨的适配方法对于确保机械设备的高精度运行至关重要。 滚柱导轨的适配…

conda 创建虚拟环境 Anconda虚拟环境

1、创建虚拟python环境: 通过构建虚拟环境,可避免与其他人的软件版本冲突。 conda create -n name python2.x 例如创建名字为xgli的虚拟环境,python的版本为2.7.3,则命令为: conda create -n ia2024 python2.7&…