Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1331363
  • 博文数量: 92
  • 博客积分: 10389
  • 博客等级: 上将
  • 技术积分: 1918
  • 用 户 组: 普通用户
  • 注册时间: 2006-08-10 16:13
文章存档

2014年(1)

2012年(15)

2009年(6)

2008年(37)

2007年(72)

2006年(54)

我的朋友

分类: LINUX

2006-09-18 16:38:38

1、即插即用(Plug-and-Play)

USB比较于其他传统接口的一个优势是即插即用的实现,即插即用(Plug-and-Play)也可以叫做热插拔(Hot Plugging)。对于用户来讲,第一次插入USB外设,自动或手动安装驱动程序,他就应该可以使用这个外设了,这是很友好的用户体验。如果操作系统提示你重新启动电脑,说明这个外设没有实现即插即用,从严格意义上来讲,这并不是一个USB的外设。如果告诉用户这是应该的,就是在欺骗用户。

对于微软来说,如果外设没有实现即插即用,就无法获得WHQL认证。而对于USB IF(USB 实现者论坛)来说,如果外设没有实现即插即用,就无法获得USB的认证,不能使用USB的标识。这个标识可以在USB的官方网站看到(本文的下面也有),由于在USB2.0规范发布之后,USB IF改变了原先的标识,有些制造商仍使用原先的标识,这其实也是在欺骗用户。

USB的外设有很多,其中有很多外设有相似的特性,这些外设被归为某一类,例如键盘、鼠标等为HID类,音响产品为Audio类,硬盘、CD-ROM、Flash 为 Mass Storage类。微软为一些常用类提供了类驱动程序,如果一个外设设计满足该类的规范,在第一次插入PC时,操作系统可以自动识别到,并且自动调用该类驱动程序,这就是所谓的自动安装。目前Windows能支持的类驱动程序只有HID、Audio和Mass Storage,除此之外制造商必须提供自己的驱动程序。很不幸,USB转串口的应用就属于这种情况,这就需要所谓的手动安装。手动安装有两种可能,一种是在第一次插入USB时,系统会提示用户安装驱动程序,用户可以根据弹出窗口的提示进行安装,这时可能需要用户做一些搜索,有些用户可能会觉得这样不太方便;所以另一种方法是提供一个安装程序,将所有有关的应用/驱动程序打包在一起,一次性安装完成。如果驱动程序没有获得WHQL认证,在安装过程中需要用户用鼠标点击一到二次“继续”和“完成”;而如果驱动程序获得WHQL认证,就无需这么麻烦,这也可称为安静安装(Silent Install)。

2、USB多串口协议(UMP)

在安装USB转串口设备时,用户发现会出现二个步骤,一个是在接口(并串口)下有一个USB设备,另一个就是USB多串口协议(UMP)。其实这是正确的,首先USB转串口的设备是用来模拟一个串口(COM),所以是一个虚拟的COM口;其次这是一个USB转串口的桥,它必须遵循USB多串口协议。

在外设的“设备描述器”(Device Description)中,这个设备是一个USB转串口的桥,每次外设接入时,操作系统会去读这个“设备描述器”来了解接入的是什么设备,并把它加入到“设备管理器”中(Device Manager)。这是第一步,之后操作系统知道这个外设是要实现一个虚拟的串口,所以在COM下会加上USB设备。

有一些应用中,只出现一个虚拟串口,而没有USB多串口协议。其实这是在驱动程序上作了手脚,屏蔽了很关键的第一步,没有向操作系统报告设备的属性。这样做看似简单了,但根本没有可能获得WHQL认证,也无法得到USB的认证。

3、500mA的总线供电模式

USB的规范中规定一个USB的根集线器(root hub)最多只能提供500mA的电流,这一方面是为了减轻PC机的负担,另一方面是保护USB的主控制器(Host Controller),目前USB主控制器往往集成在南桥中。理论上来讲,任何一个USB Hub应该使用一个电源开关来防止过电流,但目前至少有10%以上的主板没有使用电源开关或使用一些低性能的元器件以节省成本。

