嵌入式系统中USB主机控制器的设计
过去USB仅应用于个人计算机,而在嵌入式系统领域的巨大潜力还没有开发出来,USB在嵌入式系统中的应用包括KVM开关、数码相机、PDA、打印机、机顶盒以及移动电话等。本文将介绍在嵌入式系统中应用USB时其主机控制器的设计。
本文引用地址://m.amcfsurvey.com/article/152226.htm嵌入式系统被定义为硬件和固件(独立的或作为更大型系统的一部分)通常带有某种操作系统,操作系统可以是Windows CE、VxWorks或其它由“自编代码”构成的更简单系统。根据这样的定义,可以认为任何带有处理器的电子装置均可以作为USB嵌入式主机。
嵌入式系统设计挑战
在基于PC的系统中,USB操作一般需要三种部件,分别是通常作为PCI子系统的主机控制器、USB堆栈以及USB类驱动器。
主机控制器是集成主板芯片组的一部分,USB堆栈则包含主板芯片及通用主机控制器接口(UCHI)和开放主机控制器接口(OHCI)驱动程序以及USB驱动程序(usbd.sys),在PC上实现USB需要上述领域的专门技术。
在嵌入式USB系统中,其主要组成部分与PC系统类似,如嵌入式主机控制器芯片、带OHCI堆栈的实时操作系统(RTOS)以及专用驱动程序。现有很多可供选择的主机控制器芯片,有些带有处理器,有些则是基于寄存器的,对器件的选择将影响到其下面两层。
很多公司都可提供RTOS,最好选择一个能配合在一起工作的处理器和RTOS,然后在其上添加应用代码。如果没有真正的RTOS,某些控制器则用一个“框架”,可在其上构造应用程序。我们后面将介绍这种框架以及如何在上面构建应用。
在PC上实现USB具有非常丰富的可用资源,包括高达512MB的存储器、20-60GB的硬盘以及2GHz或更快的微处理器。此外,多年来Windows、MAC OS以及Unix等操作系统也一直支持USB,而且世界上还有成千上万的工程师在设计基于PC的USB应用程序和设备驱动程序。而对嵌入式系统来说,通常只有不超过64K的存储器,以及运行于12MHz~33MHz的处理器,且没有硬盘。由于USB对嵌入式系统相对较新,因此可能只有为数不多的工程师拥有这方面的经验。
控制器与框架
下面我们以赛普拉斯EZ-Host为例介绍嵌入式系统USB控制器与框架结构。EZ-Host有两个“串行接口引擎”,每个引擎包含两个USB端口,因此无需使用额外硬件EZ-Host便可控制四个USB设备。
EZ-Host器件具有固件结构,可管理大多数USB主机的详细请求。该结构另一个特点是支持网络集线器。键盘/集线器组合在一起常常带来这样的问题,即它究竟是带有集线器的键盘还是带有键盘的集线器?答案应该是带有键盘的集线器。因此要了解集线器后面的键盘,还需要提供集线器支持。幸好,这里的框架代码包含了对集线器的支持。
EZ-Host框架包含所有实现USB主机功能所必需的固件,包括任务调度、设备枚举、带宽分配以及功率管理。另外应用程序作为固件的一部分,控制专用USB设备并将其数据传递给最终应用。
框架的核心是TD处理器。TD处理器的运行基于一种称为“任务描述器(TD)”的数据结构,使用其信息与USB硬件尤其是“串行接口引擎(SIE)”进行通信。需要注意的是每个SIE控制两个端口,而且每个SIE具有一个TD处理器。EZ-Host框架使用了多种数据结构实现其操作,这些结构包括TD和USB请求模块(URB)。
任务描述器是传递给硬件的数据结构,包含特定硬件接口(如SIE)和端口编号的数据字段、终点数、收发数据缓冲器长度、数据包ID编码以及URB结构指示器。
URB含有TD所需的逻辑信息,该逻辑信息包括USB设备缓冲器、安装软件包以及USB设备结构指示器。
进行USB事务处理时,URB带有事务处理分配及其装入的数据结构,而后URB提交给TD处理器,TD处理器再将URB加入TD列表。空闲时,TD处理器处理TD列表,安排传输时序,并将设定好的TD传送给EZ-Host硬件进行处理。
linux操作系统文章专题:linux操作系统详解(linux不再难懂)
评论