USB xHCI控制器使用总结 您所在的位置:网站首页 主板xhci USB xHCI控制器使用总结

USB xHCI控制器使用总结

2024-06-06 13:08| 来源: 网络整理| 查看: 265

USB xHCI控制器使用总结 1 Intel USB xHCI控制器1.1 驱动架构1.2 x86 OTG架构1.3 x86 xHCI Scheduler Async Delay1.4 Interrupt on Short Packet1.5 x86 USB DCI DbC调试技术1.6 reset USB device1.7 PIPE PHY数据线宽度 2 Bulk传输速度计算3 xHCI HS眼图调试3.1 EHCI眼图调试寄存器设置流程 3.2 xHCI每个port的4个寄存器3.3 xHCI HS眼图调试寄存器设置流程3.4 xHCI HS Roothub眼图测试patch 4 EMC测试4.1 出问题的RF频点4.2 EMC干扰后,USB设备断开走的代码路径4.3 寄存器判断 - xHCI 5 电源管理5.1 全局禁止运行时autosuspend5.2 xHCI autosuspend 6 ACPI6.1 iasl_win6.2 URLs 7 ARM xHCI7.1 MT2712 USB xHCI控制器7.2 qcom xHCI8 URLs9 Abbreviations reference

1 Intel USB xHCI控制器 1.1 驱动架构

xHCI控制器实际上有两个roothub,一个是roothub 2.0的,一个是roothub 3.0。因为xHCI的这个特性,在Linux内核里,如果发现了PCI或者PCIe总线上具有xHCI控制器,那么驱动会向USB Core子系统注册两个roothub控制器,一个是roothub 2.0,一个是roothub 3.0,代码参见xhci-pci.c中的xhci_pci_probe()函数。

UEFI中xHCI驱动没有使用中断方式,而是用的轮训方式。

xhci_get_endpoint_index() ep_index = (epnum * 2) + direction - 1 ep_index = 6 means ep3in

1.2 x86 OTG架构

寄存器地址:PCI_BAR0 + 80D8h xHCI和dwc3组成一个PCI多功能设备,xHCI的func号为0,dwc3的func号为1。由于PCI总线一般只有INTA#到INTD#的4个中断引脚,所以PCI多功能设备的func一般不会超过4个,但是共享中断除外。

/sys/bus/platform/drivers/intel_usb_dr_phy/intel_usb_dr_phy.0/mux_state

1.3 x86 xHCI Scheduler Async Delay

Datasheet 21.1 xHCI - including OTG MUX Registers 21.2 xHCI PCI Config Registers 21.3 DBC 21.4 DWC3 21.5 DWC3 21.6 xHCI Proprietary Registers 21.7 DWC3 PCI Config Registers 21.9 DWC3 PCI Config Registers

寄存器地址:PCI_BAR0 + 80D4h 在控制或者Bulk令牌传输之间插入延时,否则IN或者OUT令牌发送太快会导致ublox M8030全速设备丢包。

1.4 Interrupt on Short Packet

xhci_hcd WARN Event TRB for slot x ep y with no TDs queued http://billauer.co.il/blog/2019/11/xhci-controller-bug-warning/

https://lore.kernel.org/patchwork/patch/860018/ https://lkml.org/lkml/2016/1/5/1035

1.5 x86 USB DCI DbC调试技术

CONFIG_USB_XHCI_DBGCAP /sys/bus/pci/devices/0000:00:14.0/dbc

用于调试的USB 3.0 Debugging Cable的VBUS、DP和DM不连接,也就是pinout的1到3不连接,仅连接pinout的4到9。DbC软件工具是Intel System Studio。

Windows目标机需要打开调试功能,输入msconfig打开系统配置工具。在引导 - 高级选项下面:勾选调试,调试端口选择USB,USB目标名称随便写一个自己能记住的名字。将来Host和Target两端要靠这个名字进行匹配。

1.6 reset USB device

echo 0 > /sys/bus/usb/devices/whatever/authorized echo 1 > /sys/bus/usb/devices/whatever/authorized

1.7 PIPE PHY数据线宽度

USB 3.0 PIPE PHY(SerDes = PCIe Gen2)的数据线宽度是可以设置的,最大宽度分别是TX 32bit、RX 32bit,需要根据PIPE PHY的接口频率来设置数据线宽度。如果PIPE PHY运行在128MHz,那么TX和RX的数据线宽度都是32bit;如果PIPE PHY运行在256MHz,那么TX和RX的数据线宽度都是16bit。

USB 3.0 Gen1的速度5Gbps,是指TX和RX的速率都是5Gbps(128MHz * 4bytes或者256MHz * 2bytes)。 USB 3.0 Gen1的速度5Gbps(625MB/s),协议开销(overhead)占用了20%带宽,所以实际有效速度是500MB/s。 USB 3.0 TX或者RX的传输速率虽然是5Gbps,但实际上数字信号的方波频率是2.5GHz(传输2个bit对应一个方波)。

Intel平台xHCI的物理层名字是ModPHY(High Speed I/O Modular Physical Layer for Intel USB 3.0)。

2 Bulk传输速度计算 Full-speed 每个frame最大可以传输19个Bulk包,每个Bulk包最大是64 Bytes,所以其最大传输速率是:19 x 64 x 1000 = 1.16 MB/s。High-speed USB 2.0在每个微帧中最大可传输13个Bulk包,每个Bulk包最大是512 Bytes,而每个微帧长固定为125 μs,所以其最大传输速率为:13 x 512 x 8 x 1000 = 51 MB/s。Super-speed USB 3.0在每个微帧中最大可传输13个Bulk包,每个Bulk包最大是1024 Bytes,而每个微帧长固定为125 μs,所以其最大传输速率为:13 x 1024 x 8 x 1000 = 102 MB/s。 3 xHCI HS眼图调试 3.1 EHCI眼图调试寄存器设置流程

第一步:把寄存器USBCMD的bit4和bit5设成0 第二步:把寄存器USBCMD的bit0和bit6设成0 第三步:

对应的USB port的PORTSC,port suspend(bit7)设置成0然后把测试模式selector(取值范围:>0,


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有