《精通linux设备驱动程序开发》 第11章 USB 学习笔记
主要内容:
- USB体系架构
- Linux-USB子系统
- 驱动程序的数据结构
1.USB体系架构
USB(Universal Serial Bus,通用类串行总线)通信协议采用主从结构,实现主机控制器和外围设备的通信。
1.1 总线速度
USB传输的速度有3种,
低速USB,最原始的USB 1.0标准支持1.5M/s传输速率,
全速USB,USB 1.1标准支持12M/s传输速率
高速USB,当前主流USB 2.0标准,支持480M/s传输速率
1.2 主机控制器
USB主机控制器分为以下几种:
UHCI(Universal Host Controller Interface,通用主机控制器接口),Inter提出的标准;
OHCI(Open Host Controller Interface,开放主机控制器接口),康柏和微软提出的标准;
EHCI(Enhanced Host Controller Interface,增强型主机控制器接口),支持高速的USB 2.0设备;
USB OTG控制器,在嵌入式微控制器领域较多;
1.3 传输模式
USB设备传输数据模式有4种:
控制传输模式,用来传送外设和主机之间的控制、状态、配置等信息;
批量传输模式,传输大量时延要求不高的数据;
中断传输模式,传输数据量小,但是对传输时延敏感,要求马上相应;
等时传输模式,传输实时数据,传输速率要预先可知;
1.4 寻址
USB设备里的每个可寻址单元称为端点,为每个端点分配的地址称作端点地址,每个端点地址都有预支相关的传输模式;
2. Linux-USB子系统
Linux-USB子系统架构包含以下几部分:
USB核心,由一些基础代码组成,包括结构体和函数定义,供HCD和客户驱动程序使用。
驱动不同主机控制器的HCD;
用于根集线器的hub驱动和一个内核辅助线程khubd;
用于USB客户设备的设备驱动程序;
USB文件系统usbfs;
3. 驱动程序的数据结构
3.1 usb_device结构体
Usb_device结构体在include/linux/usb.h文件中定义:
struct usb_device { /* ... */ enum usb_device_state state; enum usb_device_speed speed; /* ... */ struct usb_device *parent; /* ... */ struct usb_device_descriptor descriptor; struct usb_host_config *config; struct usb_host_config *actconfig; /* ... */ int maxchild; struct usb_device *children[USB_MAXCHILDREN]; /* ... */ };
3.2 URB
URB(USB Request Block,USB请求块)是USB数据传输机制使用的核心数据结构。URB供USB协议使用,对应地,sk_buff供网络协议使用。
URB在include/linux/usb.h文件定义。
struct urb { struct kref kref; /* ... */ struct usb_device *dev; unsigned int pipe; int status; unsigned int transfer_flags; void transfer_length; /* ... */ unsigned char *setup_packet; /* ... */ int interval; /* ... */ void *context; usb_complete_t complete; /* ... */ };
URB使用分3步:分配内存,初始化,提交。
3.3 管道
管道包括以下几个部分:
端点地址;
数据传输方向;
数据传输模式(控制模式、中断模式、批量模式和等时模式)。