日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

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

系統(tǒng) 1851 0

以前看 USB 協(xié)議 2.0 的時(shí)候,有個(gè)認(rèn)識(shí)上的誤區(qū),認(rèn)為所謂的復(fù)合設(shè)備,必須是兩個(gè)物理上相獨(dú)立的 USB 設(shè)備(兩個(gè) USB Device ,兩個(gè) USB 地址,只是在同一條 USB 總線而已)。最近在開(kāi)發(fā) .Net Micro Framewok USB 雙接口功能時(shí),才明白復(fù)合設(shè)備原來(lái)也可以是這樣實(shí)現(xiàn) !

對(duì) USB 設(shè)備來(lái)說(shuō),至少會(huì)有一個(gè) USB 配置,而這個(gè)配置可以包括一到多個(gè)接口,而一個(gè)接口又可以包括多個(gè)端點(diǎn)。對(duì) Windows 平臺(tái)來(lái)說(shuō),每一個(gè)接口在邏輯上對(duì)應(yīng)一個(gè)虛擬設(shè)備,可以分別安裝不同的驅(qū)動(dòng)(視接口的配置來(lái)定,即使兩個(gè)接口配置一樣,也需要安裝兩次相同的驅(qū)動(dòng)),但從表面上看和兩個(gè)真實(shí)的物理 USB 設(shè)備沒(méi)有什么不同。

1 為什么要實(shí)現(xiàn)雙接口

有在 .Net Micro Framework 調(diào)試 SideShow 經(jīng)驗(yàn)的用戶,就會(huì)有特別深的感觸,因?yàn)? SideShow 通信是基于 USB ,而大部分 .Net Micro Framework 調(diào)試口也是基于 USB ,由于只有一個(gè)接口,所以 PC 端要么安裝 SideShow 驅(qū)動(dòng),要么安裝 .Net Micro Frame USB 設(shè)備驅(qū)動(dòng),二者不能共存(當(dāng)然讓兩個(gè)驅(qū)動(dòng)共存,也可以設(shè)置不同的 PID VID ,但是這樣就需要在 .Net Micro Frame 開(kāi)發(fā)板上進(jìn)行相應(yīng)的配置了),別說(shuō)在線調(diào)試了,光編譯下載,就不知道要折騰好幾回。

所以對(duì)只有一個(gè) USB Debug 口的開(kāi)發(fā)板,要調(diào)試 USB 相關(guān)例程是非常痛苦的。

USB 雙接口的方案就是為解決該問(wèn)題而生。同時(shí)有兩個(gè) USB 接口,即可以安裝兩個(gè)不同的驅(qū)動(dòng),也可以在線調(diào)試 USB 例程。這是多么一個(gè)令人神往的特性,尤為可喜的是這已經(jīng)不僅僅是個(gè)意境,現(xiàn)如今已成為現(xiàn)實(shí)。目前我們已經(jīng)測(cè)試通過(guò)的有: Debug+Mass Storage U 盤(pán)), Debug+HID (鼠標(biāo)), Debug+Application (應(yīng)用口)。當(dāng)然也可以根據(jù)需要配置成三個(gè)、四個(gè)設(shè)置或多個(gè)你任意想要的接口。

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

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

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

.Net Micro Framework USB 接口模型

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

第二、 修改 .Net Micro Framework USB 接口驅(qū)動(dòng),以前僅支持端點(diǎn) 1 和端點(diǎn) 2 ,目前增加對(duì)端點(diǎn) 3 和端點(diǎn) 4 的支持。邏輯上接口 1 包括端點(diǎn) 1 和端點(diǎn) 2 ,接口 2 包括端點(diǎn) 3 和端點(diǎn) 4

第三、 修改 PAL 層接口,增加端點(diǎn) 3 和端點(diǎn) 4 的讀寫(xiě)接口函數(shù);

第四、 編寫(xiě) P/Invoke 接口,讓 C# 程序也可以讀寫(xiě)端點(diǎn) 3 和端點(diǎn) 4 的數(shù)據(jù)(端點(diǎn) 1 和端點(diǎn) 2 默認(rèn)供調(diào)試程序讀寫(xiě)用);

第五、 修改 .Net Micro Frame USB Windows 驅(qū)動(dòng),讓其支持雙接口。(當(dāng)然如果你的接口配置為 HID Mass Storage ,那就不需要開(kāi)發(fā)專(zhuān)門(mén)的驅(qū)動(dòng)了);

第六、 剩下的就是測(cè)試再測(cè)試了。

3 一個(gè)雙接口通信的例子

驅(qū)動(dòng)程序等等安裝完畢,準(zhǔn)備停當(dāng)之后,我們需要編寫(xiě)兩部分程序來(lái)調(diào)試 USB 應(yīng)用。一是普通 Windows USB 讀寫(xiě)程序,這個(gè)程序我在以前寫(xiě)的 Blog 上已經(jīng)介紹了( http://blog.csdn.net/yefanqiu/archive/2009/01/21/3849067.aspx )這里就不多說(shuō)了;二是開(kāi)發(fā)一個(gè) .Net Micro Frame USB Device 應(yīng)用程序,來(lái)響應(yīng) Windows 平臺(tái)的 USB 讀寫(xiě)程序。

我們的程序很簡(jiǎn)單,實(shí)現(xiàn)一個(gè)轉(zhuǎn)發(fā)功能,也就是把 Windows 平臺(tái)的 USB 程序發(fā)送的數(shù)據(jù),原封不動(dòng)的發(fā)送回去。代碼如下:

using System;

using Microsoft.SPOT;

using System.Threading;

using Microsoft.SPOT.Hardware;

namespace USBDeviceTest

{

public class Program

{

public static void Main()

{

byte [] bytData= new byte [1024];

YFInterop. MFNative .Usb_Open(0);

while ( true )

{

int intSize=YFInterop. MFNative .Usb_Available();

if (intSize > 0)

{

if (YFInterop. MFNative .Usb_Read(bytData, 0, intSize) == intSize)

{

string strData = intSize.ToString()+ ":" ;

for ( int i = 0; i < intSize; i++)

{

strData += bytData[i].ToString() + " " ;

}

Debug .Print(strData);

YFInterop. MFNative .Usb_Write(bytData, 0, intSize);

}

}

Thread .Sleep(3);

}

YFInterop. MFNative .Usb_Close();

}

}

}

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

注:測(cè)試時(shí), VS2008 可以一直處在調(diào)試模式(可即時(shí)打印調(diào)試信息),此時(shí) USB Test 程序同時(shí)完成數(shù)據(jù)收發(fā)。

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


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 张家界市| 五家渠市| 贵溪市| 孟津县| 巧家县| 松阳县| 桐柏县| 郧西县| 定南县| 琼中| 渝北区| 木兰县| 华坪县| 云安县| 肥东县| 宜章县| 双辽市| 剑川县| 政和县| 简阳市| 双城市| 偃师市| 枣阳市| 米泉市| 开封市| 临武县| 林州市| 保山市| 冀州市| 柳河县| 盐城市| 临安市| 五常市| 玉田县| 朔州市| 安塞县| 长武县| 禹州市| 清原| 宾阳县| 托克逊县|