收藏 分享(赏)

USB入门基础知识.doc

上传人:11xg27ws 文档编号:9295818 上传时间:2019-08-01 格式:DOC 页数:15 大小:363.50KB
下载 相关 举报
USB入门基础知识.doc_第1页
第1页 / 共15页
USB入门基础知识.doc_第2页
第2页 / 共15页
USB入门基础知识.doc_第3页
第3页 / 共15页
USB入门基础知识.doc_第4页
第4页 / 共15页
USB入门基础知识.doc_第5页
第5页 / 共15页
点击查看更多>>
资源描述

1、 -USB 入门系列- USB 概述:USB 是什么呢?一说 USB 是 You SB 的意思,即“你傻 B”的意思。另一种说法是 USB 其实是美国的弟弟,因为美国叫 USA,USB 当然是他的弟弟了。那么 USB 到底是什么呢?其实 USB 是通用串行总线(Universal Serial Bus)的简写,它已经有了 10 多年的历史了。USB 协议出现过的版本有 USB1.0,USB1.1,USB2.0。由于 USB 是主从模式,设备与设备之间、主机与主机之间不能互连,为了解决这个问题,扩大 USB 的使用范围,就出现了 USB OTG(On The Go)。USB OTG 的做法是,同

2、一个设备,在不同的场合下可以在主机或从机之间切换。在 USB1.0 和 USB1.1 版本中,只支持 1.5Mbps 的低速(Low Speed)模式和 12Mbps 的全速(Full Speed)模式。在 USB2.0 中,又加入了 480Mbps 的高速(High Speed)模式。值得注意的是,USB2.0 并不是高速设备的代名词,详述请看误区一文。USB 具有很多优点,例如即插即用,容易使用,方便携带,传输速度快,可扩展性强,标准统一,价格便宜等等。目前流行的 USB 设备有移动硬盘,数码相机,MP3,U 盘,USB 鼠标、键盘、游戏杆,USB MIDI 键盘,USB 摄相头,USB

3、打印机,USB 扫描仪,USB 声卡,USB 话筒,USB 网卡,USB 显示器,USB 电话,具有 USB 口的各种仪表仪器等等,只要是能跟电脑打交道的,就基本上可以通过 USB 来实现,足见 USB 功能的强大。然而 USB 也有一些缺点,例如传输距离短,开发、调试较困难等等。当然,它还有一个更大的缺点,那就是你发现要找出它的缺点是件很令人头疼的事情。要开发 USB,一个网站是开发者必须要知道的,那就是小组:http:/ USB 开发者论坛,网址是 Http:/www.usb.org。此外,还有其它一些 USB 相关的网站也不错,例如驱动程序开发网:http:/ww / USB,看书是少

4、不了的。推荐一本叫做计算机 USB 系统原理及其主/从机设计(马伟 编著,北京航天航空大学出版社)的书,我得这本书写得很不错,而且也不贵,只要 29.5¥,如果你去 http:/ 网站购书的话,还可以打 7.5 折,只需 22¥。至于协议,我还是推荐大家看英文原版的,这样理解起来更准确。当然现在也有好多协议翻译的书,大家可以在网上搜索一下。也有很多电子版的,这样可以节省一些钱。我们的口号是:“现在 USB 技术已经很流行了,就像以前的串口一样。以前的电子工程师不会搞串口通信就落伍了,而现在的电子工程师如果不会搞 USB 通信,那就落伍了。电子工程师门,还等什么,赶紧加入小组来学习 USB 吧”

5、,恩,这个口号有点长,将就一下吧。-USB 是一种主从结构。主机叫做 Host,从机叫做 Device(也叫做设备),集线器也被当作一种特殊的设备处理。USB 的数据交换只能发生在主机和设备之间,主机和主机,设备和设备之间不能互连。为了在物理上区分主机和设备,使用了不同的插头和插座,这个在 USB 的连接器一节中会讲到。所有的数据传输都由主机主动发起,而设备只是被动的负责应答。例如,在读数据时,USB 主机先发出读命令,设备收到该命令后,才返回数据。在 USB OTG 中,一个设备可以在从机和主机之间切换,这样就可以实现设备与设备之间的连接,大大增加了 USB 的使用范围,但这时依然没有脱离这

