J-Link连接目标芯片时,J-Link Commander、J-Flash以及集成J-Link DLL的IDE都可以生成连接日志。日志里会记录Device、SWD或JTAG接口、通信速度、目标电压、复位过程以及J-Link DLL执行的访问操作。连接过程中反复出现通信错误时,可以先用J-Link Commander单独连接目标板,再结合日志判断错误发生在J-Link与电脑之间,还是J-Link与目标芯片之间。
一、J-Link怎么查看连接日志
普通连接问题可以先从J-Link Commander获取日志。需要分析IDE中的偶发连接失败时,再开启J-Link DLL日志,能把连接和目标访问过程保存到文件。
1、在J-Link Commander中生成日志
①关闭正在占用J-Link的IDE或J-Flash。
②打开命令行窗口。
③使用带日志参数的方式启动【J-Link Commander】。
④设置【-Log】并指定日志文件保存位置。
⑤也可以进入Commander后执行【Log】命令,例如设置一个【JLinkDebug.log】文件。
⑥选择实际使用的【Device】。
⑦选择【SWD】或【JTAG】。
⑧设置接口通信速度。
⑨执行【connect】建立目标连接。
⑩完成测试后退出Commander,再打开生成的日志文件。
日志开启后,可以把每次连接过程保存下来,方便比较“正常一次”和“失败一次”之间的差别。
2、在J-Flash中开启J-Link日志
①打开【J-Flash】。
②进入【Options】→【Global settings】。
③找到J-Link日志相关设置。
④启用【Enable J-Link logfile】。
⑤设置日志文件保存路径。
⑥返回工程并执行【Connect】。
⑦再执行一次读取、擦除或Program操作。
⑧关闭连接后打开日志文件查看。
J-Flash自身窗口里的操作日志和J-Link logfile并不是同一份内容。前者更偏向J-Flash操作结果,后者记录J-Link DLL调用和目标通信过程。排查底层通信异常时,J-Link日志更有参考价值。
3、需要更详细数据时开启Verbose日志
普通日志只能看到部分通信过程,问题出现频率很低时,可以临时启用详细记录。
①先正常开启J-Link日志文件。
②在支持J-Link Command String的环境中加入【SetLogVerbose=1】。
③重新建立目标连接。
④复现通信异常。
⑤关闭调试会话。
⑥检查日志中的目标读写记录。
⑦分析完成后把【SetLogVerbose】恢复为【0】。
Verbose模式会记录更多目标读写数据,日志文件会明显增大,因此更适合短时间定位故障。
二、J-Link连接日志中反复出现通信错误如何分析
日志里反复出现连接失败时,不要只盯着最后一条Error。更有用的是看错误之前发生了什么,例如VTref异常、SWD初始化失败、Reset之后失去连接,或者某次内存访问开始连续报错。
1、先检查目标电压和接口配置
①打开失败日志的连接开始部分。
②查看目标【Device】是否正确。
③检查接口是【SWD】还是【JTAG】。
④核对设置的【Speed】。
⑤查看【VTref】或Target voltage是否稳定。
⑥目标使用3.3 V时,检查日志中的电压是否接近实际VDD。
⑦如果电压在连接过程中掉到0 V附近,先检查目标板供电。
⑧电压正常后再继续分析接口通信。
目标电压不稳定会直接影响SWD、JTAG逻辑电平,日志中随后出现大量通信失败只是后续表现。
2、通信错误重复出现时降低接口速度
①记录当前【SWD Speed】或【JTAG Speed】。
②先把速度从较高值降到【1000 kHz】左右测试。
③仍然报错时继续降到【400 kHz】或更低。
④重新生成一份日志。
⑤对比两次连接结果。
⑥低速下恢复正常时,检查调试排线长度。
⑦检查SWCLK、TCK、SWDIO等信号质量。
⑧确认调试器和目标板GND连接可靠。
SEGGER也建议在连接异常时调整接口时钟。排线过长、转接板过多或板级信号质量较差时,高速通信更容易出现间歇性错误。
3、检查错误发生在Reset前还是Reset后
①找到日志中的Reset相关记录。
②确认J-Link初次连接CPU是否成功。
③如果连接成功,但Reset后马上通信失败,重点检查目标启动代码。
④检查程序是否很快进入低功耗模式。
⑤确认程序有没有重新配置SWD或JTAG引脚。
⑥检查Watchdog是否在连接阶段连续复位CPU。
⑦必要时改用【connect under reset】方式重新测试。
⑧比较Reset前后的日志差异。
这种情况说明物理连接通常不是完全失效,而是目标程序运行以后改变了调试环境。
三、日志仍无法定位时怎么继续检查
如果日志只显示重复的Communication error、Could not read memory或Failed to connect,可以用J-Link Commander把连接过程进一步简化,排除IDE脚本和Flash操作造成的干扰。
1、只测试J-Link与CPU连接
①关闭IDE和J-Flash。
②单独启动【J-Link Commander】。
③选择完整【Device】型号。
④选择正确接口。
⑤把Speed调低。
⑥执行【connect】。
⑦连接成功后执行一次【halt】。
⑧读取一小段已知有效RAM或Flash地址。
⑨再执行【reset】并重复读取。
如果Commander稳定而IDE反复报错,就要回到IDE检查Reset策略、初始化脚本和J-Link Script File。
2、检查J-Link与电脑本身的连接
①查看日志是否频繁出现J-Link probe断开或USB通信异常。
②更换电脑上的USB接口。
③避免先通过扩展坞或不稳定的USB Hub测试。
④重新连接J-Link。
⑤打开J-Link Commander确认Probe能持续识别。
⑥查看J-Link固件信息。
⑦再连接另一块已知正常的目标板做对照。
如果同一个J-Link连接多个目标板都不稳定,更适合检查USB、调试器本体或连接线,而不是继续修改目标工程。
3、对比正常和异常日志
①保留一份能够正常连接时的日志。
②再保存一份出现通信错误的日志。
③对比两份日志中的【VTref】。
④比较【Device】【Interface】【Speed】。
⑤查看第一次错误出现在哪一步。
⑥如果都在固定内存地址后失败,检查该地址是否真实可访问。
⑦如果错误位置每次都不同,更偏向信号、供电或复位稳定性。
总结
J-Link连接日志适合把连接失败拆成目标电压、接口通信、复位和目标访问几个阶段分析。反复出现通信错误时,可以先用J-Link Commander脱离IDE单独验证,再通过降低接口速度、检查VTref和比较Reset前后状态缩小范围。问题仍不稳定时,再对比正常和异常日志,通常比只看最后一条错误提示更容易定位原因。如需进一步了解J-Link连接日志、SWD/JTAG通信错误与目标连接异常排查方法,欢迎联系咨询。