USB
芯片名称与内核版本
- 芯片名称:RK3576
- 内核版本:Linux-6.1
前言
本指南提供RK3576 USB模块的开发指南,目的是让开发者理解RK3576 USB控制器和PHY的硬件电路设计和软件DTS配置,以便根据产品的USB应用需求进行灵活设计和快速开发。本指南适用于技术支持工程师、软件开发工程师和硬件开发工程师。
1.RK3576 USB控制器和PHY简介
RK3576支持2个独立的USB 3.1 OTG控制器、2个独立的USB 2.0 PHY、1个USB 3.1/DP Combo PHY和1个USB 3.1/SATA/PCIe Combo PHY。详细特性请参考RK3576 TRM。
RK3576 USB 新增如下功能:
- OTG0/1支持MMU,允许USB控制器硬件访问超过4G的内存空间。
- OTG1支持CCI保证Cache一致性,OTG0不支持。
- OTG0 DP/DM支持与UART/JTAG复用,默认使能,需结合RK USB to DEBUG转接板使用。
Note:
- USB 3.1 Gen1物理层传输速率为5Gbps,USB 2.0物理层传输速率为480Mbps。
- USB 3.1/DP Combo PHY支持4 x lanes,可同时支持USB 3.1 + DP 2 x lanes。
- USB 3.1/SATA/PCIe Combo PHY在同一时刻只能支持一种工作模式,USB 3.1与SATA/PCIe接口互斥。
表1 RK3576 USB控制器和PHY的连接关系
USB接口名称(原理图) | USB控制器 | USB PHY |
---|---|---|
USB OTG0 | OTG0 (DWC3&xHCI) | USB3.1/DP ComboPHY + USB2.0 PHY0 |
USB OTG1 | OTG1 (DWC3&xHCI) | USB3.1/SATA/PCie ComboPHY1 + USB2.0 PHY1 |
RK3576 USB 控制器和芯片端 USB 传输数据的 pin 脚的对应关系如下表 2 所示。
表2 RK3576 USB控制器和USB pin脚的对应关系
USB控制器/Pin脚 | RK3576 USB data pin |
---|---|
USB 3.1 OTG0 | USB2_OTG0_DP/USB2_OTG0_DM, USB3_OTG0_SSRX1P/USB3_OTG0_SSRX1N, USB3_OTG0_SSTX1P/USB3_OTG0_SSTX1N, USB3_OTG0_SSRX2P/USB3_OTG0_SSRX2N, USB3_OTG0_SSTX2P/USB3_OTG0_SSTX2N |
USB 3.1 OTG1 | USB2_OTG1_DP/USB2_OTG1_DM, USB3_OTG1_SSTXP/USB3_OTG1_SSTXN, USB3_OTG1_SSRXP/USB3_OTG1_SSRXN |
RK3576 USB 控制器和 PHY 的内部连接关系,以及对应的常见 USB 物理接口如下图 1 所示 图1 RK3576 USB控制器和PHY的连接示意图
Note:
- RK3576 USB 支持的接口类型并不局限于图 1 所描述的 Type-C/A USB 接口类型,还可以支持所有 常见的 USB 接口,包括 Type-C USB 2.0/3.1,Type-A USB 2.0/3.1,Micro USB 2.0/3.1 等。为了 适配不同的 USB 电路设计和接口类型,Linux-6.1 内核 USB 驱动已经做了软件兼容,开发者只需要 根据产品的 USB 硬件电路,对 Linux USB DTS 进行正确配置,即可使能对应的 USB 接口功能。详 细的 USB DTS 配置方法,请参考 RK3576 USB DTS 配置。
- 特殊使用限制:OTG1/PCIe1/SATA1 控制器访问总线互斥,如果硬件电路设计上已使用了PCIe1或 者SATA1,则 OTG1 USB2 和 USB3 功能都无法使用。
2.RK3576 USB Config Map
RK3576 的 2 个独立的 USB 控制器可以支持如下图 2 ~ 4 所列出的配置方式构成不同的产品形态。 USB OTG0 可以支持 5 种硬件电路设计: Config0: Type-C0 USB3.1 OTG0 with DP function Config1: USB 2.0 OTG0 + DP 4 x Lane (Swap off) Config2: USB 2.0 OTG0 + DP 4 x Lane (Swap on) Config3: USB 3.1 OTG0 + DP 2 x Lane (Swap on) Config4: USB 3.1 OTG0 + DP 2 x Lane (Swap off) USB OTG1 支持的 2 种硬件电路设计: Config0: USB 2.0 only OTG1 Config1: USB 3.1 OTG1 如果要了解更详细的 USB 配置表,请参考 RK3576 SDK EVB 参考原理图章节 USB/DP Configure Map。 Note:
- USB 2.0/3.1 OTG1 都不能与 PCIe1/SATA1 同时使用
- USBDP Swap on/off 两种配置的 Lanes 对应关系如下: Swap off:Lane0/1/2/3 TxData mapping to Lane0/1/2/3_TXDP/N Swap on: Lane0/1/2/3 TxData mapping to Lane2/3/0/1_TXDP/N
图2 RK3576 USB Path Map
图3 RK3576 OTG0 USBDP Path Map
图4 RK3576 OTG1 MULTI PHY Path Map
3.RK3576 USB硬件电路设计
本章节主要说明 RK3576 USB 在实际应用中,可支持的各种硬件电路设计方案。RK3576可以支持的接口 如下:
- USB30/DP1.4 MULTI0
- USB30/PCIE2.0/SATA30 MULTI1
3.1 USB控制器供电及功耗管理
RK3576 USB 控制器的供电电源是 VD_LOGIC。同时,芯片内部有设计 USB 控制器专用的 power domain:USB3.1 OTG0 位于 PD_USB;USB3.1 OTG1 位于 PD_PHP。
在实际使用场景中,Linux USB 控制器驱动会根据 USB 接口的工作情况,基于 Linux PM Runtime 机 制,动态开关 USB 控制器的 PD,以降低 USB 控制器的功耗。而当系统进入二级待机时,为了达到最优 功耗的目的,软件会强制关闭 USB 控制器的所有 PD。因此,在实际产品的应用场景中,如果需要在二 级待机时,保持 USB 控制器的寄存器工作状态,则需要在 USB 控制器驱动中调用函数 device_init_wakeup ,避免二级待机时关闭 USB 控制器的 PD。
USB 控制器的功耗控制策略如下:
- 对于不使用的 USB 控制器,需要将对应的控制器 DTS 节点配置为 disabled;
- 对于内核已启用的 USB 控制器,内核 USB 驱动已经支持 USB 控制器 Auto suspend 功能 (当 USB HOST 接口不接任何外设时,控制器自动进入 suspend 低功耗状态),因此,开发者不需要对 USB 控制器的动态功耗管理进 行调试。
3.2 USB PHY供电及功耗管理
3.2.1 USB 2.0 PHY供电及功耗管理
RK3576 支持 2 个 独立的 USB 2.0 PHY。在芯片内部,所有 USB 2.0 PHY 都属于 VD_USBPHY,并且, 所有 USB 2.0 PHY 共用如下图 5 所示的 3 路外部供电电源。因此,在系统运行时,无法通过硬件断电和 关闭 PD 的简单方法,来降低 USB 2.0 PHY 的功耗。
需要注意的是,在实际电路中,USB 2.0 PHY 的供电电压值超过规定的最大值或者低于规定的最小值,可能会导致 USB 连接异常。
表 3 USB 2.0 PHY 供电电压要求
供电电源 | 最小 | 正常 | 最大 | Unit |
---|---|---|---|---|
USB2_OTG_DVDD_0V75 | 0.6975 | 0.75 | 0.825 | V |
USB2_OTG_AVDD_1V8 | 1.674 | 1.8 | 1.98 | V |
USB2_OTG_AVDD_3V3 | 3.069 | 3.3 | 3.63 | V |
USB 2.0 PHY 的功耗控制策略如下:
- 为了支持 Maskrom USB 下载固件的功能,必须保证 USB 2.0 PHY 的三路供电均正常;
- 系统上电后,所有 USB 2.0 PHY 默认处于 Normal mode,软件在 U-Boot SPL 阶段,配置 USB 2.0 PHY1/PHY2/PHY3 处于最低功耗 IDDQ mode(SDK 已经支持),在进入系统后,内核 USB 驱 动会根据应用需求,设置对应的 USB 2.0 PHY 退出 IDDQ mode;
- 对于内核已启用的 USB 2.0 PHY,内核 USB 2.0 PHY 驱动会自动对 PHY 进行动态功耗控制,当检 测到有设备插入时,自动设置 USB 2.0 PHY 处于 Normal mode,当检测到没有设备插入时,自动 设置 USB 2.0 PHY 处于 Suspend mode;
USB 2.0 PHY 处于不同工作模式的功耗数据如下表 4 所示
表 4 USB 2.0 PHY 功耗数据 (统计为单个 USB 2.0 PHY 的功耗)
供电电源 | 读写数据 | 动态休眠 | PHY disabled | 二级待机 | 单位 |
---|---|---|---|---|---|
USB20_DVDD_0V75 | 8.9mA | 2.8mA | 0.05mA | 0mA | mA |
USB20_AVDD_1V8 | 8.6mA | 3.34mA | 0.05mA | 0mA | mA |
USB20_AVDD_3V3 | 2.5mA | 0.14mA | 0.05mA | 0mA | mA |
Note:
- 读写数据功耗的测试场景:接 U2 盘拷贝数据,PHY 处于 Normal mode;
- 动态休眠功耗的测试场景:USB 2.0 PHY 的 DTS enable,但不接 USB 外设,PHY 处于 Suspend mode;
- PHY disabled 功耗的测试场景:USB 2.0 PHY 的 DTS diabled,PHY 处于 IDDQ mode;
- 二级待机功耗的测试场景:USB 2.0 PHY 的三路供电电源全部关闭;
3.2.2 USB 3.1 PHY供电及功耗管理
RK3576 支持两种 USB 3.1 Combo PHY:
- USB 3.1/DP Combo PHY
- USB 3.1/PCIe/SATA Combo PHY 这两种 USB 3.1 Combo PHY 对应的供电电源和功耗控制方式都 不一样,下面分别进行说明。
3.2.2.1 USB 3.1/DP Combo PHY
RK3576 USB3.1 OTG0 使用 USB 3.1/DP Combo PHY 。在芯片内部,USB 3.1/DP Combo PHY 属于 VD_USBDPPHY (Alive),在芯片外部有两路独立供电电源,如下图 6 所示。
图 6 RK3576 USBDP Combo PHY 供电电源
表 5 USB 3.1/DP Combo PHY 供电电压要求
供电电源 | 最小 | 正常 | 最大 | Unit |
---|---|---|---|---|
VDD_0V85/VDDA_0V85 | 0.8075 | 0.85 | 0.8925 | V |
VDDH_1V8 | 1.71 | 1.8 | 1.89 | V |
USB 3.1/DP Combo PHY 的功耗控制策略如下:
- 系统上电后,USBDP PHY 处于未初始化状态时,功耗最低;
- 在支持 USBDP 的应用场景,内核 USBDP PHY 驱动会自动对 PHY 进行动态功耗控制,当检测到有 设备插入时,自动设置 USBDP PHY 处于 P0 State,当检测到没有设备插入时,自动设置 USBDP PHY 处于 P3 State (应用于 Type-A 接口)或者处于 reset state (应用于 Type-C 接口);
- 对于不使用的 USBDP 的应用场景(即 USB3.1 和 DP 都不使用),USBDP PHY 的供电电源可以根 据项目需求选择正常供电或者断电两种电路设计,具体说明如下: (1) 如果要支持 USB3.1 下载固件的功能,则要求 USBDP PHY 的供电电源必须正常供电; (2) 如果不需要支持 USB3.1 下载固件的功能,则建议 USBDP PHY 的供电电源进行外部断电处理, 但 DTS 要修改配置,具体请参考USB PHY 不供电的 DTS 配置; (3) 如果不需要支持 USB3.1 下载固件的功能,且 USBDP PHY 的供电电源正常供电,则建议将 USBDP PHY DTS 节点配置为 disabled,也即让 PHY 处于上电且未初始化状态,功耗最低;
表 6 USB 3.1/DP Combo PHY 功耗数据
供电电源 | 读写数据 | 动态休眠 | PHY disabled | 二级待机 | 单位 |
---|---|---|---|---|---|
VDD_0V85/VDDA_0V85 | 101.6mA | 5mA | 2mA | 0mA | mA |
VDDH_1V8 | 29mA | 0mA | 0mA | 0mA | mA |
Note: |
- 读写数据功耗的测试场景:接 U3 盘拷贝数据,PHY 处于 P0 state;
- 动态休眠功耗的测试场景:Type-C 接口,不接 USB 外设,PHY 处于 reset state;
- PHY disabled 功耗的测试场景:PHY 的 DTS 节点配置为 disabled,PHY 处于未初始化状态,此状 态下,功耗最低;
- 二级待机功耗的测试场景:PHY 的两路供电电源全部关闭;
内核 disable USBDP PHY 的方法如下:
&usbdp_phy {
status = "disabled";
};
&usbdp_phy_dp {
status = "disabled";
};
&usbdp_phy_u3 {
status = "disabled";
};
3.2.2.2 USB 3.1/PCIe/SATA Combo PHY
RK3576 USB3.1 OTG1使用 USB3.1/PCIe/SATA Combo PHY1。在芯片内部,这个 PHY 属于 PD_BUS (Alive),在芯片外部有两路独立供电电源,如图 7 所示。
图 7 RK3576 USB 3.1/PCIe/SATA Combo PHY 供电电源
表 7 USB 3.1/PCIe/SATA Combo PHY 供电电压要求
供电电源 | 最小 | 正常 | 最大 | Unit |
---|---|---|---|---|
AVDD_0V85 | 0.8 | 0.85 | 0.935 | V |
AVDD_1V8 | 1.62 | 1.8 | 1.98 | V |
USB 3.1/PCIe/SATA Combo PHY 的功耗控制策略如下:
- 芯片上电时,USB 3.1/PCIe/SATA Combo PHY 默认处于工作状态。软件在 U-Boot SPL 阶段,设 置 PHY 处于 reset state,以保持 PHY 处于最低功耗。进入内核后,USB 控制器驱动会通过调用 rockchip_combphy_init() 函数释放 PHY 的 reset。
- PHY 的动态功耗控制:当 Combo PHY 工作在 USB mode 时,PHY 的 PIPE state (P0/P1/P2/P3) 由 USB 控制器硬件自动控制,根据不同的工作场景,动态进入和退出 P0/P1/P2/P3 state。比如, 未插入任何 USB 设备时,PIPE 处于 P3 state;插入 U3 disk 时,则切换到 P0 state;当接 U3 HUB 时,只要 HUB 的下行端口没有接其他 USB 外设,则 PIPE state 会自动进入 P3 state 低功 耗。当有 USB 外设插入U3 HUB,则 PIPE state 自动切换为 P0。(注:P0 为正常工作状态,P3 为 最低功耗状态)
- 当明确不使用 USB 3.1 OTG1/PCIe/SATA 接口时,对应的 Combo PHY 可以不供电,但 DTS 要修改 配置,具体请参考USB PHY 不供电的 DTS 配置;
- 在 PHY 供电的情况下,如果不使用这个PHY,需要将对应的 PHY DTS 节点配置为 disabled,也即 让 PHY 处于 reset state,功耗最低;
表 8 USB 3.1/SATA/PCIe Combo PHY 功耗数据
供电电源 | 读写数据 | 动态休眠 | PHY disabled | 二级待机 | 单位 |
---|---|---|---|---|---|
AVDD_0V85 | 44.5mA | 9.6mA | 0.4mA | 0mA | mA |
AVDD_1V8 | 5.2mA | 0.5mA | 0.2mA | 0mA | mA |
Note: |
- 读写数据功耗的测试场景:接 U3 盘拷贝数据,PHY 处于 P0 state;
- 动态休眠的测试场景:PHY DTS enable,但不接 USB 外设,PHY 处于 P3 State;
- PHY disabled 的测试场景:PHY 的 DTS 节点配置为 disabled,PHY 处于 reset state;
- 二级待机功耗的测试场景:PHY 的两路供电电源全部关闭。 内核 disable USB 3.1/PCIe/SATA Combo PHY 的方法如下:
&combphy1_psu {
status = "disabled";
};
3.3 USB硬件电路设计
3.3.1 USB2_OTG0_VBUSDET电路设计
USB2_OTG0_VBUSDET 用于 USB 作为 Device 时,设备的连接、断开检测。其设计注意点如下:
- 设计为支持 PD 功能的 Type-C 接口,即支持外置 Type-C 控制器芯片(FUSB302 或 HUSB311 等),则参考 RK3576 EVB1 Type-C 的电路设计即可( USB2_OTG0_VBUSDET 固定上拉到 VCC_3V3_S0),软件驱动可以通过 Type-C 控制器芯片的 CC 检测 USB Device 的连接和断开;
- 对于其他没有支持外置 Type-C 控制器芯片的电路设计方案(如Type-C USB 2.0 only,Type-A USB 3.1,Micro USB 2.0/3.1),要求 USB2_OTG0_VBUSDET 仍然按照传统的分压电路设计,连接到 USB 接口的 VBUS 引脚,VBUSDET 不作常供电的设计(如果有作 USB HOST 的需求,需要独立的 GPIO 或者 PMIC VBUS 控制,不与其他 USB HOST VBUS控制电路复用);
- 要求芯片输入端 USB2_OTG0_VBUSDET 的高电平范围在
[0.9V ~ 3.3V]
;
3.3.2 Maskrom USB电路设计
Maskrom 支持 USB3.1 下载固件,同时向下兼容 USB2.0 下载固件。硬件设计要求如下:
- USB 2.0 PHY 相关电源必须供电,具体请参考USB 2.0 PHY 供电及功耗管理;
- USBDP PHY 相关电源,可以根据实际项目需求选择正常供电或者断电两种电路设计,具体请参考 USB 3.1 PHY 供电及功耗管理; 如果要支持 USB3.1 下载固件,要求 USBDP PHY 相关电源必须供电,并且 USB3_OTG0_TX1/RX1 连接到 USB 下载口。
- Maskrom USB 枚举不依赖于 USB2_OTG0_VBUSDET 的电平;
- 烧写工具配置说明 (1) USB 3.1 下载固件的功能,必须 配合 Windows 工具 v3.28 或者 Linux 工具 v2.30 或者更新的版 本使用,并手动修改烧写工具的 config.ini Windows 工具的 config.ini 修改:USB3_TRANSFER=TRUE Linux 工具的 config.ini 修改:usb3_transfer_on=true
(2) 硬件电路设计上,如果只支持 OTG0 USB2 only 且 USBDP PHY 未供电 (即 USB3_OTG0_DP_TX_AVDD0V85、USB3_OTG0_DP_TX_DVDD0V85、 USB3_OTG0_DP_TX_AVDD1V8 这三路未供电),则需要关闭烧写工具的 USB3 功能,否则会导致 Maskrom下载固件失败。
3.3.3 USB2支持唤醒系统的电路设计
USB2 支持通过 DP/DM 唤醒系统,该功能对二级待机时的供电有特殊要求,具体如下:
- USB2 PHY 的三路外部电源(USB2_OTG_DVDD_0V75、USB2_OTG_AVDD_1V8、USB2_OTG_AVDD_3V3)要保持供电;
- USB 接口的 VBUS 保持对 USB 外设供电;
- RK3576 的 OSC 外部电源(OSC_AVDD1V8)保持供电;
- RK3576 的 PMU 外部电源保持供电;
- RK3576 的 Logic 外部电源可以选择供电或者断电。建议 Logic 断电,以降低二级待机功耗。
3.3.4 Type-C USB 3.1/DP全功能硬件电路
以 RK3576 EVB1 USB 3.1 OTG0 Type-C 硬件电路设计为例。
- Type-C 电路须配合外置的 Type-C 控制器芯片,才能实现 Type-C 的完整功能(包括:正反面检 测、PD充电协商、Alternate Mode 协商)。RK3576 可支持大部分常用的 Type-C 控制器芯片,具 体请参考Type-C 控制器芯片支持列表;
- 为了支持高压充电功能,同时降低硬件电路的风险,USB2_OTG0_VBUSDET 不要连接 Type-C 接口 的 VBUS,固定上拉到 3.3V 即可(如图 8 和图 9 USB2_OTG0_VBUSDET 连接到 VCC_3V3_S0),但 不能悬空;
- USB2_OTG0_ID 只用于 Micro 接口类型的 OTG 功能,Type-C 电路不需要使用,悬空即可。
- TYPEC_SBU1/TYPEC0_SBU2 只用于 DP Alternate Mode 的 AUX 通信。按照 AUX 的协议要求,需 要根据 Type-C 插入的正反面,对 SBU1/SBU2 进行相应的电平上拉操作。 因为 RK3576 芯片内部 没有实现 SBU1/SBU2 的自动上拉,所以要求硬件外部电路增加两个 GPIO 控制(对应图 9 中的 TYPEC_SBU1/TYPEC_SBU2)。对 GPIO 的默认上下拉方式没要求,可以选择任意的 GPIO。软件 上,需要修改 usbdp_phy 节点的属性 sbu1-dc-gpios 和 sbu2-dc-gpios 进行适配;
- Type-C USB DTS 的软件配置,请参考 Type-C USB 3.1/DP 全功能 DTS 配置;
图8 RK3576 Type-C电路
图9 RK3576 Type-C接口
图10 RK3576 Type-C VBUS控制电路
3.3.5 Type-C to Type-A USB 3.1/DP硬件电路
该方案适用于 RK3576 USB 3.1 OTG0 Type-C 可以拆分为独立的 Type-A USB 3.1 接口和 DP(2 x Lane)接口使用。以 RK3576 EVB2 Type-C to Type-A USB 3.1/DP 硬件电路设计为例。
- Type-A USB 3.1 使用 USB3_OTG0_SSRX1P/N 和 USB3_OTG0_SSTX1P/N (对应芯片内部 USBDP PHY 的 lane0/1),而 DP 使用 DP_TX_D2P/N 和 DP_TX_D3P/N (对应芯片内部 USBDP PHY 的 lane2/3);
- 如果 USB OTG 有作 Device/HOST 的应用场景,建议 USB2_OTG0_VBUSDET 通过 30KΩ 的电阻串联到 Type-A USB 接口的 VBUS;
- Type-A VBUS 的供电电源 (VCC5V0_USB30_HOST0) 由 GPIO 控制,当 OTG 作 Device mode,关闭 VBUS 输出。当 OTG 作 HOST mode,打开 VBUS 输出。此外,稳压芯片 SGM2590D 的输出电流由 OCB pin 连接的电阻决定,最大电流
Ilim(A)=6612/RILIM^0.982
,如下图 12 所示,VBUS 输出限流为 2.3A; - Type-C to Type-A USB 3.1/DP 对应的 DTS 配置,请参考 Type-C to Type-A USB 3.1/DP DTS 配 置; Note: 理论上,硬件电路也可以设计为 Type-A USB 3.1 使用 lane2/3,DP 使用 lane0/1,但软件需要对 usbdp_phy 节点的属性 rockchip,dp-lane-mux 进行修改,以适配硬件设计。
图 11 RK3576 Type-A USB 3.1/DP 电路
图 12 RK3576 Type-A USB3.1 接口