Usb Hub代码分析

本文详细分析了USB Hub在host controller初始化过程中的操作,包括hub_probe函数的执行流程,涉及struct usb_hub的分配与初始化、hub_descriptor的获取、port状态管理、led_work工作队列、urb的分配与提交,以及电源管理和hub_thread线程的工作机制。
摘要由CSDN通过智能技术生成
Usb Hub代码分析
如需引用请注明出处:http://blog.csdn.net/zkami 作者:ZhengKui

在host controller初始化的时候一定会调用hub_probe进行初始化,至少对root hub初始化
hub_probe(struct usb_interface *intf, const struct usb_device_id *id) (hub.c)
此时struct usb_interface 和struct usb_device的数据已经在hc初始化的过程中得到
    -> hdev = interface_to_usbdev(intf);
       由struct usb_interface 得到usb_device, 中间通过struct device转换,
    然后:分配struct usb_hub, 并初始化hub->event_list和hub->leds
    -> INIT_DELAYED_WORK(&hub->leds, led_work);初始化led_work工作队列
       以后调用schedule_delayed_work()来唤醒led_work, 暂时不用led
    -> usb_get_intf(intf);
    -> usb_set_intfdata (intf, hub);让struct usb_hub和struct usb_interface关联
    -> hub_configure(hub, endpoint)
        ->get_hub_descriptor(hdev, hub->descriptor,sizeof(*hub->descriptor));
          得到hub->descriptor
            -> usb_control_msg(hdev, usb_rcvctrlpipe(hdev, 0),
                USB_REQ_GET_DESCRIPTOR, USB_DIR_IN | USB_RT_HUB,
                USB_DT_HUB << 8, 0, data, size,
                USB_CTRL_GET_TIMEOUT);
        对tt初始化, struct usb_tt用来匹配低速设备和高速hub.tt与hub相关与OHCI/EHCI无关
        这样一个port既能支持high也能支持full/low
        -> INIT_WORK (&hub->tt.kevent, hub_tt_kevent);
            -> hub_tt_kevent()
        -> usb_set_interface(hdev, 0, 1); high speed hub
        -> usb_get_status(hdev, USB_RECIP_DEVICE, 0, &hubstatus);
            -> usb_control_msg(dev, usb_rcvctrlpip
Dynamix 保留本作品所有权利. ALL RIGHTS RESERVED by DYNAMIX. 本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本设计是一款符合 USB 3.0 要求的,兼具有5V快速充电特性的一款超高速分线器。本设计从原理,布线,采购,制造均有本人亲自把关,用料考究,稳定性强。本人尊崇开源的思想,希望通过这样一个简单的设计,抛砖引玉,让国内的爱好者们在分享中学习,在学习中交流。这仅仅是个开始,我会在接下来的业余生活中带给大家更多更好的作品。 本设计经过两次迭代实物验证,除厂商不对外开放的OTP功能外完全实现TUSB8041其余各项功能。其功能主要包括: 实现 USB 3.0 集线器功能,向下兼容 USB 2.0 链路; 实现四个USB-A 母座 下行端口和一个USB-B 母座 上行端口以最高近似 5Gbps(SuperSpeed)的速率传输数据; 设备可以通过 5.5 外径 2.5 内径 DC 电源接口供电,供电电压为 9V~14V DC,所需适配器功率不低于 45W *; 在外部电源接口插入后,设备电源将自动从上行 Vbus 端口供电切换至外部独立供电; 设备属性可以通过外部 EEPROM 修改,提供默认配置二进制文件(*.bin); 在默认配置下,上行端口连接时,四个下行端口支持 CDP,DCP 协议最高2A@5V快速充电模式; 在默认配置下,上行端口未连接时,四个下行端口支持 ACP1/2,CDP,DCP 协议最高2A@5V快速充电模式; 下行四个端口采用独立限流开关控制,当任意一个下行端口输出电流超过 2A 时,PC端将会收到下游端口过流通知并可手动复位; 主芯片TUSB8041 pin-to-pin 兼容TUSB8041A,经过验证可以实现 USB 3.1 Gen1 标准。 本设计使用 Altium Designer 绘制原理图文件和 PCB 文件。PCB 经过样品生产后,手工焊接并调试。调试测试电压,电流,时钟频率等参数,并针对限流,过流,警告,快充等特性单独测试。同时,粗略对比高速 SSD 移动硬盘在大文件传输过程中直接连接 PC 与经过 HUB 连接 PC 时速度的变化,结果传输速度无明显差别**。 设计中根据 PCB 样品生产材料规格,使用 Si9000 计算差分阻抗。在 Layout 过程中,使用差分对工具布线,进行等长处理,使用 Shield 工具保护差分线,以获得最好的信号完整性。由于身边没有 TDR 和 VNA 等设备,无法进行详细测试。 在 PCB 文档中所有器件均含有 3D 外形,方便二次开发外壳。文件中附带一个简易外壳文件***。 本设计核心器件全部使用进口器件。主要芯片均选择德州仪器公司产品。该公司器件资料齐全,对独立开发者非常友好。接插件方面,选择引进较多的通用接插件。评估人员可以在要求高的场合使用进口接插件,在要求低的场合使用国产接插件,这样有利于控制成本。在测试过程中,主要使用 TE,Molex,CUI 和富士康的接插件,这几个生产商器件质量较好,寿命高。对于电解电容,采用高速数字电路中常用的松下POSCAP等高分子聚合物电容,提高整体电源质量。 本设计采用四层板材,顶层信号,中间层地和电源,底层低速信号。极大保证了电源和信号完整性。 本设计端口均有过流保护和静电保护,保证设备安全。 在设计中,参考了若干半导体生厂商关于 USB 3.0 的 Reference design ,USB 协会的 USB 3 Spec 还有一些网上版权不明晰的设计。 在本文档中,主要包括整个 1.2 版本 PCB project 文件。 其中,可以提取出 BOM,Gerber 等制造相关文件。后续所有文档的更新和维护将会在 Github 中呈现。 Github文件地址 PCB 文件中,含有板层设计文件。请根据板层厚度,挑选加工厂商。如需调整,使用 Si9000 重新计算后,更改差分对规则,对差分对重新 Layout 。 四层板打样,参考费用在200元/10片左右。 针对于高校学生,推荐在 TI.com 申请样片,本设计中 TI 芯片均可申请样片****。 本设计中包含相当多的冗余器件,请根据实际需求添加。 本设计只考虑到小量样品测试,并未经过产品化测试。其中存在很多可制造性问题亟待解决。 本说明中未尽事宜,请根据图纸自行揣摩。如有疑惑欢迎在文后跟帖或者在 Github 中提问,也可以 Email 联系我 miracle.jin.tong@gmail.com 或 15918107@hdu.edu.cn 。 本设计中存在的瑕疵与不足也欢迎批评指正。 *可以参考 TUSB8041 Datasheet 中寄存器定义,使用烧录器调整所需功能。在关闭若干快充功能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值