精华内容
下载资源
问答
  • usbhub2.0万能驱动是一个驱动的usb驱动程序,基本匹配usb2.0hub系列的配件所需要安装的驱动,支持xp/win7/win8等操作系统,安装后可以让电脑快速的识别usbhub2.0设备,欢迎下载使用。什么是usb2.0USB...
  • 枚举 USB HUB 设备

    2017-08-11 18:55:57
    枚举所有的USB设备,多层枚举
  • USB Hub原理图

    2015-10-24 18:25:00
    USB 2.0 USB Hub原理图,外围物料精简。免晶体。
  • USB HUB芯片

    2014-12-01 10:15:32
    美国SMSC的USB HUB解决方案,功耗低,价格低,但是很好用。
  • USBhub芯片

    2018-06-02 18:10:24
    USB hub芯片,需要多USB设备连接的可以开发自己的USB hub
  • USB HUB FE1.1 数据手册

    2018-06-06 14:55:27
    USB扩展接口USB HUB FE1.1 芯片资料,网上不好找,大家可以看看
  • USB HUB 1转4

    2013-06-03 14:50:11
    TI的芯片 USB一转四 4-PORT HUB FOR THE UNIVERSAL SERIAL BUS WITH OPTIONAL SERIAL EEPROM INTERFACE Check for Samples: TUSB2046BI-Q1
  • GL850 4端口USBHUB板ALTIUM设计硬件原理图PCB工程文件,包括完整的原理图PCB文件,板子大小为85x40mm,2层板。可用Altium Designer(AD)软件打开或修改,已经制板验证使用,可作为你产品设计的参考。
  • 文件内包含了几个厂商的USB hub的电路原理图,同时也有在网上收集的。 文件内包含了几个厂商的USB hub的电路原理图,同时也有在网上收集的。
  • 于是决定做一个USB hub。参照一个genesys的方案做的。测试一下,效果还不错。 实物如图: 附件内容分享的是基于GL850G的USB HUB 的原理图和PCB源文件,原理图为orcad文件格式,pcb文件为pads2007格式。 同时包括我...
  • USB hubusb接口重映射:udev 规则

    千次阅读 2016-08-24 15:44:07
    hubusb接口重映射:udev 规则 你在开发的过程中是否会出现 USB端口号会发生变化。 例如: 机器人底盘与雷达都是 ttyUSB* .其序号与入的先后有关。 对于写好的launch每次修改对应接口是不是 很麻法,或者...

    USB hub 多usb接口重映射:udev 规则

    你在开发的过程中是否会出现 USB端口号会发生变化。 例如: 机器人底盘与雷达都是 ttyUSB* .其序号与接入的先后有关。 对于写好的launch每次修改对应接口是不是

    很麻法,或者每次得先插入一个再插另外一个。才能保证ttyUSB0 ttyUSB1. 但是如果你重启系统,说不定还是有问题出现。。

            ==》 不如将端口重映射到新的固定的名字,并且设置其权限为可读。 这样不管你的先后插入,符合对应id的硬件端口自动的映射到新定义的名字。  


    一. 单一的USB映射说明

      参见:http://blog.csdn.net/zyh821351004/article/details/41577105

    lsusb 命令查看所有usb端口信息。 

    [cpp]  view plain  copy
     
    print ? 在CODE上查看代码片 派生到我的代码片
    1. yhzhao@yhzhao:~$ lsusb   
    2. Bus 002 Device 002: ID 0bda:0411 Realtek Semiconductor Corp.   
    3. Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub  
    4. Bus 001 Device 004: ID 04f2:b48c Chicony Electronics Co., Ltd   
    5. Bus 001 Device 009: ID 046d:c31c Logitech, Inc. Keyboard K120  
    6. Bus 001 Device 010: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP210x UART Bridge / myAVR mySmartUSB light  
    7. Bus 001 Device 005: ID 0bda:5411 Realtek Semiconductor Corp.   
    8. Bus 001 Device 008: ID 24ae:1100    
    9. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub  
    [cpp]  view plain  copy
     print ? 在CODE上查看代码片 派生到我的代码片
    1. yhzhao@yhzhao:~$ lsusb   
    2. Bus 002 Device 002: ID 0bda:0411 Realtek Semiconductor Corp.   
    3. Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub  
    4. Bus 001 Device 004: ID 04f2:b48c Chicony Electronics Co., Ltd   
    5. Bus 001 Device 009: ID 046d:c31c Logitech, Inc. Keyboard K120  
    6. Bus 001 Device 010: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP210x UART Bridge / myAVR mySmartUSB light  
    7. Bus 001 Device 005: ID 0bda:5411 Realtek Semiconductor Corp.   
    8. Bus 001 Device 008: ID 24ae:1100    
    9. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub  
    udev的规则说明,可以参考博客说明:http://blog.csdn.net/cokewei/article/details/8281239

    简单说明:

    $kernel, %k:设备的内核设备名称,例如:sdacdrom

    ID  10c4:ea60     表示usb设备的ID(这个ID由芯片制造商设置,可以唯一表示该设备)
        10c4    usb_device_descriptor.idVendor
        ea60    usb_device_descriptor.idProduct
     

    依据这些信息,就可以简单的写udev规则了:rplidar.rules

    sudo gedit /etc/udev/rules.d/rplidar.rules

    [cpp]  view plain  copy
     
    print ? 在CODE上查看代码片 派生到我的代码片
    1. # set the udev rule , make the device_port be fixed by rplidar  
    2. #  
    3. KERNEL=="ttyUSB*", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE:="0777", SYMLINK+="rplidar"  
    [cpp]  view plain  copy
     print ? 在CODE上查看代码片 派生到我的代码片
    1. # set the udev rule , make the device_port be fixed by rplidar  
    2. #  
    3. KERNEL=="ttyUSB*", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE:="0777", SYMLINK+="rplidar"  


    创建生效后重新插拔USB。

    用下面的命令就可以查看对应的映射结果了。

    [cpp]  view plain  copy
     
    print ? 在CODE上查看代码片 派生到我的代码片
    1. yhzhao@yhzhao:~$ ls -l /dev |grep ttyUSB  
    2. lrwxrwxrwx  1 root   root             7 Apr 14 13:18 rplidar -> ttyUSB0  
    3. crwxrwxrwx  1 root   uucp      188,   0 Apr 14 13:18 ttyUSB0  
    4. yhzhao@yhzhao:~$   
    [cpp]  view plain  copy
     print ? 在CODE上查看代码片 派生到我的代码片
    1. yhzhao@yhzhao:~$ ls -l /dev |grep ttyUSB  
    2. lrwxrwxrwx  1 root   root             7 Apr 14 13:18 rplidar -> ttyUSB0  
    3. crwxrwxrwx  1 root   uucp      188,   0 Apr 14 13:18 ttyUSB0  
    4. yhzhao@yhzhao:~$   


    二. USB hub的多端口映射:

    同一个hub连接设备base和laser, 将其重映射换名称到  slamtec_base_  和  slamtec_laser_

    [cpp]  view plain  copy
     
    print ? 在CODE上查看代码片 派生到我的代码片
    1. yhzhao@yhzhao:~$ lsusb   
    2. Bus 002 Device 002: ID 0bda:0411 Realtek Semiconductor Corp.   
    3. Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub  
    4. Bus 001 Device 004: ID 04f2:b48c Chicony Electronics Co., Ltd   
    5. Bus 001 Device 009: ID 046d:c31c Logitech, Inc. Keyboard K120  
    6. Bus 001 Device 011: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP210x UART Bridge / myAVR mySmartUSB light  
    7. Bus 001 Device 012: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP210x UART Bridge / myAVR mySmartUSB light  
    8. Bus 001 Device 005: ID 0bda:5411 Realtek Semiconductor Corp.   
    9. Bus 001 Device 008: ID 24ae:1100    
    10. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub  
    [cpp]  view plain  copy
     print ? 在CODE上查看代码片 派生到我的代码片
    1. yhzhao@yhzhao:~$ lsusb   
    2. Bus 002 Device 002: ID 0bda:0411 Realtek Semiconductor Corp.   
    3. Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub  
    4. Bus 001 Device 004: ID 04f2:b48c Chicony Electronics Co., Ltd   
    5. Bus 001 Device 009: ID 046d:c31c Logitech, Inc. Keyboard K120  
    6. Bus 001 Device 011: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP210x UART Bridge / myAVR mySmartUSB light  
    7. Bus 001 Device 012: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP210x UART Bridge / myAVR mySmartUSB light  
    8. Bus 001 Device 005: ID 0bda:5411 Realtek Semiconductor Corp.   
    9. Bus 001 Device 008: ID 24ae:1100    
    10. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub  


    可以看到hub的信息,同时hub上连接了两个串口转USB的设备,并且两者硬件使用的是一样的, 一种是依据设备的device配合一起分别定义udev规则,同上。

    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

    现提供固定hub的每个端口的映射。

     udevadm info --attribute-walk --path=/sys/bus/usb-serial/devices/ttyUSB0

    说明参见: http://askubuntu.com/questions/49910/how-to-distinguish-between-identical-usb-to-serial-adapters


    可以找到hub端口的不同:

    [cpp]  view plain  copy
     
    print ? 在CODE上查看代码片 派生到我的代码片
    1. yhzhao@yhzhao:~$ udevadm info --attribute-walk --path=/sys/bus/usb-serial/devices/ttyUSB1  
    2.   
    3. Udevadm info starts with the device specified by the devpath and then  
    4. walks up the chain of parent devices. It prints for every device  
    5. found, all possible attributes in the udev rules key format.  
    6. A rule to match, can be composed by the attributes of the device  
    7. and the attributes from one single parent device.  
    8.   
    9.   looking at device '/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2.2/1-2.2:1.0/ttyUSB1':  
    10.     KERNEL=="ttyUSB1"  
    11.     SUBSYSTEM=="usb-serial"  
    12.     DRIVER=="cp210x"  
    13.     ATTR{port_number}=="0"  
    14.   
    15.   looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2.2/1-2.2:1.0':  
    16.     KERNELS=="1-2.2:1.0"  
    17.     SUBSYSTEMS=="usb"  
    18.     DRIVERS=="cp210x"  
    19.     ATTRS{bInterfaceClass}=="ff"  
    [cpp]  view plain  copy
     print ? 在CODE上查看代码片 派生到我的代码片
    1. yhzhao@yhzhao:~$ udevadm info --attribute-walk --path=/sys/bus/usb-serial/devices/ttyUSB1  
    2.   
    3. Udevadm info starts with the device specified by the devpath and then  
    4. walks up the chain of parent devices. It prints for every device  
    5. found, all possible attributes in the udev rules key format.  
    6. A rule to match, can be composed by the attributes of the device  
    7. and the attributes from one single parent device.  
    8.   
    9.   looking at device '/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2.2/1-2.2:1.0/ttyUSB1':  
    10.     KERNEL=="ttyUSB1"  
    11.     SUBSYSTEM=="usb-serial"  
    12.     DRIVER=="cp210x"  
    13.     ATTR{port_number}=="0"  
    14.   
    15.   looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2.2/1-2.2:1.0':  
    16.     KERNELS=="1-2.2:1.0"  
    17.     SUBSYSTEMS=="usb"  
    18.     DRIVERS=="cp210x"  
    19.     ATTRS{bInterfaceClass}=="ff"  


    [cpp]  view plain  copy
     
    print ? 在CODE上查看代码片 派生到我的代码片
    1. yhzhao@yhzhao:~$ udevadm info --attribute-walk --path=/sys/bus/usb-serial/devices/ttyUSB0  
    2.   
    3. Udevadm info starts with the device specified by the devpath and then  
    4. walks up the chain of parent devices. It prints for every device  
    5. found, all possible attributes in the udev rules key format.  
    6. A rule to match, can be composed by the attributes of the device  
    7. and the attributes from one single parent device.  
    8.   
    9.   looking at device '/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2.1/1-2.1:1.0/ttyUSB0':  
    10.     KERNEL=="ttyUSB0"  
    11.     SUBSYSTEM=="usb-serial"  
    12.     DRIVER=="cp210x"  
    13.     ATTR{port_number}=="0"  
    14.   
    15.   looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2.1/1-2.1:1.0':  
    16.     KERNELS=="1-2.1:1.0"  
    17.     SUBSYSTEMS=="usb"  
    18.     DRIVERS=="cp210x"  
    19.     ATTRS{bInterfaceClass}=="ff"  
    [cpp]  view plain  copy
     print ? 在CODE上查看代码片 派生到我的代码片
    1. yhzhao@yhzhao:~$ udevadm info --attribute-walk --path=/sys/bus/usb-serial/devices/ttyUSB0  
    2.   
    3. Udevadm info starts with the device specified by the devpath and then  
    4. walks up the chain of parent devices. It prints for every device  
    5. found, all possible attributes in the udev rules key format.  
    6. A rule to match, can be composed by the attributes of the device  
    7. and the attributes from one single parent device.  
    8.   
    9.   looking at device '/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2.1/1-2.1:1.0/ttyUSB0':  
    10.     KERNEL=="ttyUSB0"  
    11.     SUBSYSTEM=="usb-serial"  
    12.     DRIVER=="cp210x"  
    13.     ATTR{port_number}=="0"  
    14.   
    15.   looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2.1/1-2.1:1.0':  
    16.     KERNELS=="1-2.1:1.0"  
    17.     SUBSYSTEMS=="usb"  
    18.     DRIVERS=="cp210x"  
    19.     ATTRS{bInterfaceClass}=="ff"  



    #参考   http://askubuntu.com/questions/49910/how-to-distinguish-between-identical-usb-to-serial-adapters

    #lsusb  

    #udevadm info --attribute-walk --path=/sys/bus/usb-serial/devices/ttyUSB0

    [html]  view plain  copy
     
    print ? 在CODE上查看代码片 派生到我的代码片
    1.     SUBSYSTEMS=="usb"  
    2.     DRIVERS=="cp210x"  
    3.     ATTRS{bInterfaceClass}=="ff"  
    4.     ATTRS{bInterfaceSubClass}=="00"  
    5.     ATTRS{bInterfaceProtocol}=="00"  
    6.     ATTRS{bNumEndpoints}=="02"  
    7.     ATTRS{supports_autosuspend}=="1"  
    8.     ATTRS{bAlternateSetting}==" 0"  
    9.     ATTRS{bInterfaceNumber}=="00"  
    10.     ATTRS{interface}=="CP2102 USB to UART Bridge Controller"  
    11. KERNEL=="ttyUSB*", KERNELS=="1-2.1", MODE:="0777",SYMLINK+="slamtec_base_"  
    12. KERNEL=="ttyUSB*", KERNELS=="1-2.2", MODE:="0777",SYMLINK+="slamtec_laser_"  
    [html]  view plain  copy
     print ? 在CODE上查看代码片 派生到我的代码片
    1.     SUBSYSTEMS=="usb"  
    2.     DRIVERS=="cp210x"  
    3.     ATTRS{bInterfaceClass}=="ff"  
    4.     ATTRS{bInterfaceSubClass}=="00"  
    5.     ATTRS{bInterfaceProtocol}=="00"  
    6.     ATTRS{bNumEndpoints}=="02"  
    7.     ATTRS{supports_autosuspend}=="1"  
    8.     ATTRS{bAlternateSetting}==" 0"  
    9.     ATTRS{bInterfaceNumber}=="00"  
    10.     ATTRS{interface}=="CP2102 USB to UART Bridge Controller"  
    11. KERNEL=="ttyUSB*", KERNELS=="1-2.1", MODE:="0777",SYMLINK+="slamtec_base_"  
    12. KERNEL=="ttyUSB*", KERNELS=="1-2.2", MODE:="0777",SYMLINK+="slamtec_laser_"  

    重新拔插。可以看到:

    ls -l  /dev   

    [cpp]  view plain  copy
     
    print ? 在CODE上查看代码片 派生到我的代码片
    1. yhzhao@yhzhao:~$ ls -l /dev|grep ttyUSB  
    2. lrwxrwxrwx  1 root   root             7 Apr 14 13:45 rplidar -> ttyUSB1  
    3. lrwxrwxrwx  1 root   root             7 Apr 14 13:45 slamtec_base_ -> ttyUSB0  
    4. lrwxrwxrwx  1 root   root             7 Apr 14 13:45 slamtec_laser_ -> ttyUSB1  
    5. crwxrwxrwx  1 root   uucp      188,   0 Apr 14 13:45 ttyUSB0  
    6. crwxrwxrwx  1 root   dialout   188,   1 Apr 14 13:45 ttyUSB1  
    [cpp]  view plain  copy
     print ? 在CODE上查看代码片 派生到我的代码片
    1. yhzhao@yhzhao:~$ ls -l /dev|grep ttyUSB  
    2. lrwxrwxrwx  1 root   root             7 Apr 14 13:45 rplidar -> ttyUSB1  
    3. lrwxrwxrwx  1 root   root             7 Apr 14 13:45 slamtec_base_ -> ttyUSB0  
    4. lrwxrwxrwx  1 root   root             7 Apr 14 13:45 slamtec_laser_ -> ttyUSB1  
    5. crwxrwxrwx  1 root   uucp      188,   0 Apr 14 13:45 ttyUSB0  
    6. crwxrwxrwx  1 root   dialout   188,   1 Apr 14 13:45 ttyUSB1  





    参考:http://blog.csdn.net/zyh821351004/article/details/41577105

    展开全文
  • Linux usb hub 处理

    2021-05-16 13:57:34
    前言在前文中我们看过了usbhub的probe对于其初始化应该有了一定的了解,那在该文中我们来看usb hub守护程序。二. Hub守护程序话说前文中在kick_khubd中将khubd_wait唤醒,该工作队列在守护程序中被等待。不出什么...

    Linux usb hub处理

    谨以此文纪念过往的岁月

    一.前言

    在前文中我们看过了usb

    hub的probe对于其初始化应该有了一定的了解,那在该文中我们来看usb hub守护程序。

    二. Hub守护程序

    话说前文中在kick_khubd中将khubd_wait唤醒,该工作队列在守护程序中被等待。不出什么特殊情况的话,该守护进程将伴随系统一生。

    static int hub_thread(void *__unused)

    {

    set_freezable();

    do

    {

    hub_events();

    wait_event_freezable(khubd_wait,

    !list_empty(&hub_event_list)

    ||

    kthread_should_stop());

    }

    while (!kthread_should_stop() || !list_empty(&hub_event_list));

    return

    0;

    }

    Events的code如下,也许大家会很惊讶其巨大,不要怕,咱们一起看下去。不过最好是读者手头有源码还有source insight。

    static void hub_events(void)

    {

    struct

    list_head *tmp;

    struct

    usb_device *hdev;

    struct

    usb_interface *intf;

    struct

    usb_hub *hub;

    struct

    device *hub_dev;

    u16

    hubstatus;

    u16

    hubchange;

    u16

    portstatus;

    u16

    portchange;

    int

    i, ret;

    int

    connect_change;

    while

    (1) {

    spin_lock_irq(&hub_event_lock);--锁定event自旋锁

    if

    (list_empty(&hub_event_list)) {--如果事件链表为空跳出,继续等待。

    spin_unlock_irq(&hub_event_lock);

    break;

    }

    tmp

    = .next;

    list_del_init(tmp);--将tmp从中删除并且初始化

    hub

    = list_entry(tmp, struct usb_hub, event_list); --根据tmp获取hub,也许有人会疑惑上面都删除和初始化了,还能获得不?答案是能,因为该链表是从hub_event_list中删除并且初始化了,但是其地址还是不变的,所以还是能得到的。

    kref_get(&hub->kref);--增加hub计数

    spin_unlock_irq(&hub_event_lock);

    --解锁

    hdev

    = hub->hdev;

    hub_dev

    = hub->intfdev;

    intf

    = to_usb_interface(hub_dev);

    usb_lock_device(hdev);

    if

    (unlikely(hub->disconnected))

    goto

    loop;

    if

    (hdev->state == USB_STATE_NOTATTACHED) { --如果hub不在了,将所有的子断开,同时删除urb

    hub->error

    = -ENODEV;

    hub_quiesce(hub,

    HUB_DISCONNECT);

    goto

    loop;

    }

    ret

    = usb_autopm_get_interface(intf); --自动将hub唤醒

    if

    (ret) {

    goto

    loop;

    }

    if

    (hub->quiescing)--如果hub本身就是不活动的,什么也要做回吧。

    goto

    loop_autopm;

    if

    (hub->error) {--如果hub有错误。

    ret

    = usb_reset_device(hdev); --重新复位hub

    if

    (ret) {

    goto

    loop_autopm;

    }

    hub->nerrors

    = 0;

    hub->error

    = 0;

    }

    for

    (i = 1; i <= hub->descriptor->bNbrPorts; i++) { --处理端口状态改变

    if

    (test_bit(i, hub->busy_bits))--检测端口是否忙

    continue;

    connect_change

    = test_bit(i, hub->); -- change_bits会在hub第一次初始化时被赋值。而event_bits则在hub_irq中改变

    if

    (!test_and_clear_bit(i, hub->) &&!connect_change)—如果都没有改变,继续测试下一个端口。

    continue;

    ret = hub_port_status(hub, i,&portstatus,

    &portchange); --获取第i个端口的状态和改变寄存器,其具体说明在usb 2.0 spec 11.24.2.7中说明。其实也就是获得OHCI中第i个端口的HcRhPortStatus的寄存器值

    if

    (ret < 0)

    continue;

    if

    (portchange & USB_PORT_STAT_) { --是否有设备在该端口,存在则将

    clear_port_feature(hdev,

    i,);

    --将对应的portstatus的16位设置为1.关于其具体的含义在OHCI的section 7中说明

    connect_change

    = 1; --连接改变

    }

    if

    (portchange & USB_PORT_STAT_C_ENABLE) {

    if

    (!connect_change)

    clear_port_feature(hdev, i,USB_PORT_FEAT_C_ENABLE);

    if

    (!(portstatus & USB_PORT_STAT_ENABLE)&& !connect_change

    && hdev->children[i-1]) {

    connect_change

    = 1;

    }

    }

    if

    (portchange & USB_PORT_STAT_C_SUSPEND) {

    struct

    usb_device *udev;

    clear_port_feature(hdev,

    i,USB_PORT_FEAT_C_SUSPEND);

    udev

    = hdev->children[i-1];

    if

    (udev) {

    usb_lock_device(udev);

    ret

    = remote_wakeup(hdev->children[i-1]);

    usb_unlock_device(udev);

    if

    (ret < 0)

    connect_change

    = 1;

    }

    else {

    ret

    = -ENODEV;

    hub_port_disable(hub,

    i, 1);

    }

    }

    if

    (portchange & USB_PORT_STAT_C_OVERCURRENT) {

    clear_port_feature(hdev,

    i,USB_PORT_FEAT_C_OVER_CURRENT);

    hub_power_on(hub,

    true);

    }

    --关于上面的几个状态说明将在以后的学习中来看。

    if

    (portchange & USB_PORT_STAT_C_RESET) {

    clear_port_feature(hdev,

    i,USB_PORT_FEAT_C_RESET);

    }

    --在上面对port状态的种种检测后,终于到了port的真正处理的函数。

    if

    ()--处理port改变

    hub_port_connect_change(hub,

    i,portstatus, portchange);

    }

    if (test_and_clear_bit(0, hub->)

    == 0);

    else

    if (hub_hub_status(hub, &hubstatus, &hubchange) < 0)

    dev_err

    (hub_dev, "get_hub_status failed\n");

    else

    {

    if

    (hubchange & HUB_CHANGE_LOCAL_POWER) {

    clear_hub_feature(hdev,

    C_HUB_LOCAL_POWER);

    if

    (hubstatus & HUB_STATUS_LOCAL_POWER)

    hub->limited_power

    = 1;

    else

    hub->limited_power

    = 0;

    }

    if

    (hubchange & HUB_CHANGE_OVERCURRENT) {

    msleep(500);

    clear_hub_feature(hdev,

    C_HUB_OVER_CURRENT);

    hub_power_on(hub, true);

    }

    }

    loop_autopm:

    if

    (list_empty(&hub->event_list))

    usb_autopm_enable(intf);

    loop:

    usb_unlock_device(hdev);

    kref_put(&hub->kref,

    hub_release);

    }

    }

    在这之后就是具体的对某一个usb设备进行处理了,我们在这里就不说了。

    展开全文
  • usbhub原理图

    2017-09-14 10:04:41
    usbhub原理图。USB集线器是解决电脑USB口不够而设计。1个USB口扩展出4个。支持所有操作系统。电路简单,可以参考一下。容易DIY。无需固件。
  • USB HUB 4层板经典布局

    2018-06-14 17:28:14
    布局合理,也充分考虑了差分线的阻抗匹配等问题,很有参考价值
  • 一个USB HUB连接多个摄像头同时工作问题处理 如需转载请标明出处:http://blog.csdn.net/itas109 QQ技术交流群:129518033 目录 一个USB HUB连接多个摄像头同时工作问题处理 1.起源 2.问题 3.解决思路 ...

    一个USB HUB连接多个摄像头同时工作问题处理


    如需转载请标明出处:http://blog.csdn.net/itas109
    QQ技术交流群:129518033

    目录


    1.起源

    多个(免驱)USB摄像头连同一个USB HUB的同时进行图像处理。

    2.问题

    一种说法是单个USB控制最大传输理论上为70多MB,打个折扣约50MB的实际速度,而640*480的视频大约需要26MB,所以最多带两个。
    多摄像头一定能做,但是如何做网络上公开的经验很少。

    3.解决思路

    实验了一些代码,验证了真的只能同时显示两个摄像头的视频,但是好消息是一个USB HUB上连N个摄像头这些摄像头都是能够获取到视屏。所以,给出以下建议:

    假设一个USB HUB上连了A、B、C、D四个摄像头:

    1. 写个时间轮续,间隔多少秒后停下两个显示另两个。

    2.一个USB control 上最多连两个,那就多连几个USB control。(注意:有的电脑有很多的USB口但不见得有多个USB control)。

    3.PCI的USB扩展口,值得你拥有。

    4.据说高手可以写驱动解决这个问题

    注意:
    当只接两个摄像头时,也有可能无法正常工作,比如其中一个是高清摄像头,占用带宽很大,所以也无法同时工作。可以尝试降低分辨率等手段降低传输数据大小。


    Refrence:
    https://blog.csdn.net/machaoyayiyaho/article/details/42053895
    https://bbs.csdn.net/topics/392295632

    觉得文章对你有帮助,可以用微信扫描二维码捐赠给博主,谢谢!
    微信
    如需转载请标明出处:http://blog.csdn.net/itas109
    QQ技术交流群:129518033

    展开全文
  • FE2.1 ,USB HUB资料

    热门讨论 2014-07-21 15:05:31
    usb hub fe2.1 的资料,不仅仅是datasheet ,还包括参考原理图,可以直接参考使用,可不是百度文库里的烂资料
  • 该芯片是USB集线器芯片,具有USB 2.0的低功耗和低成本解决方案。 这里使用LQFP48封装,仅使用5个USB和4个USB-A。 母插座和一个端口,作为USB到串行端口。 CH340C 与CH340G相比,CH340C可以节省外部晶体振荡器并减小...
  • USB2514i USB HUB及其应用

    2021-02-01 04:09:23
    介绍了USB2514i的主要特性、内部结构和功能。采用USB2514i设计了一款具有1个USB上行端口、4个USB下行端口的工业级USB2.0 集线器,该集线器可支持USB2.0协议的USB设备的扩展,并给出了硬件电路和PCB设计。
  • USB HUB简述

    千次阅读 2021-03-23 16:01:19
    概述 hub,集线器,连接在host与device之间的一种用于usb接口扩展的usb设备。可以将一个usb上行接口扩展为多个下行接口,...在下行端口上,hub提供了设备入检测和设备移除检测的能力,并给下行端口供电。hub可单独

    概述

    在这里插入图片描述
    hub,集线器,连接在host与device之间的一种用于usb接口扩展的usb设备。可以将一个usb上行接口扩展为多个下行接口,使得一个host可以同时与多个device连接。

    一般来说,一块hub桥接芯片可扩展4个usb接口,而市面上的一拖七hub,其实使用了两块hub桥接芯片,其中一块hub桥接芯片的上行端口连接到另一块hub桥接芯片的下行端口。
    在这里插入图片描述
    hub的上行端口面向host,下行端口面向device。在下行端口上,hub提供了设备接入检测和设备移除检测的能力,并给下行端口供电。hub可单独使能各下行端口。不同的端口可工作在不同的速度(H/F/L)。

    数据传输

    在这里插入图片描述
    在这里插入图片描述
    host与hub之间使用的还是high speed bus,而hub与device之间使用的是full/low speed bus。

    host-hub间的数据流:
    在这里插入图片描述
    hub-device间的数据流:
    在这里插入图片描述
    需要注意的是,host与hub之间的IN数据流,在complete split阶段的data0之后,是没有handshake的,但hub与device之间还是有handshake的。

    SPLIT-分离传输

    分离传输仅在host和hub之间执行,通过分离传输,可以允许全速/低速设备连接到高速主机。

    分离传输对于device来说是透明的不可见的。

    分离传输:将一次完整的事务传输,拆分成两个事务传输。其出发点是高速传输和全速/低速传输的速度不相等,如果使用一次完整的事务来传输,势必会造成比较长的等待时间,从而降低了高速USB总线的利用率。通过将一次传输分成两次,将令牌(和数据)的传输与响应数据(和握手)的传输分开,这样可以在中间插入其他高速传输,从而提高总线的利用率

    在这里插入图片描述
    分离传输将一次完整的IN请求事务拆分为两次事务传输,分别为发送令牌包的SSPLIT事务传输、接收数据包的CSPLIT事务传输。
    在SSPLIT与CSPLIT之间,可以插入了一次其他device的IN请求。也就是说,分离传输允许在不超过最大响应时间的前提下,分离传输的两次事务之间可以适当插入其他的传输事务,提高总线利用率。

    1)SSPLIT-start split
    在这里插入图片描述
    PID:0~3 bit为包标识字段的包类型,4~7 bit为包类型字段的校验补码。
    在这里插入图片描述
    Hub address:支持指定的全速/低速设备的hub的设备地址,用于全速/低速事务。
    SC:start/complete,为0时表示SPLIT传输事务的SSPLIT。为1时,表示SPLIT传输事务的CSPLIT。
    Hub port:全速/低速事务所针对的目标中心的端口号,即对应hub的端口号。
    S:speed,此中断或控制事务的速度。S为1时,低速。S为0时,全速。
    E:在块传输、中断传输和控制传输中,无须传输方向,所以E置为“0”。对于同步传输,如果是IN传输则E=0,如果是OUT传输,则按下表进行选择。
    在这里插入图片描述
    ET:Endpoint type,当前端点的传输类型,不同值代表的如下。

    在这里插入图片描述
    CRC-5:循环冗余校验。

    2)CSPLIT-complete split

    在这里插入图片描述
    U字段:值固定为“0”,保留。其他字段同上。

    控制传输(SPLIT)

    SPLIT的控制传输事务根据数据流方向分为两种,OUT传输事务和IN传输事务。
    在这里插入图片描述
    SPLIT控制传输OUT事务示意:
    在这里插入图片描述
    SPLIT控制传输IN事务示意:
    在这里插入图片描述

    中断传输(SPLIT)

    在这里插入图片描述
    SPLIT中断传输事务示意:
    在这里插入图片描述
    host发送IN请求后,device没有准备好数据时,给host回复NAK。当device已经准备好数据,IN请求后,device上传数据给host,host接收后回复ACK。

    块传输(SPLIT)

    同步传输(SPLIT)

    展开全文
  • USB2.0 HUB原理图+PCB文件,一扩7口的USB 2.0 HUB,分享资源。
  • usb hub芯片GL850G详解

    2021-06-06 12:00:07
    它支援4个下游连接埠,可完全支援USB2.0/1.1规格,因此无论是与主机端或是与其他USB设备介面的传输连接(高速/全速/低速设备传输)皆能完 全相容。GL850G同时拥有过载保护功能,提供良好的EMI/ESD处理,亦提供self-...
  • Linux下的USB HUB驱动

    2021-05-16 18:43:05
    Linux下的USB HUB驱动[日期:2012-07-29]来源:Linux社区作者:zhengmeifu[字体:大 中 小]在这里,顺带提一下HUB的指示灯问题.Hub描述符的wHubCharacteristics的bit7来描述设备是否支持显示灯.为1表示在下游的连接...
  • 分类:LINUX谨以此文纪念过往的岁月一....hc是指usb的控制器,而hub是一种usb集线器,其本质还是一种usb设备,只不过这种usb设备有点特殊而已。一般的MCU都会自带一个usb hub,以s3c6410为例,其带有一个hub,该hub...
  • 原标题:巧用USB HUB扩展OTG端口 让手机平板更超能随着个人便携式电子产品的增长和的飞速发展,主机已不再局限于单纯的PC,可以是含有USB主控器的任何设备,如手机、平板等。在USB2.O规范中也增加了USB嵌入式设备的...
  • 8种机械键盘轴体对比本人程序员,要买一个...在/drivers/usb/core/hub.c中的hub_probe()函数添加以下代码:主要是通过pid和vid来进行过滤判断。1234567891011121314if (hdev->parent) {printk("busnum = %d, lev...
  • UsbHub_FE1.1s_Sch_Pcb(USB2.0Hub量产FE1.1s含原理图PCB图).rar 量产的电路图资料(含原理图PCB图),欢迎下载。
  • 多个USB摄像头使用USB HUB连接到电脑

    千次阅读 2019-08-21 21:01:57
    在使用opencv-python调用摄像头时,如果有2个以上的摄像头经过USB HUB连接电脑,程序会出现报错。代码中,能够使用cv2.VideoCapture()成功创建多个摄像头实例,但是在前一个摄像头调用完cap1.read()后,下一个摄像头...
  • 基于GL850集成电路USB HUB设计,简单的USB扩展接口设计。详细的原理图、PCB、库文件!适合初学者设计学习!2层!用AD 打开! 附件资料截图: 可能感兴趣的项目设计: 基于GL850G的USB 2.0 HUB(原理图、PCB源文件)
  • USBHub的4、7、10情怀USB Hub又称USB集线器,它使用星型拓扑结构可扩展出多个USB接口。USB Hub的核芯是主控芯片(又称桥接芯片),通过软硬件算法将PC身上的某个USB接口(上游端口)资源分配给USB Hub扩展出来的USB接口....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,076
精华内容 7,230
关键字:

usbhub再接usbhub