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自身魅力所吸引,相信下一个支持实时系统的版本更值得期待。
Micro Framework WireProtocol协议介绍相关推荐
- Zigbee在.Net Micro Framework系统中的应用
Zigbee是IEEE 802.15.4协议的代名词.根据这个协议规定的技术是一种短距离.低功耗的无线通信技术.这一名称来源于蜜蜂的八字舞,由于蜜蜂(bee)是靠飞翔和"嗡嗡"(z ...
- 在.Net Micro Framework中显示汉字
摘要:MF平台支持的字体是专有格式,扩展名为tinyfnt,需要用专门的转化工具才能把windows平台上的字体转换为tinyfnt字体.在.Net Micro Framework SDK中提供了一个 ...
- .NET Micro Framework常见问题问答
问:.NET Micro Framework是什么? 答:请参见:http://blog.csdn.net/yefanqiu/article/details/5711770 官方网站:http://w ...
- .NET Micro Framework动态调用C/C++底层代码(原理篇)
.NET Micro Framework和WinCE系统不同,从应用开发角度来说,仅支持C#开发(从V4.2版本开始,才支持VB.NET开发),而不像WinCE应用开发,既可以用C#/VB.Net,也 ...
- 《玩转.NET Micro Framework 移植-基于STM32F10x处理器》--微软中国.NET Micro Framework项目组工程师所作之序...
序 2006年才偶然知道.NET Micro Framework,那是无意间翻阅一本当年的<程序员>杂志,发现有一篇马宁所写的. ...
- 【.Net Micro Framework PortingKit – 14】TinyCLR编译与测试
在前面的系列文章中我们不厌其烦地一一介绍了在NativeSample中如何开发和调试驱动.从今天开始,我们将介绍TinyCLR项目的相关知识,也许读者以为这又得需要洋洋洒洒十几篇才能介绍的完,其实不然 ...
- 【.Net Micro Framework PortingKit(补) – 1】USB驱动开发
在前段时间我连续写了15篇关于[.Net Micro Framework PortingKit–?]的系列文章,初步介绍了.Net Micro Framework在Cortex-M3平台上的移植过程, ...
- .Net Micro Framework研究—绘图
试验平台:.Net Micro Framework 模拟器 目前在VS2005的环境里,还不支持.Net Micro Framework界面的所见即所得绘制,界面制作有三种方式,一是窗体直接绘图,二是 ...
- 【.Net Micro Framework PortingKit - 08】GPIO驱动
要点亮LED灯或获得输入IO的状态应该是比较容易的,打开端口时钟,然后读写相关的GPIO寄存器就可以了,但是要实现一个输入中断,就要费些周折了. 对STM32(Cortex-M3)的芯片,要实现一个G ...
最新文章
- vb asp.net的一些属性值
- 专题突破之反悔贪心——建筑抢修,Cow Coupons G, Voting (Hard Version),Cardboard Box
- Google Maps 地址转化成坐标
- Python 爬虫 —— scrapy
- html缩放背景不缩放_如何在缩放通话中静音
- 饭后Android 第四餐-BRVAH(最好用的数据适配器)(BRVAH简介,使用方法,item的点击事件,列表加载动画,添加头部、尾部,自定义ViewHolder)
- 十个3D 游戏引擎,html h5 js
- 001如何将灰度视频处理为伪彩色
- file open error: [Errno 2] No such file or directory: '\xe6\xb5\x8b\xe8\xaf\x95.txt'
- 点击链接时触发php文件,php点击链接直接下载文件写法
- mysql explain关键字解析
- ‘‘红包来了—红包来了—‘‘Python制作一个微信红包提示系统。
- 【ESP32S3学习笔记】LVGL相关结构体学习——lv_disp_drv_t
- HDCP @HMAC-SHA256[基于mbedtls]
- github commit 时丰富多彩的图标到底是怎么弄的?这样!
- 联咏NT98323SDK编译
- 使用 HttpWebRequest 发送模拟 POST 请求(转载)
- opensuse的快捷键
- 《通信软件开发及应用》
- php 计算一年多少周,每周的起止日期
热门文章
- 阅读部分鸟哥linux私房菜章节的读后感
- 新东方在线——java开发一面面经(2020视频面试)
- java毕业生设计中学生视力系统计算机源码+系统+mysql+调试部署+lw
- 「Python爬虫系列讲解」二、Python知识初学
- Python 按键记录器脚本
- 【论文代码复现】Clustered Sampling: Low-Variance and Improved Representativity for Clients Selection in Fede
- DVWA(暴力破解)
- pyqt5实现在IE内核下打开web界面,并实现自动解除IE安全策略问题。
- python抓取贴吧_零基础写python爬虫之抓取百度贴吧代码分享
- 51单片机总结【引脚、时钟电路、复位电路、I/O端口、内部结构】