Micro Framework WireProtocol协议介绍

简介:

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

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

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

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

2、通信协议
2.1 帧格式
帧头(Header)32 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.1、Monitor_ 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.2、Debugging_ 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.3、Debugging_ 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
 


 

3、MFDeploy Ping过程分析
3.1、流程图
 

                               

   Ping 命令流程图

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

3.2.1、第一个Ping
上位机发送帧:源=c_Ping_Source_Host(0x00000002),标志=0;

下位机返回帧:源= c_Ping_Source_TinyCLR(0x00000000)或c_Ping_Source_TinyBooter(0x00000001),标志= c_ACK | c_NonCritical | c_Reply(0x8003);

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

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

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

3.2.4、最后一个Ping
上位机发送帧:Payload为空

下位机返回帧:源= c_Ping_Source_TinyCLR(0x00000000)或c_Ping_Source_TinyBooter(0x00000001),标志= c_ACK | c_NonCritical | c_Reply(0x8003);

4、如何获取通信数据
4.1 采用通用监控工具获取
不同的物理链路需采用不同的监控工具,其推荐的监控工具如下:

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

网口:Wireshark程序

USB:Bus Hound程序

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

4.2 改造MFDeploy和VS2008相关程序
这种办法虽然最有效,但是如果没有相关源码是很难做到的。

 

 

 

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

 

 

 

 

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

 

 

 

 

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

 






本文转自yefanqiu51CTO博客,原文链接:http://blog.51cto.com/yfsoft/321259,如需转载请自行联系原作者

相关文章
|
物联网 芯片
Zigbee在.Net Micro Framework系统中的应用
Zigbee是IEEE 802.15.4协议的代名词。根据这个协议规定的技术是一种短距离、低功耗的无线通信技术。这一名称来源于蜜蜂的八字舞,由于蜜蜂(bee)是靠飞翔和“嗡嗡”(zig)地抖动翅膀的“舞蹈”来与同伴传递花粉所在方位信息,也就是说蜜蜂依靠这样的方式构成了群体中的通信网络。
796 0
|
内存技术 移动开发
【.Net Micro Framework PortingKit–11】NandFlash驱动开发
对.Net Micro Framework系统来说,正常情况下Flash(包括NandFlash和NORFlash)分为六个区
602 0
.Net Micro Framework研究—带I2C总线的模拟器
I2C以前没有怎么接触过,所以做它的模拟功能,只能靠着感觉走,有不妥之处,还望方家指正。做出了spi相关的模拟功能,做I2C相对也就不难了,只不过用户操作I2C总线读写数据的时候要稍微麻烦一点。
622 0
|
存储 内存技术
.Net Micro Framework - USB Mass Storage功能实现
由于.Net Micro Framework的USB驱动架构中,没有为Mass Storage功能提供原生支持,所以除了要编写Mass Storage主体代码外,还需要在原有的USB驱动中添加部分枚举代码
861 0
Micro Framework Interop功能实现
目前.Net Micro Framework仅支持C#语言开发应用程序,由于是托管代码,垃圾回收随时都可能发生,其实时性很难得到保证,所以有windows开发经验的用户就会有这种想法:.Net Micro Framework能否支持非托管代码,也就是所谓的P/Invoke平台调用功能
855 0
【.Net Micro Framework PortingKit(补) – 1】USB驱动开发
USB接口支持8个端点,数据传输支持三种模式:DMA、双缓冲、单缓冲,简单期间,我仅实现了单缓冲模式。首先,我们需要声明USB寄存器相对应的结构体,以期方便操作相关的寄存器。
612 0
【.Net Micro Framework PortingKit – 12】SysTick驱动开发
SysTick驱动有三个功用,一是我们上面所说的多任务和多线程支持;二是获得系统当前Tick,以此实现延时等待
620 0
|
Windows
在Corex-M3开发板上移植.Net Micro Framework系列文章
.NET Micro Framework 将 .NET 的可靠性和效率与 Visual Studio® 的高生产率结合起来,以针对价格较低、资源受限的小型设备开发应用程序,可帮助人们使用熟悉的 Visual Studio 工具来构建托管的嵌入式应用程序。
620 0
|
芯片
再谈.NET Micro Framework移植
从代码角度来说,不仅STM32F103的移植代码在不断完善,并且也已经移植和优化了基于STM32F207和STM32F407的相关代码。从硬件角度来说,也由最初完全借助第三方的硬件作为.NET Micro Framework开发板,演变为今天推出自行设计的开发板和物联网产品。
621 0
【.Net Micro Framework PortingKit – 13】LCD驱动开发
LCD的驱动开发还是比较繁琐一些的,因为LCD的驱动代码分散在三个目录中(题外话,我觉得针对.Net Micro Framework来说,最难的驱动是网卡驱动(特别是wifi驱动)、其次是USB驱动,和它们相比,LCD驱动就是小菜了)
741 0