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,如需转载请自行联系原作者

相关文章
|
内存技术 移动开发
【.Net Micro Framework PortingKit–11】NandFlash驱动开发
对.Net Micro Framework系统来说,正常情况下Flash(包括NandFlash和NORFlash)分为六个区
603 0
|
物联网 芯片
Zigbee在.Net Micro Framework系统中的应用
Zigbee是IEEE 802.15.4协议的代名词。根据这个协议规定的技术是一种短距离、低功耗的无线通信技术。这一名称来源于蜜蜂的八字舞,由于蜜蜂(bee)是靠飞翔和“嗡嗡”(zig)地抖动翅膀的“舞蹈”来与同伴传递花粉所在方位信息,也就是说蜜蜂依靠这样的方式构成了群体中的通信网络。
798 0
.Net Micro Framework研究—带I2C总线的模拟器
I2C以前没有怎么接触过,所以做它的模拟功能,只能靠着感觉走,有不妥之处,还望方家指正。做出了spi相关的模拟功能,做I2C相对也就不难了,只不过用户操作I2C总线读写数据的时候要稍微麻烦一点。
624 0
【.Net Micro Framework PortingKit - 07】NVIC中断处理
Cortex-M3的中断架构和以往的ARM7、ARM9、ARM11有了很大的区别,IRQ、FIQ的概念的已经消失,随之而来的是NVIC中断管理(支持最多256个中断优先级,128级抢断)及中断向量表
607 0
【.Net Micro Framework PortingKit(补) – 1】USB驱动开发
USB接口支持8个端点,数据传输支持三种模式:DMA、双缓冲、单缓冲,简单期间,我仅实现了单缓冲模式。首先,我们需要声明USB寄存器相对应的结构体,以期方便操作相关的寄存器。
613 0
【.Net Micro Framework PortingKit – 12】SysTick驱动开发
SysTick驱动有三个功用,一是我们上面所说的多任务和多线程支持;二是获得系统当前Tick,以此实现延时等待
621 0
|
前端开发
【.Net Micro Framework PortingKit - 06】设置芯片时钟
上两篇《修改启动代码&重写向量表》《SRAM初始化&设置NVIC中断表偏移》文章中,我们设置了中断向量表,初始化了RAM,并重设了向量表的地址,本篇文章是相对重要的一篇,我们将设置芯片时钟
557 0
|
.NET 开发框架 内存技术
【.Net Micro Framework PortingKit – 14】TinyCLR编译与测试
由于TinyCLR的相关代码与硬件无关,我们所做的就是根据实际需要,添加不同的Feature,此外就是合理配置堆栈和代码存储位置。
1831 0
|
物联网 芯片 数据安全/隐私保护
RFID技术在.Net Micro Framework中的应用
RFID射频识别是一种非接触式的自动识别技术,它通过射频信号自动识别目标对象并获取相关数据,识别工作无须人工干预,可工作于各种恶劣环境。RFID技术可识别高速运动物体并可同时识别多个标签,操作快捷方便。
798 0
|
Windows
在Corex-M3开发板上移植.Net Micro Framework系列文章
.NET Micro Framework 将 .NET 的可靠性和效率与 Visual Studio® 的高生产率结合起来,以针对价格较低、资源受限的小型设备开发应用程序,可帮助人们使用熟悉的 Visual Studio 工具来构建托管的嵌入式应用程序。
621 0