嵌入式Lee

文章数:196 被阅读:578672

账号入驻

基于DWC2的USB驱动开发-0x02 DWC2 USB2.0 IP 功能特征介绍

最新更新时间:2023-05-09
    阅读数:

前言

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 低频时钟。

总结

这一篇先对控制器的特征有一个大致的整体了解 , 对这些整体的框架了解也有助于后续的各模块部分的了解,对软件开发也有一些参考意义。



最新有关嵌入式Lee的文章

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: TI培训

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved