0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

嵌入式USB开发 来源:嵌入式USB开发 作者:嵌入式USB开发 2023-05-09 10:09 次阅读

本文转自公众号,欢迎关注

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

前言

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

pYYBAGRZqYuAcmg5AAuMLdJB4XQ079.png

本文先对其功能特征进行简介,以便有一个整体概念的理解。内容基本都是参考自文档《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

poYBAGRZqZKAJ7bIAAq5DxyPFQo285.png

框架

整体框架如下图,浅蓝色部分是根据配置决定,黑色部分是所有配置都有的:

pYYBAGRZqZeAMIO9AA_NMNDFFig365.png

对于软件编写来说也要了解下其架构

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 SlaveI/F:AHB从接口,即DWC控制器是从设备,CPU通过该接口对DWC的控制和状态寄存器(CSR)、数据FIFO和队列进行读写访问。

AHB Master I/F:在上面的DMA部分描述, 使能DMA时,DMA是主设备,负责在系统的memory和内部的RAM之间搬运数据。

RAM部分

如图下面部分,对于软件角度来说就是DWC和软件围绕着RAM在进行数据交互。

外部单端口FIFO RAM(SPRAM)用于事务数据存储,可配置,32至32768x 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 6P/3P接口或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) 。

作为设备模式时的多处理器中断

此功能支持端点相关中断屏蔽寄存器和来自于控制器的端点相关的中断信号。此功能可以在多处理器环境中使用,每个端点都可以由不同的处理器控制。

特征

一般特征

支持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排序(仅适用于SharedFIFO操作)。

软件处理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低频时钟。

总结

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

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • usb
    usb
    +关注

    关注

    60

    文章

    7888

    浏览量

    263918
  • USB2.0
    +关注

    关注

    2

    文章

    186

    浏览量

    46035
  • USB驱动
    +关注

    关注

    1

    文章

    136

    浏览量

    20169
  • DWC2
    +关注

    关注

    0

    文章

    35

    浏览量

    119
