您的位置:首页 > 其它

驱动那些事儿之三:usb系统大框架浅析

2014-05-23 22:08 344 查看
在今天,计算机和外围设备的连接用的最多的应该就是usb(universal serial bus 通用串行总线),usb支持热插拔,外围设备多种多样,驱动程序通用,被广泛用在消费电子领域,他很好的扩充了计算机的系统的功能。

1:usb的体系架构



(图1)

Usb通信主要采用主从结构,实现了主控制器与外围设备的通信,图1的上半图为pc的usb系统,也就是所说的主控制器部分,图1的下半图是嵌入式设备的usb系统,图中的soc内嵌了usb控制器,该控制器支持四条总线和三种操作模式。

l 总线1工作在主机模式下,通过usb收发器与A型usb接口连接,该A型接口可用来连接U盘,键盘等usb外围设备。

l 总线2也是工作在主机模式下,只不过它的usb收发器连接的是内嵌usb设备,如生物扫描器(biometric scanner),加密引擎(touch controller)和遥测卡(telemetry card).

l 总线3工作在设备模式下,通过usb收发器与B型usb接口相连,该B型接口与主机相连,在这种模式下,该嵌入式设备可以当U盘使用,同事也为主机提供了另一个存储分区,同pc相比,嵌入式设备(mp3和手机等)更可能作为usb的设备端,所以大部分嵌入式设备除了包含主机控制器之外,还包含有usb设备控制器(提供与pc主机相连的支持)。

l 总线4接的是OTG(On-The-Go)控制器,使用这种接口,即可以把外围设备连接到系统上,也可以把系统当作外围设备连接到主机上,与前三种总线不同,总线4的usb收发器是智能的,即可作为主机控制器也可作为设备控制器使用。



(图2)

图2分别给出了USB主机控制器(Host Controller左)和USB设备控制器(UDC 右)的层型结构图,linux系统中,usb驱动可以从两个角度去观察,一个角度是主机端,另一个角度是设备端。

在主机端的usb驱动中,usb驱动最底层的是usb主机控制器硬件(主要负责与cpu通信的),在其之上运行的是usb主机控制器驱动程序,主机控制器驱动上层为usb核心层(usb core),再上层是usb设备驱动层(这种外围设备的驱动程序,如U盘,键盘,鼠标等),因此主机端要实现的驱动是usb主机控制器驱动和usb设备驱动,前者控制插入其中的USB设备,后者控制USB设备如何和主机通信,usb核心(usb core)主要负责usb驱动管理和协议处理的主要工作。Usb核心非常重要,其功能有:通过定义一些数据结构,宏和功能函数,向上为设备驱动提供编程接口,向下为usb主机控制器驱动提供编程接口,通过全局变量维护整个系统的usb设备信息,完成设备热插拔控制,总线数据传输控制等。

在设备端的usb驱动中,usb设备驱动程序分为三层:USB 设备控制器(UDC)驱动程序,Gadget API 和Gadget驱动程序,UDC驱动程序之直接访问硬件,控制usb设备和主机之间的底层通信,向上层提供与硬件相关操作的回调函数,而Gadget API就是对UDC驱动程序回调函数的简单封装,与Gadget驱动程序进行通信,Gadget驱动程序具体控制USB设备功能的实现,使设备表现出“网络连接”,“打印机”,“USB Mass Storage”等特性,它使用Gadget API控制UDC实现上述功能,Gadget
API把下层的与硬件相关的UDC驱动程序和上层的Gadget驱动程序分开,使得Linux系统中编写USB设备驱动程序时能够把功能的实现和底层通信分离。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: