《精通linux设备驱动程序开发》 第11章 USB 学习笔记

主要内容:

  • USB体系架构
  • Linux-USB子系统
  • 驱动程序的数据结构

1.USB体系架构

USBUniversal  Serial Bus,通用类串行总线)通信协议采用主从结构,实现主机控制器和外围设备的通信。

1.1 总线速度

USB传输的速度有3种,

低速USB,最原始的USB 1.0标准支持1.5M/s传输速率,

全速USBUSB 1.1标准支持12M/s传输速率

高速USB,当前主流USB 2.0标准,支持480M/s传输速率

1.2 主机控制器

USB主机控制器分为以下几种:
UHCIUniversal Host Controller Interface,通用主机控制器接口),Inter提出的标准;

OHCIOpen Host Controller Interface,开放主机控制器接口),康柏和微软提出的标准;

EHCIEnhanced 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

URBUSB Request BlockUSB请求块)是USB数据传输机制使用的核心数据结构。URBUSB协议使用,对应地,sk_buff供网络协议使用。

URBinclude/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  管道

管道包括以下几个部分:

端点地址;

数据传输方向;

数据传输模式(控制模式、中断模式、批量模式和等时模式)。

stay hungry, stay foolish
原文地址:https://www.cnblogs.com/zygote/p/13733851.html