打印
[开发工具]

另类程序调试方法-MCU串行数据到编程器中转到PC机串口

[复制链接]
1372|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jianzhengg|  楼主 | 2016-6-28 17:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 jianzhengg 于 2016-6-28 17:51 编辑

ChipON系列MCU串行数据到PC实现介绍
        在产品开发过程中,当存在代码期望与实际不符时我们往往借助于在线调试,但该手段存在2点不足:1)需要单步运行或运行到断点,然后使用监控窗口查看变量的结果。这样的结果往往不够直观,当存在多个验证代码正确性的点时,对应的调试工作也较为复杂。2)编译器调试模式和正常模式的编译代码存在差异较大,差异不仅在于使用了监控代码,往往优化策略上也有不同。调试模式的代码结果空间往往较正常模式大,有时不能复现正常模式中出现的问题。
        ChipON在开发触摸在线调试工具时编程器开发了数据接收与上传功能,在该基础上我们将芯片代码进行从而实现数据从MCU到编程器(非串口),编程器将接收到的数据发送到PC端口上。因此不需要额外的硬件就可实现代码运行结果的监控,详细信息见pdf附件。
实现介绍1  MCU代码功能添加
     (a)确定芯片存在2个空闲的双向IO口,或不影响状态的暂不使用功能引脚。添加代码文件debug_test_out.h和debug_test_out.c添加到项目源码中。
     (b) 在debug_test_out.h中声明调试使用的IO口,默认使用芯片自己的编程时钟和数据脚。声明采用宏定义方式实现,如#define CLK_SET_IN    TR00=1”, #define DAT_SET_LOW   P0LR0=0”。根据不同型号修改对应的编程脚对应关系或其他双向IO口接口。其中带CLK的引脚是连接到编程器CLK引脚上。带DAT引脚连接到编程器的DAT引脚。另外一点”XXX_SET_HIGH/LOW”宏声明引脚端口输出电平,根据MCU型号不同存在带输出锁存和不带2中,如针对P01口下不带输出锁存的输出高电平表达为 P01=1,带输出锁存的输出高电平表达式为P0LR1=1。
     (c)时间间隔设定。编程器负责接收芯片的数据,当接收一个完整的数据后将数值串口发送到PC机。因此在编程器向PC发送数据阶段,对应的芯片部分工作应该是等待。数据上传的也基于时钟。因此存在2中等待概念,即时钟快慢以及单数据传输完毕的等待编程器就位。建议时钟间隔时间5us,即”#define Touch_Delay1   Delay_us_Set_1(5)”,建议的数据间隔时间110us,即”#define Touch_Delay1   Delay_us_Set_1(110)”。其中Delay_us_Set_1为在debug_test_out.c中建立的函数。根据系统时钟选择的最小参数1时当选择16M工作时C语言延时约2us。当采样嵌汇编实现下延时约0.75us。
     (d)变量结果监控。将待监控的结果赋值到监控变量中,调用输出函数将监控变量串口形式显示在PC机串口中。如      sendbuf1=(unsigned char)(Motor_PwmCycleShadow>>8);
            sendbuf2=(unsigned char)Motor_PwmCycleShadow;
            sendbuf3=(unsigned char)(Motor_PwmDutyShadow>>8);
            sendbuf4=(unsigned char)Motor_PwmDutyShadow;
            Debug_Soft_Uart_Out();
            delay_ms(1);      
其中最后一句延时主要防止连续调用函数Debug_Soft_Uart_Out时编程器未返回到监控起始状态。也可以采用“Delay_us_Set_1(255)”代替。如果调用函数的间隔自身时间差满足一定的时间,可以不做延时函数的调用。该函数单次输出有效信息4个字节,因此如果仅需要监控一个变量不需要其他字节进行赋值操作。也可以使用至少2个字节实现类型的区分。比如sendbuf1表明当前监控代码所在位置,其他字节为有效数值。