6、种主从关系,两个设备之间必然有一个作为主机,另一个作为从机。USB OTG 增加了一种 MINI USB 接头,比普通的 4 线 USB 多了一个 ID 表识线,用来表明它是主机还是设备 ,这个以后会讲到。USB 的拓扑结构为金字塔型。由一个 USB 主控制器出发,下面接 USB 集线器,USB 集线器将一个 USB 口扩展为多个 USB 口,多个 USB 口又可以通过集线器为更多个接口。但 USB 协议中对集线器的层数是有限制的,USB1.1 规定最多为 4 层,USB2.0 规定最多为 6 层。理论上,一个 USB 主控制器最多可接 127 个设备,这是由数据包中的 7 位地址位决定的,但

7、是实际上不会接这么多的设备。我们所说的一个 USB 主控制器可以连接多个 USB 设备,并不是直接简单的将多个设备并联或者串联,而是要由集线器负责端口扩展,才能连接更多的设备。在我们的电脑上,也有一个(或者多个,视 USB 主控制器的个数而定)集线器,它叫做根集线器,直接连在 USB 主控制器上。在设备管理器中,我们可以看到 USB 主控制器和根集线器。如下图所示。USB 数据传输路径如下:USB 主控制器发出数据包,通过根集线器,再通过下面的集线器(如果有的话),再发给 USB 设备;设备返回数据,交给它上层的集线器,上层的集线器再交给更上层的集线器,直到 USB 主控制器为止。而 USB

8、主控制器就可以跟 CPU 打交道了。在标准的 PC 机上,USB 主控制器是挂在 PCI 总线上的。在 Windows 中,USB 由各种驱动程序负责管理,最后由驱动程序产生功能设备(FDO),这就是我们所看到的实际设备了。我们的应用程序就可以通过 Windows 提供的各种 API 进行访问 USB 设备了,例如 CreateFile,ReadFile,DeviceIOControl 等等。标准的 USB 使用 4 根线:5V 电源线(Vbus),差分数据线负(D-),差分数据线正(D+),地(Gnd)。在 USB OTG 中,又增加了一种 mini 接口,使用的是 5 根线,比标准的 US

9、B 多了一根身份识别(ID)线。USB 使用的是差分传输模式,有两根数据线,分别是 D+和 D-。在 USB 的 低速和全速模式中,采用的是电压传输模式。而在高速模式下,则是电流传输模式。关于具体的高低电平门限值,请参看 USB 协议。为了防止出现长时间的 0 或者 1(这样不利于时钟信号的提取),在发送数据前要经过位填充处理。然后再将数据串行化,发送到数据线上,由两根数据线的差分值来表示 0 或者 1。而在接收端,则刚好是相反的过程。接收端采样数据线,将数据并行化,并同时去掉未填充,然后解析数据。通常,我们使用现成的 USB 芯片,像位填充,串行化这些芯片内部的硬件已经帮我们做好了,因此通常

10、我们并不用关心这些细节。在设备接收数据时,芯片的串行接口引擎(SIE)会接收属于自己地址的数据,并根据相应的端口号,放到相应的缓冲区内,并返回 ACK 给主机进行确认,然后产生中断请求,通知我们的程序,已经收到数据包了。在我们还未处理完缓冲区的数据之前,如果再收到对该端点的输出请求,USB 芯片将会使用 NAK 返回,告诉主机端点现在忙,主机检测到 NAK 后,过段时间会重试输出数据,直到超时为止;发送数据时,用户将数据写入 USB 芯片的缓冲区,并通知 USB 芯片缓冲区内数据可用,然后 USB 芯片检测到主机请求对应的端点输入时,它就会将数据返回,数据发送完毕并收到主机的 ACK 确认之后

