zoukankan      html  css  js  c++  java
  • Micro Framework WireProtocol协议介绍

    【叶帆工作室】2009-2-15

    1、简介

    WireProtocol协议是上位机MFDeployVS2008程序在诊断、部署、调试.Net Micro Framework设备及相关应用程序时的通信协议。该协议与具体的硬件链路无关,目前支持的物理连接有串口、网口、USB等。

    该协议为点对点协议,协议中没有设备地址的概念,在同一时间同一物理通道仅能调试一台设备。协议格式分两部分,帧头和负荷Payload)(一帧命令可以不包含Payload)。

    了解该协议和获知通信时的数据,可以非常有效的解决上位机和下位机.Net Micro Framework设备通信问题。

    2、通信协议

    2.1 帧格式

    帧头(Header32 byte

    负荷

    签名

    头校验

    负荷校验

    命令

    Seq

    SeqReply

    标志

    负荷大小

    8 byte

    4 byte

    4byte

    4byte

    2byte

    2byte

    4byte

    4byte

    N byte

    MS…V1

    Crc32

    Crc32

    Cmd

    Seq

    reply

    flag

    size

    Payload

    注:负荷大小可以为0

    2.2 通信过程

    总超时时间6秒,如果下位机无数据响应,则1秒钟重试一次,共6次。如果下位机有命令反馈,但是帧数据不是期望数据,则重试1次,共2次。

    2.3 通信命令

    通信命令一共71个,其中1个已经过时、6个已经被注销。这里仅介绍一下和Ping过程相关的几个命令。

    序号

    名称

    说明

    1

    c_Monitor_Ping

    0x00000000

    The payload is empty, this command is used to let the other side know we are here...

    2

    c_Debugging_Execution_Unlock

    0x00020003

    Unlock the low-level command, for mfg. test programs

    3

    c_Debugging_Execution_QueryCLRCapabilities

    0x00020008

    Queries capabilities of the CLR.

    2.3.1Monitor_ Ping

    命令:0x00000000 帧长:32+8 byte Ping指令可以没有Payload数据)

    帧头

    标志

    32 byte

    4 byte

    4 byte

    源(source):

    序号

    名称

    说明

    1

    c_Ping_Source_TinyCLR

    0x00000000

    2

    c_Ping_Source_TinyBooter

    0x00000001

    3

    c_Ping_Source_Host

    0x00000002

    标志(dbg_flags):

    序号

    名称

    说明

    1

    c_Ping_DbgFlag_Stop

    0x00000001

     

     

    2.3.2Debugging_ Execution_Unlock

    命令:0x00020003 帧长:32+256 byte

    帧头

    命令

    哈希值

    32 byte

    128 byte

    128 byte

    命令和哈希值如下:

    private readonly byte[] m_data =

    {

        67, 111, 112, 121, 114, 105, 103, 104, 116, 32, 50, 48, 48, 51, 13, 10,

        77, 105, 99, 114, 111, 115, 111, 102, 116, 32, 67, 111, 114, 112, 13, 10,

        49, 32, 77, 105, 99, 114, 111, 115, 111, 102, 116, 32, 87, 97, 121, 13,

        10, 82, 101, 100, 109, 111, 110, 100, 44, 32, 87, 65, 13, 10, 57, 56,

        48, 53, 50, 45, 54, 51, 57, 57, 13, 10, 85, 46, 83, 46, 65, 46,

        13, 10, 65, 108, 108, 32, 114, 105, 103, 104, 116, 115, 32, 114, 101, 115,

        101, 114, 118, 101, 100, 46, 13, 10, 77, 73, 67, 82, 79, 83, 79, 70,

        84, 32, 67, 79, 78, 70, 73, 68, 69, 78, 84, 73, 65, 76, 13, 10,

        55, 231, 64, 0, 118, 157, 50, 129, 173, 196, 117, 75, 87, 255, 238, 223,

        181, 114, 130, 29, 130, 170, 89, 70, 194, 108, 71, 230, 192, 61, 9, 29,

        216, 23, 196, 204, 21, 89, 242, 196, 143, 255, 49, 65, 179, 224, 237, 213,

        15, 250, 92, 181, 77, 10, 200, 21, 219, 202, 181, 127, 64, 172, 101, 87,

        166, 35, 162, 28, 70, 172, 138, 40, 35, 215, 207, 160, 195, 119, 187, 95,

        239, 213, 127, 201, 46, 15, 60, 225, 19, 252, 227, 17, 211, 80, 209, 52,

        74, 122, 115, 2, 144, 20, 153, 241, 244, 57, 139, 10, 57, 65, 248, 204,

        149, 252, 17, 159, 244, 11, 186, 176, 59, 187, 167, 107, 83, 163, 62, 122

    };

    命令对应的ASCII为:

    Copyright 2003

    Microsoft Corp

    1 Microsoft Way

    Redmond, WA

    98052-6399

    U.S.A.

    All rights reserved.

    MICROSOFT CONFIDENTIAL

    7?@

    2.3.3Debugging_ Execution_QueryCLRCapabilities

    命令:0x00020008帧长:32+n byte

    帧头

    标志(4 byte

    数据

    32 byte

    0x00000001

    capsFlags :4byte

    0x00000002

    Width:4byte

    Height:4byte

    bpp:4byte

    0x00000003

    buildDate:20byte

    compilerVersion:4byte

    0x00000004

    minutesRemaining:4byte

    0x00000005

    MfReleaseInfo:64

    OEM_MODEL_SKU

    OEM_SERIAL_NUMBERS

    0x00000006

    MfReleaseInfo:64

    Version:8

    0x00000007

    MfReleaseInfo:64

    MfReleaseInfo

    MfReleaseInfo

    Version

    保留

    主版本

    次版本

    编译

    修订

    2 byte

    2byte

    2byte

    2byte

    56byte

    OEM_MODEL_SKU

    OEM_MODEL_SKU

    OEM

    Model

    SKU

    1 byte

    1byte

    2 byte

    OEM_SERIAL_NUMBERS

    OEM_SERIAL_NUMBERS

    module_serial_number

    system_serial_number

    32 byte

    16 byte

    标志:

    序号

    名称

    说明

    1

    c_CapabilityFlags

    0x00000001

    标志

    2

    c_CapabilityLCD

    0x00000002

    LCD的参数

    3

    c_CapabilityVersion

    0x00000003

    软件版本

    4

    c_CapabilityEvaluationVersion

    0x00000004

    剩余可运行分钟数

    5

    c_HalSystemInfo

    0x00000005

    硬件系统信息

    6

    c_ClrInfo

    0x00000006

    CLR信息

    7

    c_SolutionReleaseInfo

    0x00000007

    平台发布信息

    c_CapabilityFlags的含义:

    序号

    名称

    说明

    1

    c_CapabilityFlags_FloatingPoint

    0x00000001

    2

    c_CapabilityFlags_SourceLevelDebugging

    0x00000002

    3

    c_CapabilityFlags_AppDomains

    0x00000004

    4

    c_CapabilityFlags_ExceptionFilters

    0x00000008

    5

    c_CapabilityFlags_IncrementalDeployment

    0x00000010

    6

    c_CapabilityFlags_SoftReboot

    0x00000020

    7

    c_CapabilityFlags_Profiling

    0x00000040

    8

    c_CapabilityFlags_Profiling_Allocations

    0x00000080

    9

    c_CapabilityFlags_Profiling_Calls

    0x00000100

    10

    c_CapabilityFlags_EvaluationVersion

    0x00000200

    11

    c_CapabilityFlags_ThreadCreateEx

    0x00000400

     

    3MFDeploy Ping过程分析

    3.1、流程图

                                    

       Ping 命令流程图

    3.2、流程分析

    MFDeploy Ping过程不仅仅包括Ping命令,它完整的流程包含了四个命令过程,下面一一说一下。

    3.2.1、第一个Ping

    上位机发送帧:源=c_Ping_Source_Host0x00000002),标志=0

    下位机返回帧:= c_Ping_Source_TinyCLR0x00000000)或c_Ping_Source_TinyBooter0x00000001),标志= c_ACK | c_NonCritical | c_Reply0x8003);

    3.2.2QueryCLRCapabilities

    该指令共执行7次,分别获取CLR七种特性(标志依次从17),详情请参见【2.3.3】。

    3.2.3Unlock

    上位机发送帧:命令和哈希值请参见2.3.2】;

    下位机返回帧:Payload为空,标志= c_NACK | c_NonCritical | c_Reply

    3.2.4、最后一个Ping

    上位机发送帧:Payload为空

    下位机返回帧:= c_Ping_Source_TinyCLR0x00000000)或c_Ping_Source_TinyBooter0x00000001),标志= c_ACK | c_NonCritical | c_Reply0x8003);

    4、如何获取通信数据

    4.1 采用通用监控工具获取

    不同的物理链路需采用不同的监控工具,其推荐的监控工具如下:

    串口:portmon程序(微软官方提供的工具,可惜目前并不支持vista系统)。

    网口:Wireshark程序

    USBBus Hound程序

    由于这部分内容,非本文重点,所以这里就不展开介绍了,不过以上工具除Wireshark外,在我以前的文章中已经有所提及,感兴趣的朋友可以查阅我以前的相关文章。

    4.2 改造MFDeployVS2008相关程序

    这种办法虽然最有效,但是如果没有相关源码是很难做到的。

    上图是改造前的Porting Kit所带的MFDeploy工具,下图是我改造后的该程序,相关通信操作完毕后,单击“Info”按钮即可显示相关通信数据。

    此外尤为重要的是,单击“Normal”按钮,使其变为“Debug”模式,此时不仅在操作MFDeploy工具时自动弹出监控信息窗口,并且在用VS2008调试.Net Micro Framework程序时也能弹出监控信息窗口。

     

     

     

     

    5、小结

    俗话说麻雀虽小,五脏俱全。很显然.Net Micro Framework就是这样一只麻雀,各种技术虽然简单,但是都有所涉及(ARM开发技术、CLR技术、VS2008开发、调试技术、各种串口、网口、USB通信技术等等),随着研究的深入,越来越被.Net Micro Framework自身魅力所吸引,相信下一个支持实时系统的版本更值得期待。

  • 相关阅读:
    18、监听器/国际化
    17、过滤器
    16、连接池/分页技术
    15、Jdbc的优化(BeanUtils组件)
    14、知识回顾
    13、mysql/触发器
    12、Jsp加强/自定义标签/JavaBean
    11、Jsp加强/EL表达式/jsp标签
    10、会话管理/编程实战分析/Jsp
    9、Http回顾/Servlet
  • 原文地址:https://www.cnblogs.com/yefanqiu/p/1390888.html
Copyright © 2011-2022 走看看