JLink中文网站 > 最新资讯 > Jlink如何设置SWO跟踪的时钟与通道参数 Jlink采集到的SWO日志乱码或丢失如何核查
教程中心分类
Jlink如何设置SWO跟踪的时钟与通道参数 Jlink采集到的SWO日志乱码或丢失如何核查
发布时间:2026/10/31 15:40:58

  程序刚启动时日志正常,切换系统时钟后就变成乱码;少量打印没有问题,打开周期任务日志却开始缺行。这两种现象要分开查。前者需要核对SWO实际时钟,后者还涉及输出量、缓冲和应用发送方式。下面以SEGGER J-Link SWO Viewer为例,说明时钟与ITM通道怎样设置,以及如何判断日志在哪个环节出了问题。

  一、Jlink如何设置SWO跟踪的时钟与通道参数

 

  开始前确认MCU、调试探针和板上接线都支持SWO。能通过SWD下载程序,不代表SWO信号已经接通。

 

  1、选择器件并核对运行时钟

 

  ①启动J-Link SWO Viewer,在【Device】旁点击【Select】,选择实际使用的器件。

 

  ②点击【Measure】测量当前CPU频率,或在CPU时钟输入框中填写应用运行时的频率。

 

  ③核对输入框单位,确认后点击【OK】。

 

  应填写日志输出阶段的时钟,不能直接使用晶振频率。若测量发生在PLL初始化之前,得到的数值也可能不适用于后续运行。多数器件的SWO基准时钟与CPU时钟相同,但存在独立时钟或额外分频的例外,需要查对应器件配置。

 

  2、选择匹配的SWO输出频率

 

  ①重新打开Viewer配置窗口,选择器件或执行【Measure】,使SWO频率下拉列表生成可选值。

 

  ②在下拉框中选择目标与探针均支持的频率,点击【OK】。

 

  SWO输出频率与SWD调试速度是两项参数,修改下载速度不能代替SWO配置。没有明确要求时,可以先使用工具自动计算的频率,再结合接收情况调整。

 

  采用常见异步输出方式时,目标分频设置与接收频率必须匹配,不能在接收端任意输入一个数值,期待目标自动按相同速率发送。

 

  3、选择与固件一致的ITM通道

 

  ①在Viewer主窗口中,勾选ITM端口【0】,暂时取消其他端口。

 

  ②确认固件向端口0写入后,按需再勾选【1】、【2】等端口。

 

  ITM刺激端口是逻辑通道,多个端口共用同一根SWO输出线。程序写入端口2,窗口只监听端口0,就不会显示对应内容。

 

  命令行中,-itmport 2表示监听端口2;-itmmask 0x5表示监听端口0和2。掩码按位选择端口,同时提供两项参数时,itmmask优先。

 

  二、Jlink采集到的SWO日志乱码或丢失如何核查

 

  先让固件低频输出一条固定英文短句,暂时去掉其他打印,用它区分解码问题和输出压力问题。

  1、乱码时检查时钟变化与初始化方式

 

  ①重新启动Viewer,在【Device】中核对器件,点击【Measure】,对照应用完成时钟初始化后的频率。

 

  ②调整SWO频率并点击【OK】,观察固定短句是否恢复正常。

 

  ③调试会话运行期间,通过J-Link托盘图标打开控制面板,进入【SWV】,查看【Status】中的编码与速率信息。

 

  若乱码总在时钟切换后出现,应查CPU或Trace时钟变化后,目标分频与接收参数是否仍然一致。SEGGER当前支持的是SWO的UART编码,目标若采用Manchester编码,也无法正常解码。

 

  还需确认谁负责初始化:普通Viewer模式会执行SWO初始化,GDB Server模式由调试器负责;使用attach模式时,则依赖应用初始化。几套配置相互覆盖,可能出现连接时正常、程序继续运行后失效的情况。

 

  2、缺行时检查发送量和接收缓冲

 

  ①在Viewer中只勾选实际使用的端口,如【0】,排除其他通道内容混入显示。

 

  ②打开控制面板【SWV】,观察【Bytes transferred】,以及【Host buffer】、【Emulator buffer】中的【Used】。

 

  ③降低固件打印频率,再按相同场景采集,对照缺行是否减少。

 

  取消窗口中的端口勾选,不能假定固件已经停止生成该通道数据。减少带宽压力,需要从应用输出和Trace配置入手。

 

  若仅在突发打印时丢失,应检查发送函数遇到ITM未就绪时,是等待还是放弃字符。提高SWO速率可能缓解带宽不足,但频率越高,对接线和信号质量的要求也越高。降低速率后乱码改善,却缺行增加,说明还需同时控制输出量。

 

  三、Jlink日志恢复后怎样验证采集完整性

 

  恢复可读字符后,再用可核对的数据测试,避免把“看起来正常”当成完整采集。

 

  1、用单通道递增序号复测

 

  ①在Viewer中仅保留端口【0】,运行带递增序号的测试输出。

 

  ②打开控制面板【SWV】,查看【Bytes transferred】是否随测试增长。

 

  每行加入序号和换行,检查是否跳号、截断或交错。多任务同时打印时,字符交错也会让日志难以阅读,需要在固件中管理输出访问;它与链路丢字符的处理方式不同。

 

  2、补查复位后的输出

 

  ①保持Viewer的端口【0】选中,执行目标复位,观察启动日志。

 

  ②若启动后时钟配置改变,重新核对器件与频率,再通过【OK】确认采集参数。

 

  Viewer持续运行而目标复位时,不能假定SWO配置仍然保留。希望采集复位后的早期日志,应用需要重新完成必要的SWO初始化,并确保采集端参数适用于该阶段。只重新打开窗口,未必能补到已经错过的启动输出。

 

  3、记录探针和接收参数

 

  ①通过托盘图标打开控制面板,进入【General】,核对【Version】、【J-Link】和【Selected device】。

 

  ②回到【SWV】,记录【Status】显示的速率及本次使用的通道。

 

  需要保存文本时,可使用Viewer的-outputfile参数。命令行频率参数以Hz为单位,例如-cpufreq 96000000表示96MHz,不能直接照抄界面中以kHz显示的数值。文本日志也不能替代原始SWO数据,用于进一步协议分析时应区分两者。

  总结

 

  SWO日志常被用来解释程序为什么出错,但日志本身也需要验证。只看到最后一行便判断程序停在这里,可能忽略了输出尚未送达、通道未监听或复位后未初始化的情况。保留一段带序号的测试结果,以及当时的时钟、探针和固件信息,后续换板或升级软件时就容易复查。希望这些操作能帮到大家,让采集到的日志更便于核对,也减少因乱码和缺行造成的误判。如有相关需求,欢迎交流咨询。

176 5129 0128