当外设需要多于500mA的电流时,就需要采用自供电模式了。这对于USB硬盘的应用是一个瓶颈,也是一个挑战。2.5英寸以上的硬盘本身就需要超过500mA,所以必须自供电,自供电可以使用电池,也可以使用稳压源,这对于移动设备来说都不是理想的方法。有一种折衷的方法是连接两个USB口,可以获得两倍的电流-1A。这是没有办法的办法,同样无法WHQL和USB认证。操作起来也很麻烦,必须先接上供电口,再接上设备口等等。

好消息是硬盘的尺寸越来越小型化,耗电越来越省。1.8、1.5、1英寸的硬盘已被广泛应用,性能越来越稳定,这些硬盘的耗电在300mA之内,如果USB控制芯片的耗电能控制在200mA之内,就可以真正实现由总线来供电。TI的TUSB6250就是业界第一片实现总线供电的USB2.0高速(480Mbps)转ATA/ATAPI的解决方案。

4、USB与ATA/ATAPI的冲突

USB转ATA/ATAPI桥的控制器存在一些内在的冲突,原因在于桥的两边都试图要控制桥本身,例如USB和ATA/ATAPI都向往桥发送数据或接收数据,可以把这称为竞争,这时候桥无法解决优先权的话,数据的传送就停了下来。更严重的是桥还无法把这种状况通知PC机和硬盘,PC机和硬盘仍然不断地尝试,却没有出错信息提示给用户,用户就会很困惑,不知道发生了什么情况。这时候除了关机重新启动电脑,别无他法。

USB的Mass Storage类规范共总结出13种不同的冲突,这些冲突从标准本身已无法解决,只能用硬件或软件的方法来解决。TI的TUSB6250就很好地处理和解决了这个难题,其实就是增加了对竞争的仲裁,解决了优先权的判断,在同一时间只允许一个控制逻辑来控制总线,不会发生总线的堵塞。

###################################################################
要启用 Linux USB 支持,首先进入"USB support"节并启用"Support for USB"选项(对应模块为usbcore.o)。尽管这个步骤相当直观明了,但接下来的 Linux USB 设置步骤则会让人感到糊涂。特别地,现在需要选择用于系统的正确 USB 主控制器驱动程序。选项是"EHCI" (对应模块为ehci-hcd.o)、"UHCI" (对应模块为usb-uhci.o)、"UHCI (alternate driver)"和"OHCI" (对应模块为usb-ohci.o)。这是许多人对 Linux 的 USB 开始感到困惑的地方。
要理解"EHCI"及其同类是什么,首先要知道每块支持插入 USB 设备的主板或 PCI 卡都需要有 USB 主控制器芯片组。这个特别的芯片组与插入系统的 USB 设备进行相互操作,并负责处理允许 USB 设备与系统其它部分通信所必需的所有低层次细节。
Linux USB 驱动程序有三种不同的 USB 主控制器选项是因为在主板和 PCI 卡上有三种不同类型的 USB 芯片。"EHCI"驱动程序设计成为实现新的高速 USB 2.0 协议的芯片提供支持。"OHCI"驱动程序用来为非 PC 系统上的(以及带有 SiS 和 ALi 芯片组的 PC 主板上的)USB 芯片提供支持。"UHCI"驱动程序用来为大多数其它 PC 主板(包括 Intel 和 Via)上的 USB 实现提供支持。只需选择与希望启用的 USB 支持的类型对应的"?HCI"驱动程序即可。如有疑惑,为保险起见,可以启用"EHCI"、"UHCI" (两者中任选一种,它们之间没有明显的区别)和"OHCI"。( 赵明注:根据文档,EHCI已经包含了UHCI和OHCI,但目前就我个人的测试,单独加EHCI是不行的,通常我的做法是根据主板类型加载UHCI或OHCI后,再加载EHCI这样才可以支持USB2.0设备)。
启用了"USB support"和适当的"?HCI"USB 主控制器驱动程序后,使 USB 启动并运行只需再进行几个步骤。应该启用"Preliminary USB device filesystem",然后确保启用所有特定于将与 Linux 一起使用的实际 USB 外围设备的驱动程序。例如,为了启用对 USB 控制器的支持,我启用了"USB Human Interface Device (full HID) support"。
阅读(2045) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~