实现介绍2  串口功能配置
     A)选择带有DTR选项的串口工具,串口选择到编程器设备(可以通过插拨确认使用端口号),波特率选择115200,停止位1,数据位8,无奇偶校验。
     B)勾选DTR选项,打开串口,在1s内发送命令使编程器进入触摸调试模式,超时输入的话编程器将进入其他模式,从而该功能启动失败。编程器默认联机PC为复位待机模式,DTR的选择可以在打开串口时使芯片从首地址开始执行。
      推荐串口工具 XCOM,该工具支持多条预定义发送内容,可以关联数字键盘,方便打开串口的时间快速将命令数据下发,从而编程器进入都对应的调试模式。该工具为免安装绿色运行,能够自动识别PC机上串口设备。但需要.net framework4.0的支持。
        XCOM V 2.0下载地址:       http://pan.baidu.com/s/1hrKksV6
       .net 4.0下载地址:       http://pan.baidu.com/s/1mibDimk
       编程器驱动软件:         http://pan.baidu.com/s/1mhQhMhM
    使用介绍:
   1、当PC机未连接串口设备时,正常启动画面提示异常,点确定进入主界面即可。
   2、模式存在串口设备,且资源未被其他程序占用时,程序自动打开串口,这里要点击关闭。将软件进入参数设定。
   3、确定MCU程序准备就绪,连接好MCU和编程器。点击打开串口,同时快速先后顺序按下数字3和数字2。任何一次均接收到“68 55 00 00 BD42 16”3对应C4,2对应A5 A5。
   4、因该操作占用约1秒的时间,如果需要接收MCU的所有数据,MCU的程序要延后执行,即初始化端口后加如2秒-5秒的等待。
   5、发送关联命令3和2后的影响数据为不关心数据,如果MCU延迟时间允许,可以点击清除接收。清除之前可以选择关闭串口,使用已收到数据调整窗口的宽度使每行显示8个字节(后续数据包长度),然后重新执行过程到这里。
   6、接收MCU的上传数据,接收一定数据后可以点击关闭串口,然后进行数据分析。
实现介绍3  数据分析
    更多协议可以查看debug_test_out.h文件的注释部分,实现部分在debug_test_out.c中的Debug_Soft_Uart_Out函数中。数据包中含有5个字节信息,分别为特征码、sendbuf1、sendbuf2、sendbuf3、sendbuf4。编程器采用监控脉冲下数据,每8次为一个字节并将字节信息上传,因此特征码作为数据包传输正确的条件存在,这里默认传输0x05(5bit长度)。
   示例数据包:“AA 05 01 02 03 04 B9 BB”这里AA为起始头,BB为结束尾,05为特征码,1,2,3,4为对应的监控数据这里的显示均为16进制样式。根据代码的监控点或数据结果分析程序是否允许正确。比如AD的单次采样结果,AD的多次采样和运算结果,以及温度AD的查表结果。
    当数据信息量较多时可以选择保持窗口将数据存在在txt的文件中,随后可以借助如UltraEdit-32和excel软件进行结果处理。其中UltraEdit-32将BB AA替换为 BB ^P(回车换行) AA 实现每个数据包为一行,使用excel将结果进行分列,并完成16进制到10进制的转换,包括字节组合的字结果。为此你可能用到公式比如 “=HEX2DEC(C2)”和“ =HEX2DEC(D2)*256+HEX2DEC(E2)”。
其他说明   样例代码和结果示意图
     样例下载地址:ChipON_MCU_Serial_Debug_Out_DEMO.rar
                              http://pan.baidu.com/s/1ckKUQU
    数据输出应注意特征码是否正确,否则为不正常结果输出。同时该方法涉及到编程器和MCU直接的工作握手与同步,因此不能应用在条件恶劣的情况下。目的在于做调试功能扩展使用直接的工作握手与同步,因此不能应用在条件恶劣的情况下。目的在于做调试功能扩展使用。

ChipON系列MCU串行数据到PC串口实现介绍.pdf

705.94 KB

串行数据

沙发
yanyanyan168| | 2016-7-1 09:36 | 只看该作者
关注·······

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

13

帖子

1

粉丝