程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> .Net MF新特性 - Usb雙接口支持

.Net MF新特性 - Usb雙接口支持

編輯:關於.NET

以前看USB協議2.0的時候,有個認識上的誤區,認為所謂的復合設備,必須是兩個物理上相獨立的USB設備(兩個USB Device,兩個USB地址,只是在同一條USB總線而已)。最近在開發.Net Micro Framewok的USB雙接口功能時,才明白復合設備原來也可以是這樣實現!

1為什麼要實現雙接口

有在.Net Micro Framework調試SideShow經驗的用戶,就會有特別深的感觸,因為SideShow通信是基於USB,而大部分.Net Micro Framework調試口也是基於USB,由於只有一個接口,所以PC端要麼安裝SideShow驅動,要麼安裝.Net Micro Frame USB設備驅動,二者不能共存(當然讓兩個驅動共存,也可以設置不同的PID和VID,但是這樣就需要在.Net Micro Frame開發板上進行相應的配置了),別說在線調試了,光編譯下載,就不知道要折騰好幾回。

所以對只有一個USB Debug口的開發板,要調試USB相關例程是非常痛苦的。

而USB雙接口的方案就是為解決該問題而生。同時有兩個USB接口,即可以安裝兩個不同的驅動,也可以在線調試USB例程。這是多麼一個令人神往的特性,尤為可喜的是這已經不僅僅是個意境,現如今已成為現實。目前我們已經測試通過的有:Debug+Mass Storage(U盤),Debug+HID(鼠標),Debug+Application(應用口)。當然也可以根據需要配置成三個、四個設置或多個你任意想要的接口。

2 支持雙接口,需要做些什麼

.Net Micro Framework USB接口模型

第一、修改.Net Micro Framework的USB接口配置,把一個接口修改成兩個接口;

第二、修改.Net Micro Framework的USB接口驅動,以前僅支持端點1和端點2,目前增加對端點3和端點4的支持。邏輯上接口1包括端點1和端點2,接口2包括端點3和端點4;

第三、修改PAL層接口,增加端點3和端點4的讀寫接口函數;

第四、編寫P/Invoke接口,讓C#程序也可以讀寫端點3和端點4的數據(端點1和端點2默認供調試程序讀寫用);

第五、修改.Net Micro Frame USB Windows驅動,讓其支持雙接口。(當然如果你的接口配置為HID或Mass Storage,那就不需要開發專門的驅動了);

第六、剩下的就是測試再測試了。

3 一個雙接口通信的例子

驅動程序等等安裝完畢,准備停當之後,我們需要編寫兩部分程序來調試USB應用。一是普通Windows USB讀寫程序,這個程序我在以前寫的Blog上已經介紹了(http://blog.csdn.net/yefanqiu/archive/2009/01/21/3849067.aspx)這裡就不多說了;二是開發一個.Net Micro Frame USB Device應用程序,來響應Windows平台的USB讀寫程序。

我們的程序很簡單,實現一個轉發功能,也就是把Windows平台的USB程序發送的數據,原封不動的發送回去。代碼如下:

1 using System;
2 using Microsoft.SPOT;
3 using System.Threading;
4 using Microsoft.SPOT.Hardware;
5 namespace USBDeviceTest
6 {
7     public class Program
8     {
9         public static void Main()
10         {
11             byte[] bytData=new byte[1024];
12             YFInterop.MFNative.Usb_Open(0);
13             while (true)
14             {
15                 int intSize=YFInterop.MFNative.Usb_Available();
16                 if (intSize > 0)
17                 {
18                     if (YFInterop.MFNative.Usb_Read(bytData, 0, intSize) == intSize)
19                     {
20                         string strData = intSize.ToString()+":";
21                         for (int i = 0; i < intSize; i++)
22                         {
23                             strData += bytData[i].ToString() + " ";
24                         }
25                         Debug.Print(strData);
26                         YFInterop.MFNative.Usb_Write(bytData, 0, intSize);
27                     }
28                 }
29                 Thread.Sleep(3);
30             }
31             YFInterop.MFNative.Usb_Close();
32         }
33     }
34 }
35

注:測試時,VS2008可以一直處在調試模式(可即時打印調試信息),此時USB Test程序同時完成數據收發。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved