查看: 18344|回复: 12

[原创] 嵌入式系统数据可视化工具Freemaster入门

[复制链接]
  • TA的每日心情
    奋斗
    2017-1-17 10:45
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    38

    主题

    395

    帖子

    3

    高级会员

    Rank: 4

    积分
    780
    最后登录
    2023-11-17
    发表于 2018-4-6 15:50:07 | 显示全部楼层 |阅读模式
    直接贴原文的md源码并部分插图如下,文后附件中见图文并茂版文档及样例工程,请下载后阅读。


    Figure_Suda_JlinkOB.jpg
    Figure_BoardsAllInOne.jpg
    Figure_FreemasterNewScope.PNG
    Figure_FreemasterStartProjectBasic.png



    # 嵌入式系统数据可视化工具Freemaster入门

    苏勇 suyong_yq@126.com
    2018年4月

    [TOC]

    ## 概述

    Freemaster是NXP免费为用户提供的一种在PC电脑上对MCU程序中数据可视化的工具。

    使用Freemaster工具不需要在目标工程中引用同Freemaster相关的源代码,只需要将需要实时显示的变量创建为全局变量即可,即在MCU的内存中分配一个固定的地址。之后,Freemaster将通过SWD通信接口读内存中的值并实时显示到PC机的界面上。通过SWD接口访问内存是ARM调试的基本方式,同常用的支持在线调试的调试器工作方式相同。

    ## 硬件平台

    本例使用苏州大学的SD-FSL-KL25-EVB开发板作为目标设备,下文简称SD-KL25开发板。

    Freemaster支持多种连接MCU的通信协议,如图x所示,包括常用的JLink。

    ![图x Freemaster支持多种同MCU的通信协议](.\image\Figure_FreemasterCom.png)
    图x Freemaster支持多种同MCU的通信协议

    但是,SD-KL25板载的USBDM调试组件不在Freemaster默认支持的清单中。当然,Freemaster本身有非常好的扩展性,可以通过定制支持新的通信协议,读者可以阅读软件手册并自行尝试,在本例中不深入讨论。

    在本例中,使用苏州大学教学用的JLink-OB调试器作为调试工具。JLink-OB是Segger公司提供的一种轻量级的、被设计用于开发板上的低成本调试解决方案,也是通过JLink通信协议连接目标设备。在一般情况下,使用方式同常规的JLink调试器完全一致。

    无论是调试器还是开发板,都需要经过一些改装才能用于本例的演示。

    ### 改装JLink-OB调试器

    苏州大学教学用的JLink-OB调试器外壳上印着“SWD-Programmer”的字样,但实际是基于STM32F103CBT6的JLink-OB调试器方案。原装调试器上的SWD接插件用的USB的母口,可能同开发板之间可能是通过USB连接线连的。拆开调试器外壳,幸好板子还是留了2.54mm间距的焊盘,并且标注了5V(经万用表测试确实是5V而不是之前猜测的3.3V)、GND、SWDIO、SWCLK四根信号线。焊上插针后,就可以用杜邦线把信号接出来了。 JLink-OB调试器及其改装接线如图X所示。

    ![图x JLink-OB调试器改装](.\image\Figure_Suda_JlinkOB.jpg)
    图x JLink-OB调试器改装

    引出的信号中暂缺Reset信号线,这在有些调试环境中当需要硬件复位电路的时候就无能为力的,必要的时候只能手动按复位。注意,虽然通过SWD通信可以实现软件复位MCU,但在调试器上有一些软件复位的实现只是将运行指针指向复位向量入口,并不能真正复位硬件模块,上个生命周期中对功能模块的配置仍保留,而硬件复位上电后,会通过硬件机制将芯片上的所有寄存器初始化到默认状态。

    ### 改装SD-KL25开发板

    SD-KL25开发板上自带一个USBDM调试组件,同时提供连接外部调试器的接口。但是:
    - 当使用外部调试器接入时,USBDM同KL25同时供电,USBDM会在SWD总线串扰外部调试器的信号。在之前的测试中发现,直接连接外部的JLink-OB时,PC机上的JLink驱动程序无法识别KL25内核,不能进一步实现调试。
    - SD-KL25开发板上的外扩调试接口是通过2mm间距的接口引出,而不是常规的2.54mm间距接口。SWD的信号线也没有引到同扩展板连接的接口上,最后一点希望也没有了。笔者手头上没找到2.00间距的杜邦线,所以不得以只能直接把连接线焊到接口上。

    最终的改装操作是:割线和焊线,如图x所示。

    ![图x 改装的SD-KL25开发板正面](.\image\Figure_SD-KL25-A.jpg)
    图x 改装的SD-KL25开发板正面

    ![图x 改装的SD-KL25开发板背面](.\image\Figure_SD-KL25-B.jpg)
    图x 改装的SD-KL25开发板背面

    后来找到原理的时候才发现,可以通过把R7和R8、R12和R13取下来,断开USBDM同KL25Z的连接,从而避免割线损伤电路板。

    ![图x 通过取下电阻断开USBDM的SWD信号线](.\image\Figure_SD-KL25-C.jpg)
    图x 通过取下电阻断开USBDM的SWD信号线

    如果有读者希望重现本例,可取下这些电阻,并自备2.00mm间距杜邦线及插针。

    另外,为了便于实验,笔者还把调试器的5V直接提供给了SD-KL25开发板,这样就省下了一根开发板同电脑的USB连接线。笔者在SD-KL25开发板上加装了尼龙固定柱,避免插针在桌面上碰到导电物体造成短路。

    最终的接线图如图x所示。

    ![图x 苏大JLink-OB调试器同SD-KL25开发板连线实物图](.\image\Figure_BoardsAllInOne.jpg)
    图x 苏大JLink-OB调试器同SD-KL25开发板连线实物图

    ## 在Keil中编写KL25Z工程

    使用Freemaster不需要在目标工程中插入任何代码,仅仅需要把需要实时显示的变量创建为全局变量。

    样例工程基于Keil集成开发环境,使用Keil对KL25Z4芯片支持包中的启动源码文件,配合必要的头文件,创建了一个最简单的工程:KL25初始化配置好时钟之后进入main函数,main函数的主循环以一定的延时对全局变量gAppCounter循环递增。main函数代码清单如下:

        /* main.c*/
        #include <stdint.h>
        #include <stdbool.h>
        #include "MKL25Z4.h"

        volatile uint32_t gAppCounter;

        int main(void)
        {
            uint32_t i;

            gAppCounter = 0U;

            while (1)
            {
                for (i = 0U; i <10000U; i++)
                {
                    ;
                }
                gAppCounter++;
                if (gAppCounter >= 1000)
                {
                    gAppCounter = 0U;
                }
            }
        }

    编译生成MyProject.afx(默认)文件,下载并运行。

    注意,如果是以调试方式下载程序,切记要确保下载后再退出调试模式,然后通过SD-KL25开发板上的复位按键硬件复位。此时Keil要让出对调试器的占用,在接下来的操作中要把调试通信总线交给Freemaster。

    ## 创建并配置Freemaster工程

    Freemaster软件在NXP官网的产品主页是:http://www.nxp.com/support/devel ... ing-tool:FREEMASTER

    Tip:本例创建了一个“KL25_FreemasterExample_Basic”的项目文件夹,包含了本例中用于演示的源代码、Keil工程及Freemaster工程。

    ### 创建新工程

    下载、安装软件后启动Freemaster软件,默认创建了一个新工程。
    右键选中左侧树形目录中的工程名,选中“属性”,在弹出对话框中编辑工程名,本例中改为“MyProject”,如图x所示。

    ![图x 打开Freemaster软件并修改新工程名](./image/Figure_FreemasterNewProject.png)
    图x 打开Freemaster软件并修改新工程名

    此时一定要先保存工程,让工程文件有个确定的文件地址,以便于后续关联其它文件时可以使用相对路径。

    ### 配置使用JLink通信协议并导入调试程序文件

    配置新的Freemaster工程:
    - 使用JLink通信协议,通过JLink调试器同目标芯片通信。
    - 导入将要调试的程序映像文件,Freemaster会分析出变量名及对应的地址。

    操作见图x。

    ![图x 配置使用JLink通信协议并导入调试程序文件](./image/Figure_FreemasterSetup.png)
    图x 配置使用JLink通信协议并导入调试程序文件

    这里面有两个要点:
    - 一是指定调试程序的映像文件时最好用相对路径,否则整个文件夹被复制到别的电脑上后会识别不出来原有电脑的路径。
    - 为了确保变量的地址映射被成功识别出来,可以单击“View”查看解析出来的符号表,如图x所示。

    ![图x Freemaster解析出的符号表](./image/Figure_FreemasterSymbolTable.png)
    图x Freemaster解析出的符号表

    ### 创建Freemaster变量表

    Freemaster工程需要在内部保存一个Freemaster变量的清单,为后续步骤提供操作对象。Freemaster变量是对目标芯片上地址的封装,同时在Freemaster内部在电脑的内存中建立了一个定期刷新的数据缓存,并自动更新缓存中变量的值。后续示波器显示的变量,是直接从这个缓存中读取的。

    ![图x 创建Freemaster变量表](./image/Figure_FreemasterVariables.png)
    图x 创建Freemaster变量表

    注意,只有在变量表中创建的变量才能被后续创建的示波器识别出来。

    ### 创建新的示波器页面并设定显示通道

    右键选中工程名,在弹出菜单中选中“New Scope...”,创建新的示波器页面。
    在配置新示波器页面中,为新示波器页面命名并指定该示波器页面的刷新周期,在“Setup”标签页中指定显示通道,为指定通道选择变量,并可为指定通道命名。此处在一个示波器页面中支持最多8个通道,并可分组显示。

    操作界面如图x所示。

    ![图x 创建新的示波器页面并设定显示通道](./image/Figure_FreemasterNewScope.png)
    图x 创建新的示波器页面并设定显示通道

    用户可以在一个Freemaster工程下面创建多个示波器页面。另外Freemaster还允许创建其它可视化数据的子模块,用户可以通过JavaScript和Html语言编写网页添加到其中。

    ### 启动Freemaster工程

    此时全部配置工作就已经做好了,确保MCU端程序正在运行,并且电脑上没有其它程序占用同MCU连接的调试总线,就可以启动Freemaster开始采集和显示数据了。

    点击Freemaster工程窗口工具栏中的“Start/Stop Communication(Ctrl+K)”图标,之后就能看到示波器页面上有曲线出来了。

    ![图x 启动Freemaster工程](./image/Figure_FreemasterStartProjectBasic.png)
    图x 启动Freemaster工程

    在本例中,是让gAppCounter周期循环递增,因此在图x中能看到锯齿状的波形。

    ### 另一个使用ADC采集温度传感器的样例工程

    笔者写到这里即兴创作了另一个使用ADC采集芯片内部温度传感器的演示项目“KL25_FreemasterExample_ADCTempSensor”。在这个ADC的样例程序中,使用ADC转换完成中断,在每次ADC转换完成时读取转换数据到MCU的缓存变量gAppAdcTemperatureValue中,不断刷新。Freemaster工程创建了一个示波器页面实时显示ADC的采样值:当用手摸住开发板上的KL25Z芯片时,芯片温度升高,采样值的曲线下降;然后手指离开芯片,芯片温度降低,采样值曲线回升,如图x所示

    ![图x 启动Freemaster工程ADC温度采样值](./image/Figure_FreemasterStartProjectADC.png)
    图x 启动Freemaster工程ADC温度采样值

    ## 总结

    本文基于苏州大学教学使用的JLink-OB调试器和SD-KL25开发板,简单介绍了数据可视化工具Freemaster软件的用法。Freemaster可以使用常用的JLink调试器作为通信媒介,使用通用的SWD接口通信,无需专门的通信协议移植工作Freemaster软件不需要“侵入”目标程序,只要将待检测变量创建为全局变量即可。使用Freemaster可以快速实现对MCU的数据可视化,方便调试。

    另外,Freemaster具有非常丰富的功能和强大的可扩展性,例如,可以自动记录数据并导出到多种常用的数据文件格式,可以支持JavaScript和Html语言编程的网页,定制显示页面。这些功能读者在基于本文入门Freemaster软件后继续发掘。

    - End


    图文并茂版: 嵌入式系统数据可视化工具Freemaster入门.zip (4.15 MB, 下载次数: 721)

    评分

    参与人数 1 +3 收起 理由
    doatello + 3 很给力!

    查看全部评分

    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    1

    帖子

    0

    新手上路

    Rank: 1

    积分
    9
    最后登录
    2022-5-19
    发表于 2018-4-7 12:30:39 | 显示全部楼层
    非常好,谢谢!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    10 小时前
  • 签到天数: 819 天

    [LV.10]以坛为家III

    71

    主题

    2445

    帖子

    24

    金牌会员

    Rank: 6Rank: 6

    积分
    5516
    最后登录
    2024-4-25
    发表于 2018-4-7 16:08:21 | 显示全部楼层
    感谢分享
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2019-4-28 22:47
  • 签到天数: 233 天

    [LV.7]常住居民III

    0

    主题

    623

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1431
    最后登录
    2022-10-20
    发表于 2018-4-7 21:33:38 | 显示全部楼层
    花了不少心思。
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2018-7-31 08:40
  • 签到天数: 43 天

    [LV.5]常住居民I

    299

    主题

    876

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    14696
    最后登录
    2020-3-1
    发表于 2018-4-9 14:08:12 | 显示全部楼层
    感谢分享!
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    1

    帖子

    0

    新手上路

    Rank: 1

    积分
    10
    最后登录
    2019-6-5
    发表于 2018-4-17 13:52:28 | 显示全部楼层
    感谢分享!
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2018-10-26 08:41
  • 签到天数: 49 天

    [LV.5]常住居民I

    16

    主题

    149

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    385
    最后登录
    2019-3-13
    发表于 2018-4-20 09:10:26 | 显示全部楼层
    楼主有研究过使用master对S12的MCU进行bootloader吗?自己找了很多手册,也没有找到相关的详细描述,楼主如果有这方面经验的话,希望共享一下,谢谢!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    1

    帖子

    0

    新手上路

    Rank: 1

    积分
    14
    最后登录
    2019-2-12
    发表于 2018-11-26 20:37:08 | 显示全部楼层
    感谢分享
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2020-12-31 08:09
  • 签到天数: 438 天

    [LV.9]以坛为家II

    9

    主题

    510

    帖子

    1

    金牌会员

    Rank: 6Rank: 6

    积分
    1673
    最后登录
    2020-12-31
    发表于 2019-1-4 14:13:53 | 显示全部楼层
    请问MPC5634M的开发板怎么使用FreeMaster呢?需要什么硬件调试器?谢谢!
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2019-3-30 09:09
  • 签到天数: 1 天

    [LV.1]初来乍到

    1

    主题

    6

    帖子

    0

    新手上路

    Rank: 1

    积分
    29
    最后登录
    2019-9-3
    发表于 2019-9-3 09:26:44 | 显示全部楼层
    freemaster  怎么把输出导出xls用过没
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2024-4-25 22:32 , Processed in 0.146851 second(s), 29 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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