### LINUX_ARM下的USB驱动开发 #### 一、引言 USB(Universal Serial Bus)作为一种广泛应用的串行总线技术,在嵌入式系统中扮演着重要的角色。通常情况下,USB主机(HOST)负责控制所有的数据传输过程,而USB设备(DEVICE)则作为外设实现特定的功能。例如,数码相机就是一个典型的USB设备例子。在基于S3C2410芯片(ARM920T内核)的开发项目中,系统不仅需要具备USB主机功能,同时也需要支持USB设备的功能。该项目的操作系统版本为Linux 2.4.18,而S3C2410芯片本身支持USB 1.1标准下的主机和设备接口。因此,本文将详细介绍如何在S3C2410芯片上实现USB主机总线和USB设备总线驱动,并进一步探讨如何在USB设备总线上实现USB海量存储设备类的功能驱动。 #### 二、USB主机总线驱动 ##### 2.1 USB主机总线标准概述 USB协议并未明确规定软件和硬件之间的分界线。在主机端的发展过程中,形成了OHCI(Open Host Controller Interface)和UHCI(Universal Host Controller Interface)两种标准。OHCI是由Compaq等厂商提出的,主要用于便携式计算机;而UHCI则是由Intel开发的,主要用于台式机。 S3C2410芯片支持OHCI标准。OHCI定义了一系列连续的寄存器,作为硬件与软件交互的接口。虽然OHCI标准在软件实现上比较复杂,但Linux内核已经包含了OHCI机制的实现部分。对于S3C2410芯片而言,唯一需要对内核进行修改的地方就是指定S3C2410的OHCI寄存器基地址。 ##### 2.2 实现步骤 - **配置OHCI寄存器基地址**:根据S3C2410的数据手册,确定OHCI寄存器的物理地址,并将其映射到虚拟地址空间中。 - **初始化OHCI控制器**:通过设置寄存器来初始化OHCI控制器,使其能够正常工作。 - **加载Linux内核中的OHCI驱动**:通过修改内核配置或编译时加入OHCI驱动的支持,确保内核能够识别并使用OHCI控制器。 #### 三、USB设备总线驱动 ##### 3.1 USB设备总线标准概述 与标准的Linux内核不同,S3C2410芯片需要专门开发USB设备总线驱动。S3C2410的USB设备接口支持一个16字节的双向控制端点(0号端点)和四个64字节的双向批量(中断)传输端点。为了实现控制功能,提供了大量的寄存器。 这些寄存器可以分为以下几类: - **控制状态寄存器**:用于设定端点的各种属性,包括工作模式(批量还是中断)、是否采用DMA传输等。读取这类寄存器可以获取当前端点传输的各种状态。 - **中断设定寄存器**:用于设定中断使能、屏蔽和等待状态,也可以用来判断具体哪个端点发生了中断。 - **FIFO数据寄存器**:需要传输的数据将连续写入这些寄存器,实际上被保存在一个FIFO(先进先出)的缓冲区中。 ##### 3.2 实现步骤 - **配置寄存器基地址**:根据S3C2410的数据手册,确定USB设备控制器的寄存器物理地址,并将其映射到虚拟地址空间中。 - **初始化USB设备控制器**:通过设置寄存器来初始化USB设备控制器,使其能够正常工作。 - **实现控制端点**:0号端点用于控制操作,需要实现基本的命令响应,如设备描述符请求等。 - **实现批量(中断)传输端点**:对于其他端点,需要实现数据的发送和接收功能,包括中断处理和DMA传输。 #### 四、实现USB海量存储设备类的功能驱动 在实现了基础的USB设备总线驱动之后,接下来需要实现在USB设备总线上的功能驱动,即实现USB海量存储设备类的功能。这通常涉及到以下几个方面: - **设备描述符**:需要定义设备描述符,向主机报告设备的基本信息。 - **配置描述符**:定义设备配置描述符,说明设备的功能配置。 - **接口描述符**:定义接口描述符,说明设备提供的功能接口。 - **端点描述符**:定义端点描述符,说明数据传输的具体端点。 实现这些功能的主要步骤包括: - **编写描述符**:根据USB规范编写设备描述符、配置描述符、接口描述符和端点描述符。 - **响应命令**:实现对主机发送的命令的响应,包括GET_DESCRIPTOR、SET_ADDRESS等命令。 - **数据传输**:实现数据的发送和接收,包括控制传输和批量传输。 实现LINUX_ARM下的USB驱动开发需要深入理解USB协议和硬件接口的特点,通过合理的配置和编程,才能成功地开发出既符合标准又满足实际需求的USB驱动程序。
- 快乐的小鸟2012-08-11理论,不完整的资料
- typ_adam2012-03-08不建议大家下载。。。只是一个论文概貌。
- 韩楚风2012-09-23不是很实用,但是下载前好像看不到评论,晕
- 粉丝: 0
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助