基于DWC2的USB驱动开发-0x02 DWC2 USB2.0 IP 功能特征介绍
前言
DWC2 即新思 (Synopsys ) 的 DesignWare® Cores USB 2.0 HiSpeed On-The-Go (OTG) 控制器 IP, 被大量使用。 从 linux 的内核源码驱动中就带 DWC2 的驱动(新思官方维护),可以看出其使用的非常多。
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/usb/dwc2?h=v6.4-rc1
本文先对其功能特征进行简介,以便有一个整体概念的理解 。 内容基本都是参考自文档《 DesignWare Cores USB 2.0 Hi-Speed On-TheGo (OTG) Databook 》
DWC2
的特征介绍
组件
DWC2
的
IP
目前是版本
4,
其
IP
基本的组件是
DWC USB 2.0 HS OTG Controller v4,
还有其他几个是需要单独购买
license
才能添加的
,
前两个都是低功耗相关的
,
从此也可以看出要达到某些极致的性能
(
比如低功耗
)
肯定是要付出更高代价的。这就是技术壁垒带来的高附加值
,
需要额外购买也是理所当然,别人开发肯定技术投入也是更高的。感叹一下什么时候我们的各行各业的技术水平能做到这样的按功能点和特征收费就好了,只能说努力吧。
DWC USB HSOTG Hibernate
DWC USB HSOTG HSIC-LPM
DWC USB UTMI-to-UTMI Bridge
框架
整体框架如下图
,
浅蓝色部分是根据配置决定
,
黑色部分是所有配置都有的
:
对于软件编写来说也要了解下其架构
DMA
部分
如图的上面部分
,
可以选择内部的
DMA
控制器
,
此时内部
DMA
控制器
(AHB
主控器
)
使控制器能够充当
AHB
上的主控器
,
以便在
AHB
之间传输数据,即在
AHB
左侧的
Memory
和
SPRAM
之间搬运数据。即对应的接口
AHB Master I/F
。
内部
DMA
控制器与外部
DMA
控制器只能二选一
(
如图标示的
Either or none)
,当然也可以没有
DMA
那就只能
CPU
通过
AHB
总线进行数据搬运。
如果选择外部
DMA
控制器则可以选择
DesignWare
的
DW_ahb_dmac
或者
ARM DMA
控制器
PrimeCell
之类的
DMA
控制器连接到
DWC_otg
控制器
。
专用传输
FIFO
操作
(Dedicated Transmit FIFO,IP
配置
OTG_EN_DED_TX_FIFO=1
)
时不能选择外部
DMA
。
DMA
是软件编程需要重点理解的内容。
AHB
总线部分
如图左边部分
,
这一部分主要是
CPU
和
DWC
交互。
AHB Slave
I/F:
AHB
从
接口,即
DWC
控制器是从设备
,
CPU
通过该接口对
DWC
的控制和状态寄存器
(
CSR
)
、数据
FIFO
和队列
进行
读写访问
。
AHB Master I/F:
在上面的
DMA
部分描述
,
使能
DMA
时,
DMA
是主设备
,
负责在系统的
memory
和内部的
RAM
之间搬运数据。
RAM
部分
如图下面部分,对于软件角度来说就是
DWC
和软件围绕着
RAM
在进行数据交互。
外部单端口
FIFO RAM
(
SPRAM
)
用于事务数据存储
,
可配置
,
32
至
32768
x
35
位宽
(
32
个数据位加
3
个控制位
)
。
DataFIFO RAM/IF:
数据缓存
FIFO RAM
接口
,DWC_otg
控制器上的发送和接收
FIFO
接口用于将数据移入和移出数据
FIFO RAM
。
这些传输分为周期性传输(用于等时传输
ISO
和中断传输)或非周期传输(用于批量传输和控制传输)
.
所有主机输入和设备输出传输
使用一个
单
口
接收
FIFO
。
-
非周期性主机 OUT 传输 公用一个 Tx FIFO 。
-
周期性主机 OUT 传输 , 可以选择一个独立周期传输 FIFO 。
-
设备模式下 IN 端点可选 公用 非周期性 Tx FIFO ,和 多 个 周期性 TxFIFO
-
用于周期性 / 非周期性设备 IN 传输的每个 IN 端点可选专用 Tx FIFO
-
主机模式中断 OUT 和设备模式中断 IN (仅在 Shared FIFO 操作 模式 )传输可以编程为通过非周期传输 FIFO 或周期传输 FIFO 。
注
:
在
Shared FIFO
模式
,
对于采用
Control-Bulk-Interrupt (CBI)
协议的大容量存储设备,中断
IN
端点不使用周期端点
(
通常用于批量数据传输结束时的状态更新
)
。当单个大容量存储设备连接后,且软件可以预测何时接收到
IN
中断,则可以通过非周期性传输
FIFO
控制器发送该
IN
中断,节省一个周期
FIFO
和相关内存。
接口部分
如图右边是接口部分
,
可以配置支持至少一个或者同时支持多个接口
,
注意这里的配置是指的
IP
的配置,而不是软件的编程配置。
支持
UTMI+ Level 3 PHY
接口
(Revision 1.0 or HSIC)
UTMI+PHY
可以是单向或双向的,可以配置为
8-
、
16-
或
8/16
位数据总线
,IP
配置为
8/16
位数据总线时软件可以通过寄存器动态配置选择8位还是16位。
UTMI+
接口可以配置为与符合修订版
1.0
的
PHY
或符合
HSIC
的
PHY
一起工作。
ULPI PHY
接口
(Revision 1.1)
ULPI PHY
可以是单向或双向的,具有
8
位
SDR
或
4
位
DDR
总线
(
软件可动态配置
)
这里顺便提一下
:ULPI
接口引脚少
,
一般用于外置
PHY
的情况或者
FPGA
原型验证阶段
,
而
UTMI
接口引脚多
,
一般
PHY
集成在
SOC
内时使用。
USB 1.1
全速串行收发器接口
USB 1.1
全速串行收发器可以具有专用接口,也可以在芯片外
PHY
的
UTMI+
或
ULPI
接口上共享引脚
(
软件可配
)
IP
配置使能了
IC_USB
时,全速串行收发器接口可以配置为
USB 1.1 6
P
/3
P
接口或
IC_USB
接口。
IC_USB 接口是一个额外的专用接口。此接口不能和 UTMI+ 或 ULPI 的引脚共享。无论 FS 引脚共享选项如何, IC_USB 一旦配置使能,接口总是可用的。 IC_USB 接口是一个附加功能,需要额外的 DWC-HSOTGFS-ICUSB 许可证。
DWC_otg
控制器可以支持两个并行端口
(
例如
,
与专用
FS 1.1
并行的
UTMI+)
。但是,两个端口不能同时运行。在任何给定的时间,只有一个端口处于活动状态。从一个端口切换到另一个端口时,应用程序必须提供软件复位
(
这里编程需要注意
,
不过一般也不会做切换
,
实际一般都是固定一个接口
)
。
其他可选接口
-
供应商控制接口 可以访问 ULPI和UTMI+ PHY寄存器
-
I2C接口,用于USB 1.1 FS模式下的OTG控制
-
通用 I/O (GPIO)接口
-
SOF更新翻转接口 (不用于DWC otg)
-
SOF输入计数接口 (不用于DWC otg)
-
用于设备和主机模式的基于描述符的分散 /聚集DMA控制器 (Descriptor-Based Scatter/Gather DMA) 。 (不支持Descriptor-BasedCongruent-Sequential DMA)。
这里有必要提一下
Descriptor-Based Scatter/Gather DMA就是DMA界的上乘武功,一般的MDA只能一次搬运一处区域,而它则能按照链表的形式处理一系列区块,这在USB做大数据量传输时非常方便,可以大大解放CPU提高效率,尤其是在UVC等需要ISO传输尤其是大带宽的ISO传输处理时更能体现其威力,可以大大提高性能。但是Host Scatter Gather DMA不支持hubs (split transfers),Split transfers只支持Host Buffer DMA (Internal DMA) 。
l
作为设备模式时的多处理器中断
此功能支持端点
相关
中断屏蔽寄存器和来自
于
控制器的端点
相关的
中断信号。此功能可以在多处理器环境中使用,每个端点都可以由不同的处理器控制。
特征
一般特征
-
支持 OTG2.0 和 OTG1.3, 软件可配 .OTG2.0 支持 ADP (Attach detection Protocol) 。
OTG2.0
和
OTG1.3
的区别是前者支持
Attach Detection Protocol (ADP) ,
后者不支持
前者支持
Accessory Charger Adapter (ACA) (
需要配置使能
BC Support =1)
。
-
支持 High-Speed (HS, 480-Mbps),Full-Speed (FS, 12-Mbps),Low-Speed (LS, 1.5-Mbps) 。
-
诸多低功耗相关配置选项。
-
支持多种 DMA 和非 DMA 操作方式。
-
MAC-Phy 之间支持多种接口。
-
AHB 和 PHY 接口支持使用不同的时钟 , 以简化集成。
-
包括控制端 0 在内 , 一共最多支持 16 个双向端点。
-
DWC_otg 作为设备使用 UTMI+ PHY 时不支持低速。
-
支持 Session Request Protocol (SRP) 。
-
支持 Host Negotiation Protocol (HNP) 。
-
最多支持 16 个主机通道。在主机模式下,当 需要支持的 设备的端点数量 大于 支持的主机通道 数 ,软件可以重新编程通道来支持多达 127 个设备,每个设备有 32 个端点 (IN + OUT) ,最多 4,064 个端点 。
-
Host Buffer DMA 模式 , Slave 模式 , External DMA 模式支持外部 HUB 连接。
注意
:DWC_otg
在
Host Scatter Gather DMA
模式不支持
split transfers
。只有
Buffer DMA
模式支持通用根集线器。
-
包括自动 ping 功能 。
-
支持低速模式下的 Keep-Alive 和高速 / 全速模式下的 SOFs 。
配置特征
-
使用 coreConsultant 实用程序根据用户需求配置控制器
-
能够为低功耗模式选择多个电源轨
-
多种 DMA 操作模式的选择
-
选择所需的 Mac-Phy 接口类型
应用接口特征
-
通过 AHB 的应用程序接口 :AHB 从接口,用于访问控制和状态寄存器 (CSRs) 、数据 FIFO 和队列 。 可选 的 AHB 主接口 ,内部 DMA 使能时给 Data FIFO 访问 使用。特定配置下 AHB 时钟最高可达 270MHz 。
-
AHB 总线上只支持 32 位数据。
-
支持通过 pin 配置小端或者大端模式。
-
AHB 从接口支持 INCR4, INCR8, INCR16, INCR 和 SINGLE 传输。
-
AHB 主接口 支持 拆分、重试和错误 AHB 响应。 AHB 从机接口上不 产生 拆分和重试响应 。
-
DMA 模式 AHB 主接口支持软件配置 AHB Burst 类型。
选择
INCR4
则控制器使用
INCR/INCR4,
或
Single
。
选择
INCR8
则控制器一般使用
INCR8,
但是传输的开始和最后根据大小可能使用
INCR
和
Single
。
选择
INCR16
则控制器一般使用
INCR16,
但是传输的开始和最后根据大小可能使用
INCR
和
Single
。
-
只能处理固定的 burst address 对齐 , 比如 INCR16 则地址的位 [5:0] 都要是 0 。注意 : 这里 INCR16 单位是 WORD(4B), 所以 16x4=64B, 即低 6 位为 0 。
-
在 AHB 主接口上 可 生成 AHB 忙周期 。
-
可 处理 1KB 的边界 。
MAC-PHY
接口特征
MAC-PHY
接口接控制器访问
PHY
芯片的接口。
支持以下接口
-
UTMI 8/16,ULPI,HSIC,IC_USB (Low/Full 速 ),FS 和 UTMI 共享。
-
支持 UTMI+ Level 3 接口 (Revision 1.0, February 25th, 2004). 8-, 16-, 和 8/16- 位数据总线。
-
支持 ULPI 接口 (Revision 1.1rc, September 1st, 2004), 8- 位 SDR, 4-bit DDR, 6-pin Serial, 3-pin Serial 和 Carkit 。
-
UTMI+ L3 和 ULPI 可同时存在 , 由软件选择,或者直接配置只使用一种。
-
只有在选择了 UTMI+ 的情况下,才能选择 HSIC 接口。否则无法选择 HSIC 接口。 HSIC 需要额外的 DWC-HSOTG-HSIC 授权。
-
I2C 接口 ( 用于支持 Mini USB Analog Carkit Interface Specification, CEA-936, Revision 2) 。不适用于其他设备。
-
支持 UTMI-to-UTMI Bridge 。
系统
Memory
特征
-
支持 Slave, 外部 DMA 控制器接口 , 或者内部 DMA 模式。
-
使用内部 DMA 模式时还支持 Descriptor-Based Scatter/Gather DMA 。
-
与外部 DMA 控制器的接口可选;数据通过 AHB 从机接口传输。
Non-DWORD
对齐支持
-
主机模式 :
Scatter Gather DMA
模式
,IN
和
OUT
传输
,
支持缓冲区的
Non-DWORD
对齐。
Buffer DMA
和
Slave
模式
,IN
和
OUT
传输
,
不支持缓冲区的
Non-DWORD
对齐。
-
设备模式 :
Scatter Gather DMA
模式
,IN
和
OUT
传输
,
支持缓冲区的
Non-DWORD
对齐。
Buffer DMA
和
Slave
模式
,IN
和
OUT
传输
,
不支持缓冲区的
Non-DWORD
对齐。
注意
:
对
Non-DWORD
对齐的支持是针对缓冲区的
,
不是描述符
,
描述符必须
WORD
对齐。
内部
Memory
特征
-
在 Slave 和 DMA 模式 , 可以配置支持每个设备的 IN 端点都使用一个固定的传输 FIFO 。每个 FIFO 可以保存多个包。
-
包括 一个可选的 接口 支持 Remote Memory ,用于向控制器发出系统上 DMA 写入完成事件的信号。
-
支持给端点进行包级别的动态 FIFO 分配 , 以支持小 FIFO, 和灵活高效利用 FIFO 。
-
利用单端口 RAM 替代双端口 RAM 以减少面积和功耗。
-
支持传输时动态修改端点 FIFO 的大小。
-
支持端点 FIFO可 不是 2 的指数倍对齐 , 以利用连续的存储位置。
-
在主机和设备模式下共享硬件寄存器,以减少门数 。
-
设备模式时如果选择 dedicated Tx FIFO,DMA 模式收发都支持阈值。阈值可以通过全局寄存器配置 , 支持阈值 AHB 时钟必须 60MHz 以上。
所谓的
Dedicated FIFO
即设备模式的每个
IN
端点都有自己独立的传输
FIFO
。
Shared FIFO
即非周期
IN
端点共享一个
TX FIFO
,周期端点有独立的
FIFO
。
软件特征
为了减少门数和提供灵活性
,
一些特征由软件去实现
-
软件协助硬件进行设备模式非周期 IN 排序 ( 仅适用于 Shared FIFO 操作 ) 。
-
软件处理 USB 命令 ( 检测 SETUP 事务,并将其命令有效载荷转发给应用程序进行 解析 ) 。
-
软件处理 USB 错误。
功耗优化特征
-
有源时钟门控功能:允许控制器通过在 USB 和 AHB 数据流 之间的 IDLE 时段内 , 在控制器的模块内门控 AHB 和 PHY 时钟 , 来降低动态功耗。同 样也可以在 SPRAM 未使用时门控 RAM 的时钟输出。
-
支持 Link Power Management (LPM)( 需要额外的 DWC-HSOTG-LPM 授权 ) 。以增加在面向 USB Audio Class 3.0 目标的 Audio 数据流处理 L1 请求时的灵活性。
-
几个节能功能,包括两个用于高级电源管理的电源轨。可以根据自己的要求选择以下任何节能选项:
时钟门控
部分断电
休眠
:
在休眠(当
OTG_EN_PWROPT=2
或
3
时启用)中,包含大约
95%
门数的
DWC_OTG_core
模块可以在挂起
Suspend
期间在主机和设备模式下进行电源门控。
DWC_otg_pmu
能够在挂起期间检测恢复、远程唤醒、
SRP
或连接,并在控制器处于休眠状态时唤醒应用程序。
扩展休眠
:
在扩展休眠(当
OTG_EN_PWROPT=3
时启用)中,
DWC_OTG_wpc_slv
、
DWC_OTG_power_dn
和
DWC_oting_pmu
模块被电源门控,此功能仅在设备模式下受支持。
DWC_otg_piu
模块能够检测
Resume
,并可以通过
NAK
握手响应
IN/OUT
令牌,并存储一个
Setup
数据包,直到应用程序上电。此功能在整个
SoC
和
CPU
被电源门控并且
USB
模块的一部分上电的情况下,从主机检测活动非常有效。
休眠和扩展休眠都需要额外的
DWC-HSOTG-HIBERNATION
授权。
-
USB Suspend, LPM, 和 Session-Off 模式支持 PHY 时钟门控。
-
USB Suspend 和 Session-Off 模式支持 AHB 时钟门控。
-
USB Suspend 和 Session-Off 模式支持部分掉电。
-
层次结构支持多个电源轨,以便在挂起期间启用休眠功能 。
-
输入信号需要 powered-off 的块驱动到安全的 0.
-
Data FIFO RAM 不使用的时关闭片选。
-
Data FIFO RAM 支持时钟门控。
-
设备和主机模式都支持在 USB Suspend, LPM, 和 Session-Off 模式时切换到 32-KHz 低频时钟。
总结
这一篇先对控制器的特征有一个大致的整体了解
,
对这些整体的框架了解也有助于后续的各模块部分的了解,对软件开发也有一些参考意义。