【玩转.Net MF – 01】Flash远程读写

目前在PC远程访问设备Flash,也就是部署TinyCLR和下载应用程序。在以前写 的《NandFlash驱动开发》文章,我们知道Flash被分为六个区,典型的结构如下 (以Sam9261_ek开发板为例):

const BlockRange g_K9F2G_8_BlockStatus[] =
{
     { BlockRange::BLOCKTYPE_BOOTSTRAP ,  0,  1 },
     { BlockRange::BLOCKTYPE_CONFIG    ,  2,  2 },
     { BlockRange::BLOCKTYPE_CODE      ,  3, 24 },
     { BlockRange::BLOCKTYPE_DEPLOYMENT, 25, 29 },
     { BlockRange::BLOCKTYPE_DEPLOYMENT, 30, 34 },
     { BlockRange::BLOCKTYPE_DEPLOYMENT, 35, 39 },
     { BlockRange::BLOCKTYPE_DEPLOYMENT, 40, 48 },
     { BlockRange::BLOCKTYPE_STORAGE_A , 49, 49 },
     { BlockRange::BLOCKTYPE_STORAGE_B , 50, 50 },    
     {BlockRange::BLOCKTYPE_FILESYSTEM, 51, FLASH_BLOCK_COUNT  - 1 }
};

我们能否直接读写该Flash上的所有区呢?

实现这个功能的好处是易见的,我们再也没有必要为了下载一个应用程序而启 动相对庞大的VS2008,再也不受必须打开MF工程才能下载的限制。在我们开发Ti DM355开发板就遇到类似问题,我们给异地开发板提供者演示相关程序功能时,必 须要求对方安装VS2008,还必须发送我们的项目源码,否则就无法在另外的开发 板上进行演示。