收藏 人收藏

    评论

    相关推荐

    基于DWC2USB驱动开发-0x01开篇介绍与新思DWC2 USB2.0控制器简介

    本文转自公众号,欢迎关注 基于DWC2USB驱动开发-0x01开篇介绍与新思
    的头像 发表于 05-08 18:10 4489次阅读
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>-<b class='flag-5'>0x</b>01开篇<b class='flag-5'>介绍</b>与新思<b class='flag-5'>DWC2</b> <b class='flag-5'>USB2.0</b>控制器简介

    基于DWC2USB驱动开发-0x03 DWC2 USB2.0 IP 架构介绍之接口和协议时序

    本文介绍接口和协议时序
    的头像 发表于 05-10 15:37 2980次阅读
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>-<b class='flag-5'>0x</b>03 <b class='flag-5'>DWC2</b> <b class='flag-5'>USB2.0</b> <b class='flag-5'>IP</b> 架构<b class='flag-5'>介绍</b>之接口和协议时序

    基于DWC2USB驱动开发-0x04 DWC2 USB2.0 IP 架构介绍

    这一篇先对IP的架构进行一些介绍,内容比较多所以重点关注和软件相关的内容。后续编程具体涉及时,可能再返回过来详读某一个部分。
    的头像 发表于 05-12 12:50 4073次阅读
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>-<b class='flag-5'>0x</b>04 <b class='flag-5'>DWC2</b> <b class='flag-5'>USB2.0</b> <b class='flag-5'>IP</b> 架构<b class='flag-5'>介绍</b>

    基于DWC2USB驱动开发-0x07 DWC2 USB2.0 IP 配置参数

    混淆,IP的配置参数固定之后就不能改了,就决定了IP所具有的能力。对于软件开发者来说也要了解其具体的配置,因为只有知道当前IP的配置,知道支持哪些
    的头像 发表于 05-17 09:49 2165次阅读

    基于DWC2USB驱动开发-IAD描述符详解

    本文转自公众号,欢迎关注 基于DWC2USB驱动开发-IAD描述符详解 (qq.com) 一.  前言 IAD描述符用于一个设备功能关联多
    的头像 发表于 06-27 08:45 5.2w次阅读
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>-IAD描述符详解

    基于DWC2USB驱动开发-USB复位详解

    本文转自公众号欢迎关注 基于DWC2USB驱动开发-USB复位详解 (qq.com) 一.前言          上一篇我们详细
    的头像 发表于 07-07 11:18 5.7w次阅读
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>-<b class='flag-5'>USB</b>复位详解

    基于DWC2USB驱动开发-USB连接详解

    本文转自公众号,欢迎关注 基于DWC2USB驱动开发-USB连接详解 (qq.com) 一.前言   之前一直在阅读手册,规格书,练习招式
    的头像 发表于 07-07 08:46 3551次阅读
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>-<b class='flag-5'>USB</b>连接详解

    基于DWC2USB驱动开发-高速设备枚举为全速设备问题案例分析

    本文转自公众号,欢迎关注 基于DWC2USB驱动开发-高速设备枚举为全速设备问题案例分析 (qq.com) 一.前言   本文分享一个高速设备被枚举为全速的问题。     高速设备速
    的头像 发表于 07-10 17:12 1303次阅读
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>-高速设备枚举为全速设备问题案例分析

    基于DWC2USB驱动开发-设备类驱动框架

    本文转自公众号,欢迎关注 基于DWC2USB驱动开发-设备类驱动框架 (qq.com) 一.前言 从软件顶层,从数据流的角度来看
    的头像 发表于 07-16 15:56 1277次阅读
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>-设备类<b class='flag-5'>驱动</b>框架

    基于DWC2USB驱动开发-发送相关的寄存器DMA寄存器详解

    本文转自公众号,欢迎关注 基于DWC2USB驱动开发-发送相关的寄存器DMA寄存器详解 (qq.com) 前言 如下寄存器DIEPxxx,对应IN端点,和发送数据相关,这一篇先
    的头像 发表于 07-16 16:42 1575次阅读
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>-发送相关的寄存器DMA寄存器详解

    基于DWC2USB驱动开发-数据不能发送问题分析案例

    本文转自公众号欢迎关注 基于DWC2USB驱动开发-数据不能发送问题分析案例 (qq.com)   一.前言        对于驱动
    的头像 发表于 08-08 09:43 2114次阅读
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>-数据不能发送问题分析案例

    RK3399平台上USB控制器和PHY的连接方式和配置说明

    USB2.0 OTG对应的控制器是DWC2USB2.0 OTG使用的是Synopsys 方案,即使用DWC2控制器同时实现Host和Device
    发表于 05-12 17:46

    如何对基于hal库的DWC2 USB IP进行调试呢

    背景之前适配 DWC2 USB IP 的时候,主要是基于 st 的 hal 库来走的,当时我就对他们的 hal 库代码不满,只是无奈,迫于时间就没重构,果不其然,usb bug 一堆,
    发表于 06-14 15:23

    无法让USB主机正常工作是我做错了什么吗?

    bus registered, assigned bus number 3[ 2.986093] dwc2 49000000.usb-otg: irq 51, io mem 0x
    发表于 12-02 06:06

    基于DWC2USB驱动开发-抽丝剥茧再论切换到状态阶段标志DOEPINTn.StsPhseRcvd

    本文转自公众号系列文章,欢迎关注 基于DWC2USB驱动开发-USB包详解 (qq.com) 一.前言 前面我们对SETUP完成标志DOE
    的头像 发表于 07-24 18:04 1457次阅读
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驱动</b><b class='flag-5'>开发</b>-抽丝剥茧再论切换到状态阶段标志DOEPINTn.StsPhseRcvd