• linux usb简介


    参考书:《linux device drivers》、《usb 2.0规范》 《usb3.1规范》《usb白皮书

    以linux为例来说明usb系统。

    先看一下usb蓝牙适配器的详细信息:

    $ lsusb | grep Cambridge
    Bus 001 Device 006: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
    $ sudo lsusb -s 001:006 -v
    [sudo] password for host:

    Bus 001 Device 006: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
    Device Descriptor:
      bLength                18
      bDescriptorType         1
      bcdUSB               2.00
      bDeviceClass          224 Wireless
      bDeviceSubClass         1 Radio Frequency
      bDeviceProtocol         1 Bluetooth
      bMaxPacketSize0        64
      idVendor           0x0a12 Cambridge Silicon Radio, Ltd
      idProduct          0x0001 Bluetooth Dongle (HCI mode)
      bcdDevice           88.91
      iManufacturer           0
      iProduct                2 CSR8510 A10
      iSerial                 0
      bNumConfigurations      1
      Configuration Descriptor:
        bLength                 9
        bDescriptorType         2
        wTotalLength          177
        bNumInterfaces          2
        bConfigurationValue     1
        iConfiguration          0
        bmAttributes         0xe0
          Self Powered
          Remote Wakeup
        MaxPower              100mA
        Interface Descriptor:
          bLength                 9
          bDescriptorType         4
          bInterfaceNumber        0
          bAlternateSetting       0
          bNumEndpoints           3
          bInterfaceClass       224 Wireless
          bInterfaceSubClass      1 Radio Frequency
          bInterfaceProtocol      1 Bluetooth
          iInterface              0
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x81  EP 1 IN
            bmAttributes            3
              Transfer Type            Interrupt
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0010  1x 16 bytes
            bInterval               1
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x02  EP 2 OUT
            bmAttributes            2
              Transfer Type            Bulk
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0040  1x 64 bytes
            bInterval               1
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x82  EP 2 IN
            bmAttributes            2
              Transfer Type            Bulk
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0040  1x 64 bytes
            bInterval               1
        Interface Descriptor:
          bLength                 9
          bDescriptorType         4
          bInterfaceNumber        1
          bAlternateSetting       0
          bNumEndpoints           2
          bInterfaceClass       224 Wireless
          bInterfaceSubClass      1 Radio Frequency
          bInterfaceProtocol      1 Bluetooth
          iInterface              0
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x03  EP 3 OUT
            bmAttributes            1
              Transfer Type            Isochronous
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0000  1x 0 bytes
            bInterval               1
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x83  EP 3 IN
            bmAttributes            1
              Transfer Type            Isochronous
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0000  1x 0 bytes
            bInterval               1
        Interface Descriptor:
          bLength                 9
          bDescriptorType         4
          bInterfaceNumber        1
          bAlternateSetting       1
          bNumEndpoints           2
          bInterfaceClass       224 Wireless
          bInterfaceSubClass      1 Radio Frequency
          bInterfaceProtocol      1 Bluetooth
          iInterface              0
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x03  EP 3 OUT
            bmAttributes            1
              Transfer Type            Isochronous
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0009  1x 9 bytes
            bInterval               1
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x83  EP 3 IN
            bmAttributes            1
              Transfer Type            Isochronous
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0009  1x 9 bytes
            bInterval               1
        Interface Descriptor:
          bLength                 9
          bDescriptorType         4
          bInterfaceNumber        1
          bAlternateSetting       2
          bNumEndpoints           2
          bInterfaceClass       224 Wireless
          bInterfaceSubClass      1 Radio Frequency
          bInterfaceProtocol      1 Bluetooth
          iInterface              0
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x03  EP 3 OUT
            bmAttributes            1
              Transfer Type            Isochronous
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0011  1x 17 bytes
            bInterval               1
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x83  EP 3 IN
            bmAttributes            1
              Transfer Type            Isochronous
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0011  1x 17 bytes
            bInterval               1
        Interface Descriptor:
          bLength                 9
          bDescriptorType         4
          bInterfaceNumber        1
          bAlternateSetting       3
          bNumEndpoints           2
          bInterfaceClass       224 Wireless
          bInterfaceSubClass      1 Radio Frequency
          bInterfaceProtocol      1 Bluetooth
          iInterface              0
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x03  EP 3 OUT
            bmAttributes            1
              Transfer Type            Isochronous
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0019  1x 25 bytes
            bInterval               1
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x83  EP 3 IN
            bmAttributes            1
              Transfer Type            Isochronous
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0019  1x 25 bytes
            bInterval               1
        Interface Descriptor:
          bLength                 9
          bDescriptorType         4
          bInterfaceNumber        1
          bAlternateSetting       4
          bNumEndpoints           2
          bInterfaceClass       224 Wireless
          bInterfaceSubClass      1 Radio Frequency
          bInterfaceProtocol      1 Bluetooth
          iInterface              0
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x03  EP 3 OUT
            bmAttributes            1
              Transfer Type            Isochronous
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0021  1x 33 bytes
            bInterval               1
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x83  EP 3 IN
            bmAttributes            1
              Transfer Type            Isochronous
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0021  1x 33 bytes
            bInterval               1
        Interface Descriptor:
          bLength                 9
          bDescriptorType         4
          bInterfaceNumber        1
          bAlternateSetting       5
          bNumEndpoints           2
          bInterfaceClass       224 Wireless
          bInterfaceSubClass      1 Radio Frequency
          bInterfaceProtocol      1 Bluetooth
          iInterface              0
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x03  EP 3 OUT
            bmAttributes            1
              Transfer Type            Isochronous
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0031  1x 49 bytes
            bInterval               1
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x83  EP 3 IN
            bmAttributes            1
              Transfer Type            Isochronous
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0031  1x 49 bytes
            bInterval               1
    Device Status:     0x0001
      Self Powered

    根据《linux device drivers》中的说明,一个设备可以有一个或者多个configuration(通常只有一个),

    一个configuration可以有一个或者多个interface,一个interface中可以有一个或者多个endpoint.

    上面的蓝牙适配器有1个configuration,这个configuration有7个interface,每个interface有2个或者3个endpoint.

    在linux驱动中usb设备驱动与interface相对应。

    usb之间最基本的通信是通过endpoint完成的,endpoint之间只能向一个方向发送数据(主机到设备(即OUT endpoint)或者设备到主机(即IN endpoint))。

    endpoint传输数据可以是下面四种类型之一:

    (1) control endpoint: 用于存取usb设备的不通部分,可以配置设备、向设备发命令或者获取设备状态信息。

    (2)interrupt endpoint: 主机向设备请求数据量较少时使用,例如键盘和鼠标

    (3)bulk endpoint:用于大量数据传送。 如果传送数据过大,则可能分成多个块传送

    (4)isochronous endpoint:可以传送大量数据,通常用于能处理数据丢失以及固定速率传送数据的设备。

    usb数据传输实际是通过packet来进行传输的,每个packet由SYNC(1个字节)、PID(1个字节)、CONTENT(不同PID可能有不同长度)和CRC(不同PID可能有不同长度)

    详细的packet定义可以查看usb规范。

    interface用于处理一种类型的usb连接,例如鼠标或者键盘等。前面的蓝牙适配器有多个interface,可以用来支持多个蓝牙设备。

    interface还可能有alternate setting, 可以用来选择不同的interface参数值。

    查看pci设备信息:

    $ lspci
    00:00.0 Host bridge: Intel Corporation 82G33/G31/P35/P31 Express DRAM Controller (rev 10)
    00:02.0 VGA compatible controller: Intel Corporation 82G33/G31 Express Integrated Graphics Controller (rev 10)
    00:1b.0 Audio device: Intel Corporation NM10/ICH7 Family High Definition Audio Controller (rev 01)
    00:1c.0 PCI bridge: Intel Corporation NM10/ICH7 Family PCI Express Port 1 (rev 01)
    00:1c.1 PCI bridge: Intel Corporation NM10/ICH7 Family PCI Express Port 2 (rev 01)
    00:1c.2 PCI bridge: Intel Corporation NM10/ICH7 Family PCI Express Port 3 (rev 01)
    00:1c.3 PCI bridge: Intel Corporation NM10/ICH7 Family PCI Express Port 4 (rev 01)
    00:1d.0 USB controller: Intel Corporation NM10/ICH7 Family USB UHCI Controller #1 (rev 01)
    00:1d.1 USB controller: Intel Corporation NM10/ICH7 Family USB UHCI Controller #2 (rev 01)
    00:1d.2 USB controller: Intel Corporation NM10/ICH7 Family USB UHCI Controller #3 (rev 01)
    00:1d.3 USB controller: Intel Corporation NM10/ICH7 Family USB UHCI Controller #4 (rev 01)
    00:1d.7 USB controller: Intel Corporation NM10/ICH7 Family USB2 EHCI Controller (rev 01)
    00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev e1)
    00:1f.0 ISA bridge: Intel Corporation 82801GB/GR (ICH7 Family) LPC Interface Bridge (rev 01)
    00:1f.1 IDE interface: Intel Corporation 82801G (ICH7 Family) IDE Controller (rev 01)
    00:1f.2 IDE interface: Intel Corporation NM10/ICH7 Family SATA Controller [IDE mode] (rev 01)
    00:1f.3 SMBus: Intel Corporation NM10/ICH7 Family SMBus Controller (rev 01)
    04:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8101E/RTL8102E PCI Express Fast Ethernet controller (rev 02)

    安装tree:

    sudo apt-get install tree

    查看sysfs中所有usb设备文件:

    $ tree /sys/bus/usb/devices/
    /sys/bus/usb/devices/
    ├── 1-0:1.0 -> ../../../devices/pci0000:00/0000:00:1d.7/usb1/1-0:1.0
    ├── 1-1 -> ../../../devices/pci0000:00/0000:00:1d.7/usb1/1-1
    ├── 1-1:1.0 -> ../../../devices/pci0000:00/0000:00:1d.7/usb1/1-1/1-1:1.0
    ├── 1-1.2 -> ../../../devices/pci0000:00/0000:00:1d.7/usb1/1-1/1-1.2
    ├── 1-1.2:1.0 -> ../../../devices/pci0000:00/0000:00:1d.7/usb1/1-1/1-1.2/1-1.2:1.0
    ├── 1-1.2:1.1 -> ../../../devices/pci0000:00/0000:00:1d.7/usb1/1-1/1-1.2/1-1.2:1.1
    ├── 1-1.3 -> ../../../devices/pci0000:00/0000:00:1d.7/usb1/1-1/1-1.3
    ├── 1-1.3:1.0 -> ../../../devices/pci0000:00/0000:00:1d.7/usb1/1-1/1-1.3/1-1.3:1.0
    ├── 1-1.3:1.1 -> ../../../devices/pci0000:00/0000:00:1d.7/usb1/1-1/1-1.3/1-1.3:1.1
    ├── 1-4 -> ../../../devices/pci0000:00/0000:00:1d.7/usb1/1-4
    ├── 1-4:1.0 -> ../../../devices/pci0000:00/0000:00:1d.7/usb1/1-4/1-4:1.0
    ├── 2-0:1.0 -> ../../../devices/pci0000:00/0000:00:1d.0/usb2/2-0:1.0
    ├── 2-2 -> ../../../devices/pci0000:00/0000:00:1d.0/usb2/2-2
    ├── 2-2:1.0 -> ../../../devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.0
    ├── 3-0:1.0 -> ../../../devices/pci0000:00/0000:00:1d.1/usb3/3-0:1.0
    ├── 3-1 -> ../../../devices/pci0000:00/0000:00:1d.1/usb3/3-1
    ├── 3-1:1.0 -> ../../../devices/pci0000:00/0000:00:1d.1/usb3/3-1/3-1:1.0
    ├── 4-0:1.0 -> ../../../devices/pci0000:00/0000:00:1d.2/usb4/4-0:1.0
    ├── 5-0:1.0 -> ../../../devices/pci0000:00/0000:00:1d.3/usb5/5-0:1.0
    ├── usb1 -> ../../../devices/pci0000:00/0000:00:1d.7/usb1
    ├── usb2 -> ../../../devices/pci0000:00/0000:00:1d.0/usb2
    ├── usb3 -> ../../../devices/pci0000:00/0000:00:1d.1/usb3
    ├── usb4 -> ../../../devices/pci0000:00/0000:00:1d.2/usb4
    └── usb5 -> ../../../devices/pci0000:00/0000:00:1d.3/usb5

    本机蓝牙适配器连接到usb集线器,usb集线器连接到pc的一个usb口上。并且usb集线器还连接了其他的一些设备。

    从上面的输出可以推测,1-1开头部分应该是usb集线器上连接的设备。

    /sys/devices/pci0000:00/0000:00:1d.7/usb1应该对应host controller设备,1-1对应struct usb_device.

    1-1.2表示蓝牙适配器所在hub口,1-1.2:1.0和1-1.2:1.1可能分别表示蓝牙适配器的接口。

     

    查看这两个接口的endpoint:

    $ ls -d /sys/devices/pci0000:00/0000:00:1d.7/usb1/1-1/1-1.2/1-1.2:1.0/ep*
    /sys/devices/pci0000:00/0000:00:1d.7/usb1/1-1/1-1.2/1-1.2:1.0/ep_02  /sys/devices/pci0000:00/0000:00:1d.7/usb1/1-1/1-1.2/1-1.2:1.0/ep_82
    /sys/devices/pci0000:00/0000:00:1d.7/usb1/1-1/1-1.2/1-1.2:1.0/ep_81

    $ ls -d /sys/devices/pci0000:00/0000:00:1d.7/usb1/1-1/1-1.2/1-1.2:1.1/ep*
    /sys/devices/pci0000:00/0000:00:1d.7/usb1/1-1/1-1.2/1-1.2:1.1/ep_03  /sys/devices/pci0000:00/0000:00:1d.7/usb1/1-1/1-1.2/1-1.2:1.1/ep_83

    1-1.2:1.0下有三个endpoint,对应与lsusb输出信息中的第一个interface中的3个endpoint.

    1-1.2:1.1下有两个endpoint,对应于lsusb输出信息中的其他interface中的2个endpoint。

    但是lsusb中总共有7个interface,最后6个interface只用一个interface就能表示,似乎看起来很奇怪。

    仔细看上面的输出信息可以知道,最后6个interface确实是一个interface,只是使用了alterate setting,其bAlternateSetting的值分别是0-5,其它组成部分的值一模一样。

  • 相关阅读:
    mysql时间日期的加、减
    IDEA 下的svn检出maven代码
    IDEA中如何显示和关闭工具栏、目录栏
    Idea集成使用SVN教程
    Python PEP8 代码规范常见问题及解决方法
    Word文档中手写签名操作说明
    19.名称空间和作用域
    18.函数的参数
    17.文件处理
    16.字符编码
  • 原文地址:https://www.cnblogs.com/qiaoqiao2003/p/3807541.html
Copyright © 2020-2023  润新知