Micro Framework WireProtocol协议介绍

简介: 【叶帆工作室】2009-2-151、简介WireProtocol协议是上位机MFDeploy或VS2008程序在诊断、部署、调试.Net Micro Framework设备及相关应用程序时的通信协议。

【叶帆工作室】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、流程图

 dd

                                

   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相关程序

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

dd

 

 

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

 

 

ddd

 

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

 

ddd

 

dd

5、小结

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

相关文章
|
4天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
294 116
|
19天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
7天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
452 44
Meta SAM3开源:让图像分割,听懂你的话
|
13天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
684 222
|
1天前
|
Windows
dll错误修复 ,可指定下载dll,regsvr32等
dll错误修复 ,可指定下载dll,regsvr32等
133 95
|
11天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1677 158
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
926 61