SWD仿真模式概念简述一、SWD和传统的调试方式区别1.SWD模式比JTAG在高速模式下面更加可靠。在大数据量的情况下面JTAG下载程序会失败,但是SWD发生的几率会小很多。基本使用JTAG仿真模式的情况下是可以直接使用SWD模式的,只要你的仿真器支持。所以推荐大家使用这个模式。2.在大家GPIO刚好缺一个的时候,可以使用SWD仿真,这种模式支持更少的引脚。3.在大家板子的体积有限的时候推荐使用SWD模式,它需要的引脚少,当然需要的PCB空间就小啦!比如你可以选择一个很小的2.54间距的5芯端子做仿真接口。二、仿真器对SWD模式支持情况1.市面上的常用仿真器对SWD模式支持情况(1)JLINKV6支持SWD仿真模式,速度较慢。(2)JLINKV7比较好的支持SWD仿真模式,速度有了明显的提高,速度是JLINKV6的6倍。(3)JLINKV8非常好的支持SWD仿真模式,速度可以到10M。(4)ULINK1不支持SWD模式。(5)盗版ULINK2非常好的支持SWD模式,速度可以达到10M。(6)正版ULINK2非常好的支持SWD模式,速度可以达到10M。本开发板使用三线制SWD(GND,SWDIO,SWCLK)。然后在KEILJLINKDEBUG界面里更改接口为SWJLINK的第1脚是电压测量脚,他在下载前会测量目标板上的电压,如果低就不让下载,我们的控制器的SWD编程口不带3.3V脚,所以要直接在JLINK上接3.3V,欺骗一下JLINK如出现下面错误,请将JLINKV7的JTAG1脚的电压检测端与3.3V端子(默认是JTAG的第2脚)用杜邦线短接,山寨的LINK的JTAG插座不一定和标准的一样,所以第2脚不一定有3.3V,最好用万用表量一下JTAG插座上哪个脚是3.3V,一般JLINKPCB上也有3.3V接线柱,也可以用导线将2者相连。使用本店的JLINK(xLinkARM-OBSTM32)可不用进行本设置。如果连接出现电压太低的错误,就是前面说的问题。如果在确认做了上面的操作后还出现其他读写错误或者下载不稳定的话,一般是因为SWD速度比较快,而杜邦线传输性能比较差,最好编一下辫子,类似双绞线的做法。一、JlinkARM-OBSTM32简介JlinkARM-OBSTM32是SEGGER公司为开发板定制的板载Jlink调试方案。除了不能测试目标板电压外,此Jlink与正式版功能几乎一致(速度限制到4MHz)。受Ourdev论坛minux网友一篇文章启发,参考minux网友贡献的资料,笔者制作了此文所提的Jlink简化版,经过将近半年的测试,其不但工作稳定,而且携带方便,故此与大家分享。其特点为:支持IAREWARM和KEILMDK;仅支持SW两线调试;工作稳定,无丢失固件现象;仅U盘大小,携带方便;直接与电脑USB接口连接,无需USB线缆;接口简化,仅用三根线,完成高速调试、下载;仅需要三脚XH2.54连接器,大大节约PCB面积;与JTAG相比,仅需两根线(TMS/TCK),可节约若干条IO口。二、硬件电路及接口传统20脚JTAG底座个头大,占用PCB面积多,连接线复杂。此Jlink经过精简,使用三脚XH2.54连接器,完成SWD接口的物理连接,经过半年多测试,即使连接线达40cm的情况下,此Jlink依然能可靠下载和调试。图一为接口形式对比,图二为接口定义,图三为硬件电路图。图一接口形式与传统JTAG对比图二接口定义图二原理图三、在KeilMDK中使用Jlink本节介绍在KeilMDK4.14中使用Jlink下载、调试流程,目标CPU为STM32F103VC,。首先,我们安装KeilMDK开发环境和Jlink软件。建立工程步骤如下:①打开KEILMDK开发环境,并点击如图:②在硬盘合适的位置,建立一个工程并保存,本文命名为LED,然后跳出CPU选择,我们选择STMicroelectronics公司的STM32F103VC,如图所示:③弹出对话框,加入Startup文件,选择“是(Y)”,如图所示:④把附件内的main.c和stm32f10x_reg.h文件拷贝到工程文件夹内,并把main.c加入到工程中,如图所示:⑤添加完成后,我们可以点击“”来编译整个工程。完成后如图所示:⑥正确无误后,我们来设置工程属性,以便可以通过Jlink下载、调试。首先进入工程属性设置,我们可以通过如图所示方法,进入工程属性页面,也可以通过Project菜单下的OptionsforTarget……菜单进入属性设置。⑦进入属性设置页面后,我们选择DebugTab选项,然后选择UseCortex-M/RJ-LINK/J-Trace,然后点击Settings选项。⑧调试端口我们选择SW模式,复位模式选择Atuodetect模式,如果此时Jlink连接了上电后的CPU,则能在SWDevice栏检测到CPU,如图所示。设置完毕,按OK退出此设置页面。⑨然后进入Utilities页面,并选择Cortex-M/RJ-LINK/J-Trace,然后点击Settings,如图所示:⑩然后勾选上如图设置,并按Add按钮添加变成对象,如图所示:点击Add后,并按OK退出设置菜单,回到工程界面。⑪如果仅仅需要下载程序,则只需要点击按钮,如果需要调试,则可以点击Debug菜单下Start/StopDebugsession来进入、退出Debug模式。如图所示。至此,我们完成了用KeilMDK建立一个新工程,并通过Jlink下载、调试。四、在IAREWARM中使用Jlink本节使用IAREWARM5.41,并配合Jlink完成下载、调试工作,目标CPU为STM32F103VC。在IAREWARM中使用Jlink与KeilMDK中大同小异,具体方法如下。①首先安装IAREWARM5.41开发环境,并安装安装目录下的Jlink驱动包,完成后,打开IAREWARM图标,并建立一个新的工作区,如图所示。②然后点击Project菜单下的CreateNewProject…,我们选择一个空工程(Emptyproject),如图所示,点击OK确认操作,并存盘为led.eww工程。③把附件内的main.c和stm32f10x_reg.h文件拷贝到工程文件夹内,并把main.c加入到工程中,如图所示:④加入后,我们可以通过点击“”来编译工程,成功后,我们来设置工程属性,以便使用Jlink。如图所示:⑤进入后,我们通过GeneralOptions,来选择CPU,如图所示:然后选择Debugger选项,并在Setuptab里选择J-Link/J-Trace,⑥进入Downloadtab,并按下图设置选项。⑦Download设置完成后,我们进入J-link/J-Trace选项,并选择SWD调试接口,如图所示。然后按OK结束设置。此时我们可以通过按钮来下载和调试工程。至此,一个简单的利用Jlink来下载、调试Cortex-m3内核的工程建立完毕。对于全功能JLink,1号针的功能有两个:检测目标板电压;为内部的电平转换芯片提供输出端参考电压。也就是说,如果目标板电压为3.3V,那么这里也必须给1号针提供3.3V电压,才能保证正常输出。由上图可知,20针JTAG的2号针可以提供VCC供电,而当我打开J-LinkCommander输入poweron时,却发现2号针输出的是5V电压,如法通过直接短路1、2号针来解决问题。正当我手足无措的时候,发现JLink的主芯片烧写接口上,有一根线的宽度很可疑左起第一根线的宽度,用作信号线的可能性很小,极有可能是起到供电的作用,于是拿起万用表,果然!于是牺牲掉一根杜邦线,问题解决最终接口连线如图