11、,产生中断请求通知应用程序数据已经发送完毕。如果 USB 芯片已经收到了输入请求,但是用户程序还未填充好缓冲区,它也会用 NAK 返回,告诉主机数据还未准备好。主机收到 NAK 后,过段时间会重试,直到超时为止。在 USB 协议中规定,设备在未配置之前,可以从 Vbus 上最多获取 100mA 的电流;在配置之后,最多可从 Vbus 上获取 500mA 的电流。Vbus 是 5V 的电压,具体的参数请参看 USB 协议。USB 的线缆以及插头、插座USB 是一个标准的协议,因此对线缆、插头、插座等有严格的规范要求。在最初的标准里,USB 接头有 4 条线:电源,D-,D+ ,地线。我们暂且把这

12、样的叫做标准的 USB 接头吧。后来 OTG 出现了,又增加了 miniUSB 接头。而 miniUSB 接头则有 5 条线,多了一条 ID 线,用来标识身份用的。标准 USB 口只有 A 型和 B 型。其中每一型又分为插头和插座,例如 A 型插头,A 型插座等。我们平常电脑上用的那种插座叫做 A 型 USB 插座,而相应的插头,叫做 A 型插头,例如 U 盘上那种。而像打印机上面那个插座,则是 B 型插座(比较四方的,没电脑上面那种扁),相应的插头,就是 B 型插头。也许你见过一头方一头扁的 USB 延长线,没错了,扁的那头就叫做 A 型插头,而方的那头,就叫做 B 型插头,而相应的被插的那

13、两个插座,就分别是 A 型插座和 B 型插座了。A 型插头是插不进 B 型插座的,反之亦然。miniUSB 也分为 A 型,B 型,但增加了一个 AB 型(不是血型呀,别搞错了,没有 O 型_)。既然它叫做 miniUSB,那么当然它就是很小的了,主要是给便携式设备用的,例如 MP3、手机、数码相机等。USB 是一主多从结构,即一个时刻只能有一台主机。像 PC 机就是一个主机,其它的只能是设备,因而两个设备之间是无法直接进行通信的。而 USB OTG(on the go)的出现,则解决了这个矛盾:一个设备可以在某种场合下,改变身份,以主机的形式出现。因而就出现了 AB 型的 miniUSB 插

14、座,不管是 A 型 miniUSB 插头,还是 B 型 miniUSB 插头,都可以插进去,而靠里面多出的那条 ID 线来识别它的身份:是主机还是从机。这样两个 USB 设备就可以直接连接起来,进行数据传送了。 像我们 MP3 上用的那中 miniUSB 插座,就是 B 型的 miniUSB 插座(注意,有一类 miniUSB 插座,似乎不是 USB 规范里面的,因为 miniUSB 接头应该有 5 条线,而这种插座只有 4 条线)。由于 USB 是支持热插拔的,因此它在接头的设计上也有相应的措施。USB 插头的地引脚和电源引脚比较长,而两个数据引脚则比较短,这样在插入到插座中时,首先接通电源

15、和地,然后再接通两个数据线。这样就可以保证电源在数据线之前接通,防止闩锁发生。至于 USB 电缆,通常我们不怎么关心,买现成的就行了,除非你是生产 USB 线缆的。在全速模式下需要使用带屏蔽的双绞电缆线,而低速模式模式则可以不使用屏蔽和双绞。此外,USB 协议规定,USB低速电缆长度不得超过 3 米,而全速电缆长度不得超过 5 米。这是因为线缆传输有延迟,要保证能够正确响应,就不能延迟太多。USB 标准规定了里面信号线的颜色,其中 Vbus 为红色,D- 为白色,D+为绿色,GND 为黑色。然而,我见过很多 USB 线缆并没有遵循标准,所以大家在使用时要小心,用表测量一下比较可靠。更详细的数据

