USB xHCI控制器使用总结 | 您所在的位置:网站首页 › 主板xhci › USB xHCI控制器使用总结 |
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 DelayDatasheet 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 Packetxhci_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 deviceecho 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 实验室设备网 版权所有 |