本文所述内容适用于 UNISOC Platform Egineer,简要介绍了 USB 的软硬件架构和关键部件功能,列举了某些常见的 USB 客户问题和解决方案,并对客制化遇到的问题给出说明和修改方案,以便让客户能高效快速的使用 USB。
USB驱动程序框架:
1.硬件部分
首先从硬件角度来看,USB 包括三个部分: USB controller,USB PHY 和 USB Interface。
1) USB controller
USB controller 是 ASIC 逻辑实现的 USB 协议逻辑电路,固化在芯片内部,实现了 USB 协议处理。展锐平台目前支持支持三个不同的 USB Controller:DWC2,DWC3,MUSB。备注:MUSB 不支持 USB HUB,DWC2/DWC3 支持 USB HUB.
2) USB PHY
USB PHY 完成的 USB 信号的数模转换.展锐平台支持三个 USB PHY:Synopsys USB2.0 PHY SPRD USB2.0 PHYINTEL USB2.0 PHY
3) USB Interface
这部分主要指 USB 对外的接口,分为两种 Micro-B 和 Type-C 接口。 ① Type-C 接口与芯片相关,在芯片内有 Type-C Controller 实现 Type-C 协议。 ② Micro-B 接口不同于 Type-C,在芯片内部没有可依赖的逻辑电路,而是依赖 EIC检测电平的变化从而达到 USB Cable 插拔检测的目的。对于一款指定的芯片,USB controller 和 USB PHY 在芯片设计阶段就已固化,是不可以客制化的;但 USB interface 的实现依赖于产品 PCB 的设计,是可以客制化的
2.软件部分
软件 USB Framework 依赖硬件的 Component,USB Driver 也包含有三个不同模块:
1) UDC driver:这部分与 HW 的 USB controller 相关,直接驱动 USB controller.其包含 3 种不同的 UDC driver,分别是 DWC2/DWC3/MUSB,源代码对应的路径如下:
① DWC2: kernel/drivers/staging/sprd_usb
② MUSB: kernel/drivers/usb/musb
③ DWC3: kernel/drivers/usb/dwc3
2) USB PHY driver:USB PHY driver 统一放在 kernel/drivers/usb/phy 目录下
3) USB interface driver:Typec driver 统一放在 kernel/drivers/usb/phy 目录下。Micro-B 由于 HW 不存在独立的逻辑,没有单独路径,在每个 UDC driver 中都包含了 Micro-B source code。
4) USB Device tree
从软件角度来看,除了与 HW component 相关的 driver 外,将 USB driver 可变的参数统一放在 device tree 进行维护。以下就是 USB DT node:Kernel/arch/arm64/boot/dts/sprd/sharkl3.dtsi