本文转载自:

1、高速USB和USB2.0有区别吗?
     高速USB和USB2.0是有区别的,区别在于USB2.0是一种规范,而"高速USB"仅指在USB2.0规范中数据传输率为480Mbps的那部分,某个设备可以是符合USB2.0的设备,同时还可以是全速设备 或低速设备。
2、USB2.0设备与计算机的通信速度有多快?
   USB2.0支持低速、全速和高速三种速度,分别为1.5Mbps、12Mbps、480Mbps
3、USB规范定义了哪些数据传输机制(Endpoint Transfer Type)?
   #控制传输(Control)
    USB主机使用控制传输向USB设备发送命令和询问。当枚举USB设备时,控制传输使用端点0(EP0),这样可强制所有USB设备支持EP0而无需考虑支持速度。控制包的最大容量为8、16、32或64字节。低速USB设备中控制传输的包长度必须为8字节,高速USB设备必须为64字节,而全速USB设备允许8、16、32或64字节(MicroChip官网对此有错误的说法),也就是说控制传输对于最大包长度有固定的要求最大包长度信息在“设备描述符”中体现,即wMaxPacketSize为“设备描述符”包的Byte7,它反应了该端点对应的Buffer的大小,当通过一个端点进行数据传输而数据的大小超过该端点的最大包长度时,需要将数据分成若干个数据包传输,并且要求除最后一个包外,所有的包长度均等于该最大包长度,也就是说,如果一个端点收到/发送了一个长度小于最大包长度的包,即意味着数据传输结束。但需要注意:Setup包总是8 Bytes的
   #中断传输(Interrupt)
   中断传输是USB设备向USB主机请求一定轮询速率的方法。在枚举过程中,USB设备向USB主机请求轮询时间。全速设备的最大轮询速率为每毫秒一次,低速设备为每10毫秒一次。低速USB设备的最大数据负载为8字节,全速USB设备为64字节,而高速设备最大数据包为1024字节。这使得全速USB设备的最大吞吐量为64KB/s,低速USB设备为800B/s。确认中断传输可保证数据的传送。如果传输包接收失败,则会重新发送。中断传输是单向传输,但这里的单向传输并不是说只支持一个方向的传输,而是指在某个端点上该传输仅支持一个方向,或输入,或输出,如果需要在两个方向上进行某种单向传输,需要占用两个端点,可分别配置成不同的方向。
   #批量传输(Bulk)
   批量传输是设备传输大量数据的方法,但是不能保证会及时发送。在总线安排传输时,批量传输的优先级最低。当其他传输完成后,余下的带宽复位后将分配给批量传输。与中断传输一样,确认批量传输可保证数据的传送。只有全速和高速设备支持批量传输。对于全速USB设备的端点而言,最大的包容量可为8、16、32或64字节长度。对于高速USB设备的端点而言,最大的包容量可高达512字节长度。
   #同步传输(Isochronous)
   同步传输保证了传输速率。全速同步传输每帧可发送1023字节的数据。同步传输无需确认。因此,同步包有可能并未送达。同步传输的典型应用为音频/视频流,其中最重要的是以丢失包为代价保持视频和音频的进行。全速USB设备的最大传输率为1023Kbps。
   Note:HID设备只支持控制传输和中断传输方式。

什么是令牌包?
USB协议定义了四种类型的包:
帧起始、令牌、数据与握手,而其中的令牌有三种不同的形式包:
     IN——通知USB设备,主机欲读取信息
     OUT——通知USB设备,主机欲发送信息
     Setup——通知设备,主机要进行控制传输

什么是枚举过程?
USB主机通过枚举过程可了解有新的USB设备与总线相连。在应用开始前,主机向设备询问各种信息,以确定设备的类型、载入设备所需的设备驱动程序以及设备的功率需求等。在枚举过程中,USB主机还为连接的设备分配地址。在地址设定后,USB主机将与位于该地址的设备进行通信。枚举过程的最终任务之一是把设备设定为某一具体运行配置。枚举过程的详细内容在USB规范的9.1.2节中给出。

