• 《精通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
  • 相关阅读:
    Redis未授权访问攻击过程与防范
    Redis安装
    Connection closing...Socket close. Connection closed by foreign host. Disconnected from remote host(centos6.9) at 14:59:05.
    windows远程xshell文件上传下载:
    Linux重置MySQL密码
    nginx rewrite 实现URL跳转
    Openstack 清除openstack网络与路由 (十七)
    创建 OpenStack云主机 (十五)
    OpenStack 存储服务 Cinder存储节点部署LVM (十四)
    OpenStack 存储服务 Cinder介绍和控制节点部署 (十三)
  • 原文地址:https://www.cnblogs.com/zygote/p/13733851.html
Copyright © 2020-2023  润新知