查看: 15235|回复: 3

[S32] S32K144通过SWD口的SWO输出调试信息

[复制链接]
  • TA的每日心情
    无聊
    12 小时前
  • 签到天数: 2413 天

    连续签到: 10 天

    [LV.Master]伴坛终老

    56

    主题

    5320

    帖子

    73

    金牌会员

    Rank: 6Rank: 6

    积分
    26022
    最后登录
    2025-9-2
    发表于 2020-12-12 11:25:28 | 显示全部楼层 |阅读模式
    在基于Arm Cortex M内核的MCU系统开发过程中,经常需要把调试信息输出到上位机来进行系统调试。通常的做法是在下位机上通过串口输出信息,串口通过USB转串口连接到上位机,在上位机上开启串口调试助手进行显示信息。这一做法并无不妥,但是在某些情况下还是有弊端的,比如手头没有USB转串口,或者需要在不同处理器之间共享调试代码,这样就很难通过串口输出信息的方式来实现了。
    001-SWD.png
    Arm Cortex M内核的MCU通常都是使用SWD接口连接Jlink(或者DAPlink等)到上位机的,而NXP开发板的SWD接口通常都是2*5Pin 1.27间距的插针,其定义如图所示,除了调试器时钟SWCLK和数据SWDIO外,还有SWO引脚,这一引脚正是我们今天的主角。
    002-ITM.png
    在S32的模块图中我们可以看到,Arm Cortex M4F内核中提供了一个ITM模块的,这个模块是与内核相伴的,与MCU厂家无关,也就是说无论是谁家的MCU,只要使用了Arm Cortex M3以上内核,内核中就提供这个模块,这是一个测量跟踪宏单元,全称 (Instruction Trace Macrocell)。
    003.png
    在S32K144的参考手册中,明确给出了支持SWO接口的型号中包含所有S32K14x的芯片。
    004.png
    在Cortex M4的调试接口拓扑图中,可以看到ITM模块输出信息铜鼓TPIU后有SWO输出。
    005.png
    ITM追踪数据只能通过SWO接口输出。
    006.png
    在确定S32K144支持SWO接口输出后,就是想办法实现该功能了,实现方式在JLink的用户手册中有详细的例程。
    007.png
    008.png
    该例程给定了使用SWO接口输出信息的详细信息。我们只需要把这些代码拷贝到SWO.h中即可。
    009.png
    在S32DS中添加SWO.h到工程中。
    010.png
    在工程中需要输出调试信息的地方,格式化好字符串,使用SWO_PrintString()函数输出字符串即可。
    011.png
    然后需要配置项目调试属性,在Startup页面设置SWO使能,CPU频率设定为项目实际频率,SWO频率设置为6M,Port mask设置为1。
    012.png
    调试工程并运行,就可以在Console窗口输出调试信息了。
    013.png
    在Keil中同样的使用方法,引入SWO.h后再需要输出信息的地方调用SWO_PrintString()即可。
    014.png
    keil中同样需要设置工程调试属性,Trace使能,给定正确的Core频率,ITM端口使能0号即可。
    015.png
    在Keil需要打开Debug(printf) Viewer窗口。运行程序后就会在窗口中输出调试信息了。

    总结:
    使用SWO引脚输出调试信息的方式适合于大部分Arm Cortex M3,M4内核的MCU,不需要单独占用串口引脚资源,适合于Jlink,DAPlink,STlink等多个调试下载器。调试信息可以在大部分的IDE窗口中集成,无需单独在开启其他软件。但是需要注意的是此引脚只能单向发送数据,不能双向通讯。

    附件:
    S32参考手册
    S32K-RM.001.zip (8 MB, 下载次数: 29)
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-11-10 15:33
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    3

    主题

    9

    帖子

    0

    新手上路

    Rank: 1

    积分
    48
    最后登录
    2023-1-12
    发表于 2022-11-10 15:10:55 | 显示全部楼层
    本帖最后由 war360xy 于 2022-11-10 15:56 编辑

    请问有什么注意点吗?
    我按照你说的步骤做了,不过在 SWO 引脚没有产生输出信号,S32DS 的 Console 也没有输出字符串.我调试发现 ITM_STIM_U8 写入内容后不改变,请问跟这个有关吗?
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    9

    帖子

    0

    新手上路

    Rank: 1

    积分
    16
    最后登录
    2022-12-30
    发表于 2022-12-30 17:58:23 | 显示全部楼层
    没有打印
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    12 小时前
  • 签到天数: 2413 天

    连续签到: 10 天

    [LV.Master]伴坛终老

    56

    主题

    5320

    帖子

    73

    金牌会员

    Rank: 6Rank: 6

    积分
    26022
    最后登录
    2025-9-2
     楼主| 发表于 2022-12-30 19:40:40 | 显示全部楼层
    MCU要支持,写入器要支持,连接线要正确。三者缺一不可。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-9-2 22:48 , Processed in 0.087339 second(s), 25 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表