• 正文
  • 相关推荐
申请入驻 产业图谱

王工,我的板子SWD无法连接是怎么回事?

03/03 13:10
3858
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

板子做好了,MCU也焊上了,但是SWD连接不上、无法下载程序,这该怎么办?

这个问题似乎经常遇到,分享一下最近遇到的几起案例。

1)案例1,A工程师做了5块板子,一个都连不上。

在确认连线无问题后,我第一时间想到了供电问题。将之前MCU独立供电改为由Jlink给板子供电后问题就解决了。

连接失败的原因是MCU采用5V供电,而Jlink输出为3.3V,电平不匹配。3.3V无法被5V系统识别为高电平,5V系统识别高电平的最低电压大约为0.7*5V=3.5V,所以改为Jlink给板子供电就正常了。当然板子单独供电MCU 5V也能连接,只需要让Jlink电平也工作在5V就可以。比如用户这个Jlink,拆开后里面有一个跳线帽,默认是在3.3V这一侧,换到5V那一侧短接,就可以变成5V电平了。

2)案例2,B工程师做了5块板子,其中3块板子能正常连接烧录,另外2块板子连接有问题。

5块相同的板子烧录了完全相同的程序,但其中2块存在问题。最初我怀疑是那2块硬件有问题,后确认硬件也是正常的没问题,

后来一个线索提醒了我,就是了解到那2块有问题的板子第一次是可以连接下载的,是下载了一次之后不行的,另外B工程师在程序里修改过选项字节。

关于选项字节的详细说明此处不再赘述。这是一块特殊的Flash存储区域,其修改可通过专用上位机软件或用户代码实现。不管哪种方式,在操作选项字节时,都一定要注意保持电源稳定。因为如果发生电源剧烈波动或者重启,就可能会出现选项字节区域已经被擦除了但是还没有正确写入新值的问题,由于没有被完整写入,在后面选项字节加载前,由于原始值和反码值比对不通过,就可能会被强制修改为其他值,导致RDP等级发生变化,进而出现SWD无法连接的情况。

该工程师在程序初始阶段便操作了选项字节,而烧录时夹具探针与板子的接触可能不稳定,从而导致上述问题。

应对措施是等待电源稳定后再操作选项字节,例如在程序中加入短暂延时,确保上电稳定后再执行选项字节操作。因为他板子上还有一个对外的串口,生产测试时也会通过这个串口来接收数据,或者可以在串口接收到数据后去操作选项字节,因为这时电源是稳定的。总之,避开烧录时因为接触不良导致电源波动的那段时间去操作选项字节就可以了。此外程序里操作选项字节的话,要注意只需要执行一次即可,不要每次复位后都去更改选项字节。

3)案例3,C工程师之前项目连接都没问题,新做了一个项目连接不上了。

这个问题是因为把MCU BOOT引脚拉高导致的,在硬件设计时需注意。

还有其它一些SWD无法连接的情况:

1)MCU进入了低功耗状态。因为进入低功耗后,SWD的时钟停了,所以无法连接。解决这个问题有两个方法:a)调试时,程序里进入低功耗前可以加个几秒的延时,这样下次上电或者复位后,就有足够的时间去连接。 b)调试器的复位引脚和MCU的Reset引脚连接上,通过硬复位在进入低功耗前可以连接下载。

2)SWD被复用为其他功能了。在管脚不够用的时候,SWD接口可能会被用作其他功能,这种情况也是建议程序里加一些延时。

3)除了上述提到的BOOT引脚,有的MCU还有NMI引脚,如果该引脚上电复位时为低电平,那么就会进入到NMI中断里,导致SWD无法正常连接。

4)调试热插拔过程中,把SWD接口干坏了。这种情况建议尽量避免热插拔,可以先连接好线,再上电。此外,尽量避免SWD先上电而MCU后上电的情况。

以上情况如果都不是的话,那么还有一种可能是芯片焊错了,这种情况我也有遇到过。

所以下次如果还遇到MCU SWD无法连接的问题时,可优先排查上述情况。

相关推荐

登录即可解锁
  • 海量技术文章
  • 设计资源下载
  • 产业链客户资源
  • 写文章/发需求
立即登录