仔细研究了一下MFDeploy程序(这是典型的C#程序,在Vista和Windows7上可 直接运行,在WinXP及以前的系统上需要安装.Net Framework运行时),发现可以 为其开发一个插件来实现我们所要求的功能。

MFDeploy程序可以通过三种方式来访问.Net MF设备,串口、网口和USB,并且 可以把TinyCLR部署到设备上去(需要开发板运行TinyBooter),也可以清空应用 程序区,所以我们只要把这部分功能给扩展一下就可以了。

插件类必须继承于MFPlugInMenuItem类,相关代码如下:

public class PlugInHandle : MFPlugInMenuItem
      {
         public override string Name { get { return  "Read/Write Flash"; } }
         public override void OnAction(IMFDeployForm  form, MFDevice device)
         {
             if (form == null || device == null)  return;
             (new frmRWFlash(form, device)).ShowDialog ();
         }
}

其中由宿主传递过来的form和device非常重要,form就是针对MFDeploy主窗体 ,主要提供DumpToOutput函数,把消息显示到信息区,而device则提供和设备通 信的相关函数,如Ping、Deploy、Erase、Execute等。

插件实现的第一步,要读写Flash区,首先要获取Flash的内存映像表,通过如 下的代码就可以获取:

_DBG.WireProtocol.Commands.Monitor_FlashSectorMap.Reply reply  = engine.GetFlashSectorMap();
if (reply != null)
{
     for (int i = 0; i < reply.m_map.Length; i++)
     {
         _DBG.WireProtocol.Commands.Monitor_FlashSectorMap.FlashSectorData fsd  = reply.m_map[i];
         string usage = "";
         switch (fsd.m_flags &  _DBG.WireProtocol.Commands.Monitor_FlashSectorMap.c_MEMORY_USAGE_MASK)
         {
             case  _DBG.WireProtocol.Commands.Monitor_FlashSectorMap.c_MEMORY_USAGE_APPLIC ATION:
                 usage = "Application";
                 break;
             case  _DBG.WireProtocol.Commands.Monitor_FlashSectorMap.c_MEMORY_USAGE_BOOTST RAP:
                 usage = "Bootstrap";
                 break;
             case  _DBG.WireProtocol.Commands.Monitor_FlashSectorMap.c_MEMORY_USAGE_CODE:< BR>                  usage = "Code";
                 break;
             case  _DBG.WireProtocol.Commands.Monitor_FlashSectorMap.c_MEMORY_USAGE_CONFIG :
                 usage = "Configuration";
                 break;
             case  _DBG.WireProtocol.Commands.Monitor_FlashSectorMap.c_MEMORY_USAGE_DEPLOY MENT:
                 usage = "Deployment";
                 break;
             case  _DBG.WireProtocol.Commands.Monitor_FlashSectorMap.c_MEMORY_USAGE_JITTER :
                 usage = "Jitter";
                 break;
             case  _DBG.WireProtocol.Commands.Monitor_FlashSectorMap.c_MEMORY_USAGE_FS:
                 usage = "File System";
                 break;
             case  _DBG.WireProtocol.Commands.Monitor_FlashSectorMap.c_MEMORY_USAGE_RESERV ED:
                 usage = "Reserved";
                 break;
             case  _DBG.WireProtocol.Commands.Monitor_FlashSectorMap.c_MEMORY_USAGE_STORAG E_A:
                 usage = "Storage";
                 break;
             case  _DBG.WireProtocol.Commands.Monitor_FlashSectorMap.c_MEMORY_USAGE_STORAG E_B:
                 usage = "Storage";
                 break;
             case 0xA0:
                 usage = "Custom";
                 break;
         }
         FlashMap.Add(FlashMaps, usage, fsd.m_address,  fsd.m_size);
   }
}

时间: 2024-10-01 19:33:17

【玩转.Net MF – 01】Flash远程读写的相关文章

【玩转.Net MF – 03】远程文件查看器

虽说目前.Net Micro Framework已经支持文件系统(FAT16/FAT32),但在远 程还无法直接访问,从某种意义上讲,无法和PC交互的存储介质显得有些鸡肋. 我做SideShow相关开发的时候,为了向该文件系统拷贝文件,实现了 UsbMassStorage功能,把设备当优盘来用,但这样做,等于独占了USB口,并且设 备和PC的连接也必须为USB,对仅拥有串口或网口的设备是无效的.做过WinCE或 Windows Mobile开发的人都知道,VS2008开发工具提供了些远程工具,诸

【玩转.Net MF – 04】远程屏幕截图

实现远程屏幕截图的思路很简单,就是直接获取设备的显存数据,由PC再现画 面.由于我们已经实现了Custom信道,所以我们在原有程序基础上,增添一个 Custom_Command_Screenshots命令,就可以完成数据的获取.但是比较麻烦的是 ,对不同的LCD设备,同样显示画面,显存数据有可能不同,对嵌入式设备,常见 的LCD显示是16位色(也有1位或8位色的,但比较少见),简便起见,我们仅考虑 16色显示画面的截图. 16位色图根据RGB的分量数值,一般有如下几种模式:1555,565,55

用Flash远程调用增强J2EE表示层

对Macromedia公司的Flash的远程调用使得Java开发者除了JSP(JavaServer Pages)和Swing之外又有了一种全新的方式来构建J2EE(Java 2 Platform, Enterprise Edition)应用. 本文调查了Flash远程调用,解释了为何它有如此作用,并且提供了一个如何实现的例子 在任何多层体系中选择表示层技术时,Java开发者通常有两种选择: JSP或者Swing/AWT(Abstract Windowing Tookit).借助JSP,开发者可以

「玩一玩」量化GDI+:快速Bitmap读写像素——到底有多快?

问题描述 发个帖子然后蒸馒头吃--------这是一个古老的技巧:使用Bitmap类时经常会用到GetPixel和SetPixel,但是这两个方法直接使用都比较慢,所以一般都会使用LockBits/UnlockBits将位图在内存中锁定,以加快操作速度.MSDN上的标准参考是这样的:privatevoidLockUnlockBitsExample(PaintEventArgse){//Createanewbitmap.创建位图Bitmapbmp=newBitmap("c:\fakePhoto.j

利用 Flash 远程检测客户端安装的杀软

本文将提供一种检测用户已安装的杀软的可能的方法.如果我们想对用户发起攻击,那么获取该用户已安装的杀软信息是非常有用的. 本文所提供的方法主要基于以下两点: 1.现在的主流AV在检测恶意软件时会进行网络流量的分析. 通常情况下,http 和 smtp/pop3/imap 这类协议已经被分析了.然而,随着 TLS 加密传输越来越被广泛的使用,因此,杀软要分析被加密的网络传输信息,就需要针对用户的应用程序和远程服务器执行类似中间人攻击(MITM)的行为.为了绕过证书链的检测,杀软需要安装它自己的根证书

【玩转.Net MF – 02】让PC成为MF的鼠标键盘

考虑一个应用场景,你设计了一个多功能带LCD显示的仪器,假设为了节省成 本,没有安装触摸屏和扩展外接鼠标键盘的接口,仪表上仅有几个外置按钮,但 是由于功能相对复杂,需要配置很多参数,如果单单依靠外置按钮,输入不仅慢 ,还得为此设计一套输入规则,想想看如果能通过仪表调试口,通过扩展让我们 的PC成为它的鼠标键盘,则输入工作将变的异常简单(其实这样的仪表并不是我 凭空瞎想,以前开发ICU输液系统时,国外生产的输液装置就是这样的仪表,比如 要输入药名.输液速度和输液压力等一系列相关参数). 通过扩展我

【转】 .Net Micro Framework 快速入门

   .Net Micro Framework 快速入门 收藏  一.简介   Microsoft .NET Micro Framework 2001年由微软研究院开始研发,并随后在其MSN Direct项目中使用该技术,2007年9月微软对外发布2.0,2008年10月 V3.0.2009年11月 V4.0.2010年5月 V4.1 beta,2009年并入.NET产品组,Digi.Atmel.飞思卡尔等半导体公司都先后为其推出了开发板,该技术可以应用到远程控制.智能家电.教育类机器.医疗电子

c++-截取程序运行窗口,打包成flash视频流实现网页远程操作!

问题描述 截取程序运行窗口,打包成flash视频流实现网页远程操作! 阿里巴巴的云服务器貌似有这一功能,通过flash远程桌面ECS,这怎么实现,给点思路? 解决方案 http://blog.csdn.net/ly402609921/article/details/7428981

Flash CSRF 恶意利用攻击及防御

Flash CSRF名词解释 CSRF(Cross-site request forgery跨站请求伪造,是一种对网站的恶意利用,CSRF则通过伪装来自受信任用户的请求来利用受信任的网站. Flash CSRF通常是由于Crossdomain.xml文件配置不当造成的,利用方法是使用swf来发起跨站请求伪造. Flash CSRF形成的原因 看看如何寻找Flash CSRF: 首先我们要知道怎么形成CSRF的,CSRF形成的原因大概有以下几种: Flash跨域权限管理文件Crossdomain.