16、,例如封装尺寸等,请参看 USB 协议。附图:各种 USB 插头和插座,来自 USB 协议。USB 设备的插入检测机制USB 主机是如何检测到设备的插入的呢?首先,在 USB 集线器的每个下游端口的 D+和 D-上,分别接了一个 15K 欧姆的下拉电阻到地。这样,在集线器的端口悬空时,就被这两个下拉电阻拉到了低电平。而在 USB 设备端,在 D+或者 D-上接了 1.5K 欧姆上拉电阻。对于全速和高速设备,上拉电阻是接在 D+上;而低速设备则是上拉电阻接在 D-上(也就是说, USB 集线器的 D+、D-都下拉 15K,而全速 /设备描述符的字节数大小BYTE bDescriptorType;

17、 /设备描述符类型编号WORD bcdUSB; /USB 版本号BYTE bDeviceClass; /USB 分配的设备类代码BYTE bDeviceSubClass; /USB 分配的子类代码BYTE bDeviceProtocol; /USB 分配的设备协议代码BYTE bMaxPacketSize0; /端点 0 的最大包大小WORD idVendor; /厂商编号WORD idProduct; /产品编号WORD bcdDevice; /设备出厂编号BYTE iManufacturer; /设备厂商字符串的索引BYTE iProduct; /描述产品字符串的索引BYTE iSeria

18、lNumber; /描述设备序列号字符串的索引BYTE bNumConfigurations; /可能的配置数量DEVICE_DESCRIPTOR_STRUCT, * pDEVICE_DESCRIPTOR_STRUCT;/实际的设备描述符示例code DEVICE_DESCRIPTOR_STRUCT device_descriptor= /设备描述符sizeof(DEVICE_DESCRIPTOR_STRUCT), /设备描述符的字节数大小,这里是 18 字节DEVICE_DESCRIPTOR, /设备描述符类型编号,设备描述符是 010x1001, /USB 版本号,这里是 USB01.10

19、,即 USB1.1。由于 51 是大端模式,所以高低字节交换0x00, /USB 分配的设备类代码,0 表示类型在接口描述符中定义0x00, /USB 分配的子类代码,上面一项为 0 时,本项也要设置为 00x00, /USB 分配的设备协议代码,上面一项为 0 时,本项也要设置为 00x10, /端点 0 的最大包大小,这里为 16 字节0x7104, /厂商编号,这个是需要跟 USB 组织申请的 ID 号,表示厂商代号。0xf0ff, /该产品的编号,跟厂商编号一起配合使用,让主机注册该设备并加载相应的驱动程序0x0100, /设备出厂编号0x01, /设备厂商字符串的索引,在获取字符串描

20、述符时,使用该索引号来识别不同的字符串0x02, /描述产品字符串的索引,同上0x03, /描述设备序列号字符串的索引,同上0x01 /可能的配置数为 1,即该设备只有一个配置;2.配置描述符/定义标准的配置描述符结构typedef struct _CONFIGURATION_DESCRIPTOR_STRUCTBYTE bLength; /配置描述符的字节数大小BYTE bDescriptorType; /配置描述符类型编号WORD wTotalLength; /此配置返回的所有数据大小BYTE bNumInterfaces; /此配置所支持的接口数量BYTE bConfigurationVa

21、lue; /Set_Configuration 命令所需要的参数值BYTE iConfiguration; /描述该配置的字符串的索引值BYTE bmAttributes; /供电模式的选择BYTE MaxPower; /设备从总线提取的最大电流CONFIGURATION_DESCRIPTOR_STRUCT, * pCONFIGURATION_DESCRIPTOR_STRUCT;3.接口描述符/定义标准的接口描述符结构typedef struct _INTERFACE_DESCRIPTOR_STRUCTBYTE bLength; /接口描述符的字节数大小BYTE bDescriptorType

22、; /接口描述符的类型编号BYTE bInterfaceNumber; /该接口的编号BYTE bAlternateSetting; /备用的接口描述符编号BYTE bNumEndpoints; /该接口使用的端点数,不包括端点 0BYTE bInterfaceClass; /接口类型BYTE bInterfaceSubClass; /接口子类型BYTE bInterfaceProtocol; /接口遵循的协议BYTE iInterface; /描述该接口的字符串索引值INTERFACE_DESCRIPTOR_STRUCT, * pINTERFACE_DESCRIPTOR_STRUCT;4.端

23、点描述符/定义标准的端点描述符结构typedef struct _ENDPOINT_DESCRIPTOR_STRUCTBYTE bLegth; /端点描述符字节数大小BYTE bDescriptorType; /端点描述符类型编号BYTE bEndpointAddress; /端点地址及输入输出属性BYTE bmAttributes; /端点的传输类型属性WORD wMaxPacketSize; /端点收、发的最大包大小BYTE bInterval; /主机查询端点的时间间隔ENDPOINT_DESCRIPTOR_STRUCT, * pENDPOINT_DESCRIPTOR_STRUCT;下面

24、是一个配置描述符集合的定义typedef struct _CON_INT_ENDP_DESCRIPTOR_STRUCTCONFIGURATION_DESCRIPTOR_STRUCT onfiguration_descriptor;INTERFACE_DESCRIPTOR_STRUCT terface_descritor;ENDPOINT_DESCRIPTOR_STRUCT point_descriptorENDPOINT_NUMBER; CON_INT_ENDP_DESCRIPTOR_STRUCT;配置描述符集合的示例code CON_INT_ENDP_DESCRIPTOR_STRUCT co

25、n_int_endp_descriptor= /配置描述符集合/configuration_descriptor /配置描述符sizeof(CONFIGURATION_DESCRIPTOR_STRUCT), /配置描述符的字节数大小,这里为 9CONFIGURATION_DESCRIPTOR, /配置描述符类型编号,配置描述符为 2(sizeof(CONFIGURATION_DESCRIPTOR_STRUCT)+sizeof(INTERFACE_DESCRIPTOR_STRUCT)+sizeof(ENDPOINT_DESCRIPTOR_STRUCT)*ENDPOINT_NUMBER)*256+

26、(sizeof(CONFIGURATION_DESCRIPTOR_STRUCT)+sizeof(INTERFACE_DESCRIPTOR_STRUCT)+sizeof(ENDPOINT_DESCRIPTOR_STRUCT)*ENDPOINT_NUMBER)/256, /配置描述符集合的总大 小0x01, /只包含一个接口0x01, /该配置的编号0x00, /iConfiguration 字段0x80, /采用总线供电,不支持远程唤醒0xC8 /从总线获取最大电流 400mA,/interface_descritor /接口描述符sizeof(INTERFACE_DESCRIPTOR_STRU

27、CT), /接口描述符的字节数大小,这里为 9INTERFACE_DESCRIPTOR, /接口描述符类型编号,接口描述符为 30x00, /接口编号为 40x00, /该接口描述符的编号为 0ENDPOINT_NUMBER, /非 0 端点数量为 2,只使用端点主端点输入和输出0x08, /定义为 USB 大容量存储设备0x06, /使用的子类,为简化块命令0x50, /使用的协议,这里使用单批量传输协议0x00 /接口描述符字符串索引,为 0,表示没有字符串,/endpoint_descriptor/主端点输入描述 sizeof(ENDPOINT_DESCRIPTOR_STRUCT), /

28、端点描述符的字节数大小,这里为 7ENDPOINT_DESCRIPTOR, /端点描述符类型编号,端点描述符为 5MAIN_POINT_IN, /端点号,主输入端点ENDPOINT_TYPE_BULK, /使用的传输类型,批量传输0x4000, /该端点支持的最大包尺寸,64 字节0x00 /中断扫描时间,对批量传输无效,/主端点输出描述 sizeof(ENDPOINT_DESCRIPTOR_STRUCT), /端点描述符的字节数大小,这里为 7ENDPOINT_DESCRIPTOR, /端点描述符类型编号,端点描述符为 5MAIN_POINT_OUT, /端点号,主输出端点ENDPOINT_

29、TYPE_BULK, /使用的传输类型,批量传输0x4000, /该端点支持的最大包尺寸,64 字节0x00 /中断扫描时间,对批量传输无效;-其中关于端点的类型定义如下/定义的端点类型#define ENDPOINT_TYPE_CONTROL 0x00 /控制传输#define ENDPOINT_TYPE_ISOCHRONOUS 0x01 /同步传输#define ENDPOINT_TYPE_BULK 0x02 /批量传输#define ENDPOINT_TYPE_INTERRUPT 0x03 /中断传输/的定义如下#define MAIN_POINT_OUT 0x02 /2 号输出端点#define MAIN_POINT_IN 0x82 /2 号输入端点

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报