zoukankan      html  css  js  c++  java
  • 《精通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
  • 相关阅读:
    HDU 1269 迷宫城堡
    HDU 4771 Stealing Harry Potter's Precious
    HDU 4772 Zhuge Liang's Password
    HDU 1690 Bus System
    HDU 2112 HDU Today
    HDU 1385 Minimum Transport Cost
    HDU 1596 find the safest road
    HDU 2680 Choose the best route
    HDU 2066 一个人的旅行
    AssetBundle管理机制(下)
  • 原文地址:https://www.cnblogs.com/zygote/p/13733851.html
Copyright © 2011-2022 走看看