新闻中心

EEPW首页>嵌入式系统>设计应用> Linux2.6环境下USB设备的驱动实现

Linux2.6环境下USB设备的驱动实现

作者: 时间:2010-04-09 来源:网络 收藏


3 UDC的设计与

控制器主要分为Gadget Driver接口模块、Gadget API函数模块、中断处理模块、数据结构定义、初始化模块、硬件读写模块等,各模块可以单独进行设计。

3.1 数据结构定义

根据Gadget API提供的数据结构,可以定义自己的数据结构(如数据结构otg_udc,端点数据结构otg_udc_ep等)来描述该控制器。

定义完特定的设备控制器的数据结构后,再进行相应的映射(static struct otg_ip_udcmemory),以便将具体的设备控制器、设备端点和Gadget的抽象数据结构联系起来。

3.2 Gadget Driver接口模块

UDC提供有usb_gadget_driver_register模块,该模块可实usb_gadget_register_driver等绑定函数的功能,以绑定UDC和Gadget Driver。

3.3 Gadget API函数模块

Linuxgadget driver API定义了一个通用的gadget driver的接口,利用gadget driver可通过API与底层controller driver进行通信。该API屏蔽了底层硬件的不同,故可使gadget driver只注重功能的,而尽量与硬件无关。其代码如下:



该模块主要Gadget API定义的函数功能,如结构体usb_ep_ops和usb_gadget_ops中的函数,以及usb_gadget_register_driver注册函数等。这些函数可供Gadget Driver调用。

3.4 中断处理模块

由于设备是被动的接受主机的控制,设备的所有行为都是基于设备中断的触发,因此,函数主要处理Reset中断、Resume中断、Suspend中断、EP0中断以及其他端口中断。

3.5 初始化模块

初始化主要是打开中断、打开并设置端点、设置最大总线转向时间(此时问即包间最大等待时间),还要设置最大缓冲区长度等。

3.6 硬件读写模块

和主机控制器驱动程序类似,设备控制器的读写方式分为PIO读写和DMA读写两种模式,读写内容也分为寄存器读写和端点缓冲区读写。在读写过程中,所有读写地址都必须是双字节对齐模式。

4 驱动测试结果

本文研究的HCD已经应用于实际的工程中,驱动测试的硬件如图4所示。



本系统的硬件平台是Realview EB,这是一个高度集成的开发板,其母板上的硬件资源包括:一个FPGA (Xilinx Virtex-II XC2V6000)、静态和动态内存、集成外围设备和两个用于Core Tiles连接的tile连接器。设计时可通过增加一个额外的Core Tile(ARM926EJS CORE)来创建一个微处理系统。Logic Tile(Xilinx XC2V6000)中包含有一块具有主机控制器功能的芯片otg_ip,otg_ip可通过片内总线AHB挂载在母板EB上。在该开发板上运行Linux系统时,可通过交叉编译调试将开发报与一台PC机相连,这样,调试信息就可以通过串口打印在该主机的终端上。otg_ip可通过ULPI接口连接PHY芯片,并与USB设备相连。

设备控制器驱动模块otg_ip_udc.ko和g_filestorage.ko成功加载后,再将其作为移动优盘插入电脑主机的USB接口,驱动即可成功识别。图5所示是内核打印的信息结果。



5 结束语

USB通用串行总线具有传输速率高、功耗低、可热插拔和发展快速等优点,而Linus操作系统则具有易于移植和裁减、内核小、效率高、原代码开放等特点,本文通过将其结合而给出的Linux下的USB设备驱动方法,可以快速地实现大容量的存储功能,实验表明:该系统的数据读写速度可以达到681 kB/s,而且效果良好。

上一页 1 2 下一页

评论


相关推荐

技术专区

关闭