USB主机如何识别USB设备的速度?
USB主机在两根通信线(D+和D-)上均有弱下拉电阻。如果设备要以全速模式运行,将会用较大的上拉电阻上拉D+。如果设备要运行在低速模式下,则会上拉D-。两种情况中的上拉电阻的标称值为1 kΩ(PIC18F1xK50 Datasheet规定该电阻为1.5Kohm)。

USB主机如何对USB设备进行复位?
将D+和D-拉低至少10毫秒,USB主机就会对设备进行复位。当D+和D-拉低时间超过2.5微秒,USB设备就可认为已发生复位。一旦USB设备检测到了复位,在USB主机移除复位后将马上进入默认状态。该复位仅用于USB复位,不可复位控制器。

什么是VID和PID?
VID指的是厂商ID,PID指的是产品ID。通过支付费用,USB-IF会发出VID。USB-IF要求每个厂商拥有自己的VID,以便销售其产品。当所使用的VID/PID不是惟一时,可能会发生法律和技术上的纠纷。

USB2.0支持三种传输速率: 
低速(Low Speed),习惯称为USB1.0,传输速率为1.5Mbps;
全速(Full Speed),习惯称为USB1.1,传输速率为12Mbps;
高速(High Speed),习惯称为USB2.0,传输速率为480Mbps;

USB支持哪些接口形式?
USB接口有三种形式,分别为USB Type A、Type B和Mini-USB,对于AB两种类型来说,都只有四条接线,而Mini-USB却有五条连线,其外观图如下图所示:

 
 
 
 USB底层程序设计中的几个概念:
      端点(Endpoint):是USB设备中的一个独特的概念,它是USB设备与USB Host交换数据的硬件单元,不同的端点其传输数据的能力不同,适用于不同的应用场合;a USB Device Endpoint uses only one data transfer method;每个设备描述符下应当有多个端点描述符。一般的USB?芯片都会提供几个标准的端点,每个端点都支持单一的总线传输方式,其中端点0必须支持控制传输
       配置(Configuration):是用于定义设备的功能,如果一个设备有几种不同的功能,则每个功能都需要一个配置,配置是接口的集合;
       接口(Interface):是指定设备中哪些硬件与USB交换数据,每一个与USB交换数据的硬件就叫一个端点,因此,接口是端点的集合。

HID设备的特点:
      交换的数据存储在报告结构内,设备必须支持HID报告格式;
     每笔事务可以携带小量或中量的数据,低速设备每笔事务最大为8Bytes,全速设备每笔最大为64Bytes,高速设备最大为1024Bytes;
     有最大传输速度的限制:低速设备最快10ms一笔事务,最高速度为800Bytes/s,全速设备最快1ms一笔事务,最高速度为64KBytes/s;高速设备最快125us一笔事务,最高速度为24.576MByts/s。没有传输速度的保证。

为了把一个设备识别为HID类别,设备在定义描述符的"类别"字段必须设备为0x03以表示是HID类别,这样主机就会继续请求获得设备的HID描述符和报告描述符。

USB分层结构如下图所示,对应于“设备”、“配置”、“接口”与“端点”都有相应的“描述符”。

 
 
应用篇:
HID分为Standard?HID与?Custom-Build?HID,对于前者,比如说mouse/Key board都属于该类型,而Custom-Build HID则为用户自定义所用的HID。

