没有合适的资源?快使用搜索试试~ 我知道了~
首页基于WinUSB实现的嵌入式USB免驱设备通信方式
基于WinUSB实现的嵌入式USB免驱设备通信方式
43 下载量 128 浏览量
更新于2023-05-04
评论 1
收藏 103KB PDF 举报
为了简化USB设备的开发和接入到PC系统,微软开发了WinUSB,可以将Winusb.sys作为设备功能驱动程序安装,并提供WinUSB API供应用程序访问设备。一直以来,除了USB HID设备,其他类型的设备在WINDOWS环境下需要安装驱动程序才能工作。要实现USB设备免驱,就只能使用HID设备。而HID设备传输速度慢,在有些场合必须使用Bulk类型进行批量传输时,就必须使用第三方驱动,或者自己开发一个驱动,使得项目开发非常麻烦。现在好了,自从微软推出了WinUSB,在微软的操作系统上实现简单的Bulk类型批量传输也变得非常的方便快捷,在研发过程当中或者一些对于差异化要求不高的场合,是非
资源详情
资源评论
资源推荐
基于基于WinUSB实现的嵌入式实现的嵌入式USB免驱设备通信方式免驱设备通信方式
为了简化USB设备的开发和接入到PC系统,微软开发了WinUSB,可以将Winusb.sys作为设备功能驱动程序安
装,并提供WinUSB API供应用程序访问设备。一直以来,除了USB HID设备,其他类型的设备在WINDOWS环
境下需要安装驱动程序才能工作。要实现USB设备免驱,就只能使用HID设备。而HID设备传输速度慢,在有些
场合必须使用Bulk类型进行批量传输时,就必须使用第三方驱动,或者自己开发一个驱动,使得项目开发非常
麻烦。现在好了,自从微软推出了WinUSB,在微软的操作系统上实现简单的Bulk类型批量传输也变得非常的方
便快捷,在研发过程当中或者一些对于差异化要求不高的场合,是非
为了简化USB设备的开发和接入到PC系统,微软开发了WinUSB,可以将Winusb.sys作为设备功能驱动程序安装,并提
供WinUSB API供应用程序访问设备。一直以来,除了USB HID设备,其他类型的设备在WINDOWS环境下需要安装驱动程序
才能工作。要实现USB设备免驱,就只能使用HID设备。而HID设备传输速度慢,在有些场合必须使用Bulk类型进行批量传输
时,就必须使用第三方驱动,或者自己开发一个驱动,使得项目开发非常麻烦。现在好了,自从微软推出了WinUSB,在微软
的操作系统上实现简单的Bulk类型批量传输也变得非常的方便快捷,在研发过程当中或者一些对于差异化要求不高的场合,是
非常适用且容易实现的。本文致力于实现一个简单的WinUSB通信系统,以满足此类需求。
如何让嵌入式设备枚举成WinUSB设备
系统通过USB描述符来确定以何种USB Class类型来工作。如果希望WINDOWS能够将嵌入式设备识别为WinUSB设备,
则其描述符至少应当包含以下字段:
1、支持 OS 字符串描述符:
为了让 USB 驱动程序堆栈了解设备支持扩展的特征描述符,设备必须定义存储在字符串索引 0xEE 处的 OS 字符串描述
符。在枚举过程中,驱动程序堆栈查询字符串描述符。如果存在描述符,驱动程序堆栈会假定设备包含一个或多个 OS 特征描
述符和检索这些特征描述符所需要的数据。检索的字符串描述符具有 bMS_VendorCode 字段值。该值为1表示USB驱动程序
堆栈必须用来检索扩展特征描述符的供应商代码。
#define bMS_VendorCode ( 0x01 )
// "MSFT100" : index : 0xEE : langId : 0x0000const U8 OS_StringDescritpor[ ] =
{ 0x12, 0x03, 'M', 0, 'S', 0, 'F', 0, 'T', 0, '1', 0, '0', 0, '0', 0, bMS_VendorCode, 0 };2、设置兼容ID特征描述符:
const U8 WINUSB_ExtendedCompatId_Descritpor[ ] ={
0x28, 0x00, 0x00, 0x00, // dwLength
0x00, 0x01, // bcdVersion
0x04, 0x00, // wIndex
0x01, // bCount
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Reserved[7]
0x00, // bFirstInterfaceNumber
0x01, // RESERVED ( 0x01 )
'W', 'I', 'N', 'U', 'S', 'B', 0x00, 0x00, // compactiableID[8]
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // subCompactiableID[8]
0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // Reserved[6]
};
注:WinUSB还支持复合设备,对于单一传输类型简系统,我们忽略复合设备的要求即可。compatibleID字段必须指定
"WINUSB" 作为字段值。其他可以根据需求更改。
3、注册设备接口 GUID描述符:
该描述符用于区分不同的WinUSB设备。
const U8 WINUSB_ExtendedProperty_InterfaceGUID_Descritpor[ ] ={
0x8E, 0x00, 0x00, 0x00, // dwTotalSize = Header + All sections0x00, 0x01, // bcdVersion
0x05, 0x00, // wIndex
0x01, 0x00, // wCount
0x84, 0x00, 0x00, 0x00, // dwSize -- this section0x01, 0x00, 0x00, 0x00, // dwPropertyDataType0x28, 0x00,//
wPropertyNameLength 'D',0,'e',0,'v',0,'i',0,'c',0,'e',0,'I',0,'n',0x00,'t',0,'e',0,'r',0,'f',0,'a',0,'c',0,'e',0, 'G',0,'U',0,'I',0,'D',0,0,0,0x4E,
0x00, 0x00, 0x00, // dwPropertyDataLength : 78 Bytes = 0x0000004E'{',0,'1',0,'2',0,'3',0,'4',0, '5',0,'6',0,'7',0,'8',0,'-
',0,'1',0,'2',0,'3',0,'4',0,'-',0,'1',0,'3',0,'4',0,'4',0,'-',0,'1',0,'2',0,'3',0,'4',0,'-
',0,'1',0,'2',0,'3',0,'4',0,'5',0,'6',0,'7',0,'8',0,'9',0,'A',0,'B',0,'C',0,'}',0,0,0};// bPropertyData : WCHAR : L"{12345678-1234-1234-
1234-123456789ABC}"4、端点描述符:
按实际的需求的配置端点数量和类型,即可完成嵌入式设备的描述符配置了。
一般固件程序可以通过MCU厂家提供的范例程序进行修改,这里省略USB固件功能的说明。只要包含以上三个描述符中
的必须的字段,就可以成功枚举成USB DevICe。枚举成功后在设备WINDOWS设备管理器中可看到类似设备,如下图1所
示。
weixin_38591615
- 粉丝: 8
- 资源: 908
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- RTL8188FU-Linux-v5.7.4.2-36687.20200602.tar(20765).gz
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0