HID USB设备开发技术【转】的更多相关文章

  1. Qt HID USB通讯错误

    1.下载hidapi库 链接:https://pan.baidu.com/s/1iQBuTxg-fReN-7GTrCT6SA 提取码:xzqw 2.把库加入qt 转自:https://www.cnbl ...

  2. STC8H开发(九): STC8H8K64U模拟USB HID外设

    目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...

  3. (USB HID) Report Descriptor 理解

    在這理整理一下基本 Report Descriptor 對於入門基礎的了解. 在很多文件.Blog都有提到HID report 總共分為3種 : Input.Output.Feature report ...

  4. 技巧.【转】在虚拟机Vmware中使用HID设备(如USB免驱键盘)

    ZC:我的环境:Win7x64.VMware10 ZC:我的处理: ZC: (1).usb.generic.allowHID = "TRUE" (本来就有,将它的位置提前) ZC: ...

  5. 庖丁解牛:USB 驱动开发技术彻底解密

    我们知道如果开发工程师不懂RS232 肯定会让人笑话可以想象面向未来USB 接口无处不在因此掌握USB 的原理固件编程及其驱动开发技术势必成为当务之急USB 即插即用的优点和灵活性运用于各种电子产品现 ...

  6. USB Keyboard Recorder

    catalogue . 引言 . Device Class Definition for Human Interface Devices (HID) . USB HID Report Descript ...

  7. USB OTG

    OTG检测的原理是:USB OTG标准在完全兼容USB2.0标准的基础上,增添了电源管理(节省功耗)功能,它允许设备既可作为主机,也可作为外设操作(两用OTG).USB OTG技术可实现没有主机时设备 ...

  8. USB开发——内核USB驱动+libusb开发方法

    linux内核已经具备usb驱动,所以一些设备使用可以免驱,libusb是针对linux内核中ubs驱动的一套api,会自行调用usb驱动接口,并为应用提供api接口,将usb设备开发减少为应用层开发 ...

  9. 让USB键盘的LED灯听你的!(不干扰使用)

    最近在研究一个课题,如何能利用键盘的led灯通道进行有效通信,那么首先要做的就是尝试能否在不影响键盘的情况下控制LED灯(num lock ,caps lock ,scroll lock)的使用. 首 ...

随机推荐

  1. App Store idfa被拒检查办法

    最近应用因为这个问题被拒两次,理由如下: PLA 3.3.12We found your app uses the iOS Advertising Identifier but does not in ...

  2. C++学了这么多年,你也许不知道为什么类定义要放在.h文件,类实现放在cpp文件。它们如何关联?

    原文  http://blog.csdn.net/ithzhang/article/details/8119286 主题 C++  C++学了这么多年你知道为什么定义类时,类的定义放在.h文件中,而类 ...

  3. 分享一个使用APICloud云数据库已上线的商城APP

    本项目盈利模式依赖taobao模块实现淘宝闭环交易,发布销售淘宝联盟产品获取返佣.目前已在应用宝上线安卓版本,先上图. 源码在此: http://community.apicloud.com/bbs/ ...

  4. perl 学习杂项笔记

    ### 由于perl 语法属于很自由的那种, 建议出现错误的时候打开 -w 或者使用 -Mdiagnositics 试一下 ### 如何调试 perl程序 http://www.ibm.com/dev ...

  5. [转]qt中文乱码问题

    http://blog.csdn.net/brave_heart_lxl/article/details/7186631#

  6. 异常处理原则--good

    异常机制是现代主流语言的标配,但是异常处理问题虽然已经被讨论很多,也有很多经典书籍的论述,却一直都充满争议.很多人都觉得异常处理很难拿捏,同时也难以理解一些语言或库的异常处理设计.我使用Java近10 ...

  7. Java基础之创建窗口——使用BoxLayout管理器(TryBoxLayout4)

    控制台程序. javax.swing.BoxLayout类定义的布局管理器在单行或单列中布局组件.创建BoxLayout对象时,需要指定是在行还是列中布局组件. 对于行,组件是从左到右地添加:对于列, ...

  8. Inventory Pro 装备拾取的实现

    以后都按照插件使用,提出问题,回答问题的方式来进行总结和学习 效果图 1.运行相关的例子,场景中出现4个矩形,这4个矩形是用来模拟物品掉落的包裹,移动Player靠近物品 2.使用鼠标点击物品正方体, ...

  9. C++Primer 第十八章

    //1.异常:待研究 //2.命名空间: // A:多个库将名字放置在全局命名空间中将引发命名空间污染. // B:命名空间为防止名字冲突提供了更加可控的机制.命名空间分割了全局命名空间,其中每个命名 ...

  10. C#面向对象的方法写数组的功能

    上一篇文章用Java方法写出了可以对数组执行的功能,然后在用实例化后的对象调用这些方法来实现这些功能: 这篇随笔改用C#语言实现同样的功能 方法类:Array using System; using ...