您当前的位置:首页 >  快讯  > 正文
天天实时:基于DWC2的USB驱动开发-0x08 ULPI接口协议概览
来源:嵌入式USB开发     时间:2023-06-02 14:34:37

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


(资料图)

基于DWC2的USB驱动开发-0x08 ULPI接口协议概览 (qq.com)

一. ULPI(协议概览)

1.1 前言

前面我们介绍了GLPI接口,ULPI即基于GLPI接口的UTMI协议的实现。ULPI用于USB中LINK和PHY的通讯,主要应用于外置PHY的场景。了解ULPI接口对整个USB驱动开发也有一些帮助,掌握USB也需要掌握USB整个链路的数据流,PHY到LINK这一层的数据流至关重要,虽然对于编程来说这一层对软件可见度几乎为0,但是了解其有利于解决分析问题,尤其是一些疑难杂症.

1.2 概述

ULPI是LPI接口规范应用于UTMI+协议的一个具体实现, 相对于UTMI,使用ULPI减少了引脚数量,适合于外接USB收发器(PHY)的场景,支持OTG,主机,设备的应用。

一般外接USB收发器比如原型验证阶段时采用ULPI接口,因为ASIC或者SOC的引脚数是比较受限的;而如果USB收发器集成封装在ASIC,SOC内,则使用UTMI接口,因为在芯片内部,不占用芯片的引脚。

UTMI才是LINK-PHY之间的标准接口,ULPI只是为了外置PHY等场景有低引脚需求才增加的实现。所以即使使用ULPI接口, LINK内部实际也是有一个UTMI-ULPI的桥转换为UTMI接口的,而PHY封装在芯片内部直接使用UTMI就不需要UMTI-ULPI的桥了,避免了桥接性能等方面的损失,这也是为什么PHY集成在芯片内部都是直接使用UTMI接口的一个原因。

ULPI规范详细说明了对UTMI+Level 3的支持,但PHY实现者可以选择支持UTMI+中定义的任何级别。

ULPI定义了LINK到PHY之间的信号8个或者12个,即4个DATA或者8个DATA+nxt,stp,dir,clock。ULPI对UTMI+的引脚缩减,是通过对相对静态的信号通过寄存器配置,数据线改为双向,提供了一种访问ULPI收发器上寄存器数据的方法来实现的。

如下图所示:ULPI规格建议使用ULPI Link Wrapper和ULPI PHY Wrapper在原来的UTMI+ IP上封装,这样可以保持原来的UTMI+部分不变, 但是根据实现而定,也可以不要这个桥直接就使用ULPI接口。

WDC2控制器同时支持UTMI和ULPI的,可以配置为同时支持,软件动态选择,其PHY Interface Unit (PIU)框图如下:

1.3 结构

首先要从整体上了解下ULPI接口所处的层次以及其作用,这样有利于后面的理解。

ULPI是LINK和PHY之间的接口,结构图下

所以有必要先了解下LINK和PHY分别是做什么的:

PHY:

即物理层设备Physical Layer ,也就是收发器Transceiver,比如USB334x就是用的比较多的MicroChip的PHY芯片。在PHY芯片的手册中一般用收发器Transceiver的称呼。而在描述UBS协议的规格书等中一般称为PHY(Physical Layer),两者说的是同一个东西,只是不同场景侧重点不一样,前者侧重一个具体的东西所以叫做收发器,后者侧重一个抽象的概念所以叫做PHY。

PHY即数字部分和模拟部分的桥梁, PHY的一边通过ULPI接口和LINK通讯,这边都是数字部分。PHY另一边就是直接的总线信号比如USB的D+,D-这边是模拟部分。

PHY的技术含量是比较高的,涉及到模拟的或者是模数的技术都有一定门槛,所以你可以看到国产很多企业能做控制器LINK,MAC这部分(虽然很可能大概也是买的IP),但是基本没有能做PHY的,前者是数字部分,设计验证相对来说更简单,后者则更复杂设计验证更加困难(所以后者都是购买集成)。

PHY部分主要实现,总线信号的收发,bit-stuff等,和LINK通过ULPI/UTMI接口通讯,则是以包为单位了,当然包括PHY的状态返回控制等。

LINK:

LINK即SOC这边的控制器部分,实现数据链路层的处理,由于是纯数字部分,这部分也比较好仿真验证。有些文献也叫Serial Interface Engine (SIE)

ULPI PHY必须要实现以下UTMI+的特征

Linestate:必须在2-3个时钟内精确反映D+/D-的状态。由LINK使用Linestate去计时总线事件。滤波以防止由于D+和D-之间的偏斜而在Linestate上出现虚假的SE0/SE1状态。低速滤波14个时钟,全速和高速滤波2个时钟。PHY在发送时内部需要阻塞接收路径,接收路径在Squelch(HS)和SE0-to-J(FS/LS)时退出阻塞。TxReady必须用于包括Chirp的所有数据发送。由于USB上的噪声,有可能RxActice有效到无效而没有接收到任何有效数据,即RxValid不会有效。LINK必须能处理这种RxActive有效而RxValid无效的场景。

1.4 信号

ULPI的PHY接口信号基于PLPI定义,还增加了USB接口,其他杂项接口。

PHY接口是固定的,其他接口可能可变,以下只是一个通常的指导设计。

且规定了PHY必须是主机。这里需要注意和UTMI相比这里总线权颠倒了,UTMI是LINK掌握,这里是PHY掌握了,这是因为DATA是双向数据了,为了保证接收数据时不被LINK打断。

信号方向(PHY的角度)描述
PHY Interface
clockI/O接口时钟.PHY必须支持输出60MHz时钟,即必须支持时钟输出模式.可选支持输入60MHz时钟,即输入时钟模式是可选的.如果PHY支持这两种时钟模式,则必须由PHY自行配置,不能依赖ULPI的控制和数据信号去设置.
dataI/O数据总线,在ULPI总线空闲时即PHY和LINK都没有数据要发送时,PHY拉低dir监听总线,此时由LINK发送数据,而LINK又没有数据要发送,所以就发送特殊值0,表示无效数据。必须支持8位数据宽,单边沿,上升沿传输数据可选支持4位数据宽,双边沿,上下边沿都传输数据
dirOUT由PHY驱动控制数据总线的方向.PHY如果不能接收LINK发送过来的数据时拉高dir.比如PHY的PLL没有稳定时这适用于PHY的两种时钟模式.
stpINLINK拉高stp表示USB包传输或者寄存器写的结束,也可结束任何接收。Stp必须是在最后一个有效数据之后的CLK拉高。
nxtOUTPHY拉低nxt以掐断除了寄存器读和RX_CMD外的所有传输。与USB接收期间的RxValid和USB传输期间的TxReady相同。如果dir先前为低,则PHY还可同时设置nxt和dir以指示USB接收激活(RxActive)。PHY不容许在LINK发送TX_CMD时的第一个时钟拉低nxt
USB****接口
D+I/OUSB的****D+引脚必须有
D-I/OUSB的****D-****引脚必须有
IDINUSB的ID引脚只有支持OTG的PHY才需要
VBUSI/OUSB的VBUS引脚。支持OTG的PHY才需要。用于驱动VBUS和VBUS比较器
其他杂项
XIIN晶体输入或者时钟输入引脚,由厂家实现决定支持的晶体频率
XOOUT晶体输出引脚如果是只支持时钟输入的则没有该引脚
C+I/O电荷泵电容器正极端子
C-I/O电荷泵电容器负极端子
SPKR_LIN可选的Carkit left/mono speaker输入
SPKR_MICI/O可选的Carkit right speaker输入或者麦克风输出
RBIASI/O偏置电流电阻器

如下是一个典型的信号连接示例

使用的是PHY的时钟输出模式,即CLOCK由PHY提供

1.5框图

UTMI+ Level 3 PHY core

ULPI PHY可以包含符合任何UTMI+级别的核心,ULPI中不支持16位数据总线的信号。上述显示了3级UTMI+核心的典型框图,PHY供应商必须指定预期的UTMI+级别,并提供符合该级别所需的功能。

ULPI PHY Wrapper

ULPI PHY桥将UTMI+接口简化为ULPI中描述的低引脚接口。UTMI+Level 3 PHY核心上显示的所有信号都减少为ULPI接口信号

clock**, data, dir, stp, nxt. **寄存器映射存储UTMI+接口的相对静态信号。

Crystal Oscillator and PLL

当晶体连接到PHY时,内部时钟和外部60MHz接口时钟由内部PLL产生即PHY的时钟输出模式。

当没有连接晶体时,PHY可以可选地从LINK提供的输入60MHz时钟生成内部时钟,即时钟输入模式。

General Biasing

内部模拟电路需要精确的偏置电流。这通常是使用外部精确的参考电阻器产生的。

DrvVbusExternal and ExternalVbusIndicator

PHY可以可选地经由可选引脚DrvVbusExternal来控制外部VBUS电源

例如,外部电源可以是使用电源开关控制的电荷泵或5V电源。

外部电源由DrvVbus和OTG控制寄存器中的可选DrvVbusExternal位控制。

DrvVbusExternal输出引脚的极性取决于实现方式。

如果提供对外部VBUS源的控制,则PHY可以可选地在可选引脚ExternalVbusIndicator上提供VBUS电源反馈信号。

如果提供该引脚,则该引脚的使用由OTG控制和接口控制寄存器中的可选控制位定义。

Power-On-Reset

必须在PHY中提供上电复位电路。当电源首次施加到PHY时,通电复位将重置所有电路,并使ULPI接口处于可用状态。

Carkit Option

PHY可以可选地支持车载套件模式Carkit Mode。在该模式下,LINK和USB接口之间的麦克风和喇叭信号由PHY路由。在Carkit单声道模式下,SPKR_L输入单声道扬声器信号,SPKR_MIC输出麦克风信号MIC。在Carkit立体声模式中,SPKR_L输入左扬声器信号,SPKR_MIC输入右扬声器信号SPKR_R。

1.6 模式

ULPI接口可以在下表中列出的五种独立模式中的一种模式下运行。默认情况下,接口处于同步模式。其他模式由功能控制和接口控制寄存器中的位启用。在同步模式下,数据总线传输命令和数据。在其他模式中,数据引脚会使用不同的功能重新定义。同步模式和低功率模式是强制性的。

模式名模式描述
Synchronous Mode同步模式这是一般的操作模式.ULPI接口发送数据和命令和 clock同步.
Low Power Mode低功耗模式PHY掉电时钟停止.PHY保持拉高 dir,data总线重定义为 LineState和中断信号。
6-pin FS/LS Serial Mode(optional)data总线重定义为6-pin串行模式,包括6个引脚发送和接收USB的串行数据和1个引脚用于中断信号事件.时钟可使能或者不使能.该模式只有在支持8位data模式时才可能有。
3-pin FS/LS Serial Mode(optional)data总线重定义为3-pin串行模式,包括3个引脚发送和接收USB的串行数据和1个引脚用于中断信号事件.时钟可使能或者不使能.
Carkit Mode(optional)Data总线重定义为Carkit模式,包括2个引脚用于串行UART数据传输和1个引脚用于中断信号事件,时钟可选停止

1.7上电和复位

ULPI PHY提供内部通电复位电路,该电路在通电时复位所有逻辑,包括UTMI+核心、ULPI接口和寄存器。

通电后,当时钟开始翻转时,LINK必须通过写入功能控制寄存器Function Control中的Reset位来重置PHY。当该位被置位时,PHY将拉高dir并复位数字核心。

复位完成后PHY拉低dir,自动清除Function Control****寄存器的Reset位。

在拉低dir之后,PHY必须立即重新拉高dir,并向LINK发送RX CMD更新状态。

复位期间,数据总线由PHY驱动,但数据未定义,LINK需要丢弃该数据。

在复位完成且dir被重新拉低之前,LINK不得尝试访问PHY。ULPI接口和寄存器不受复位的影响,除非寄存器定义中另有说明。

如下是一个典型的上电复位过程

T0表示电源稳定

T2表示POR上电复位完成

对于时钟输出模式,当PHY正在复位时,DIR引脚将被驱动为高电平,直到60 MHz输出时钟稳定为止。

在时钟输入模式的情况下,DIR将保持高电平,直到内部PLL锁定并稳定。

一旦PHY和LINK都完成复位,PHY就会向LINK发送RXCMD

PHY有可选的引脚复位RESETB,拉低RESETB将导致60 MHz输出时钟停止,DIR被驱动为高电平。PHY内部将以与POR相同的方式进行复位,PLL将重新锁定,ULPI寄存器将返回到其默认状态。

1.8中断事件通知

在任何模式下,PHY都能够检测中断事件,并通知LINK中断事件已经发生。

。中断事件通知由USB Interrupt Enable Rising 、USB InterruptEnable Falling 和Carkit Interrupt Enable 这几个寄存器配置。

如果启用了中断,则无论PHY处于哪种模式,PHY都必须为所需的电路供电,唯一的例外是仅在同步模式下有效的HostDisconnect中断,以及由IdPullup控制的IdGnd中断。

为了确保时钟停止时能够检测到中断,LINK应同时启用上升沿和下降沿触发。

如果处于同步模式,则中断事件会导致PHY向LINK发送RX CMD命令字节。

如果不处于同步模式,则中断事件导致PHY控制int引脚来通知中断,当Link检测到int有效时,它会唤醒时钟(如果是停止的),然后读取USB中断锁存USB Interrupt

Latch和Carkit中断锁存寄存器 Carkit Interrupt Latch,以确定中断源。

1.9 时序

1.9.1 时钟

下表总结了时钟时序。8位接口的时序来自UTMI。可选的4位接口添加了新的时序。ULPI还引入了几个必须由PHY供应商填写的新参数。如果PHY支持可选输入时钟,则LINK时钟必须满足表中的要求和任何供应商特定的要求。

4位接口时钟频率和占空比容差减少一半到5%,因为双边沿传输,上下边沿都需要传输数据。

Clock startup time after de-assertion of SuspendM: Peripheral 该事件计算了以满足chirp 时序,来源于UTMI规格书

Clock startup time after de-assertion of SuspendM: HOST,厂商填写,建议启动时间小于1ms以满足恢复时间resume要求。如果PHY用作主机,并且接口时钟不能设计为在1ms内可用,则必须在内部自动发送恢复resume 信号。

如果PHY支持可选的输入时钟功能,则PHY供应商必须说明准备时间PHY preparation time after first transition of input clock。PHY必须同步其PLL,并准备在指定时间前接受来自LINK的传输命令。LINK时钟启动时间加上PHY准备时间,必须满足外围设备5.6ms的启动时间(UTMI规格书中的说明),建议主机的总启动时间为1ms。

输出时钟模式

PHY必须能够提供输出时钟,并满足上表中列出的要求。

8位外设的输出时钟时序遵循UTMI规范,稳态频率(FSTEADY)提供USB高速数据所需的±500ppm精度。启动时间(TSTART_DEV)允许外围设备唤醒其时钟,并在7ms的最大允许时间内完成Chirp-K的传输(TSTART_DEV+TSTEADY)。

对于具有8位数据总线的主机,ULPI定义了一个新的输出时钟启动时间(TSTART_host)。

当USB主机检测到远程唤醒信号时,它必须唤醒时钟,并在1ms的最大允许时间内开始发送resume-K,PHY供应商必须指定此值。

对于可选的4位数据接口,上升沿和下降沿都用于时钟数据。为了提供可用的下降沿,ULPI将频率(FSTART_4BIT)和占空比(DSTART_4BIT)容差降低了5%。

在所有情况下,当PHY挂起suspended 或时钟不“可用”时,必须停止输出时钟。

如下是一个PHY时钟输出模式的示意,时钟输出模式是PHY必须要支持的,

REFCLK输入晶体或者时钟源通过内部PLL产生时钟CLKOUT。

输入时钟模式(可选)

PHY可以可选地支持来自LINK的60MHz输入时钟,从而不需要晶体。PHY必须从60MHz输入时钟驱动其内部PLL。

PHY供应商负责指定所需的输入时钟时序。PHY供应商必须说明所需的频率、占空比、抖动、上升和下降时间偏差,如上表所示。还必须指定内部PHY时钟准备时间TPREP。如有必要,需求应包括输入电容以及吸电流和源电流能力

LINK可以选择在低功率模式期间禁用或关闭其PLL,并且在其PLL稳定之前不应激活其时钟输出。不稳定的LINK时钟可能导致PHY PLL需要更长的时间来稳定。

该模式是可选的,如下是一个示意

比如对于USB334x则CLKOUT接VDDIO表示使用该模式,不同芯片可能会不一样,要看手册决定。

输入时钟的抖动

如下的时序测试平面中

USB规格强制要求,在连接器A(TP2)处测得的高速传输眼图的抖动不大于7.5%

在PHY引脚(TP1)处测得的抖动建议不大于5%.

ULPI规范没有指定LINK输出时钟引脚(TP0)处的时钟抖动要求,

然而LINK和PHY设计者应当最小化他们的时钟抖动,使得LINK加PHY抖动的总和满足推荐的5%抖动预算。

1.9.2 控制和数据

控制和数据时序要求如下,这些时序仅适用于同步模式。所有时序都是相对于在PHY时钟引脚处看到的时钟来测量的。控制信号和8位数据总是在时钟的上升沿上计时,而可选的双沿4位数据信号在上升沿和下降沿上计时。

主要关注建立时间和保持时间。

4位数据时钟(可选)

PHY可以可选地支持4位数据总线而不是8位数据总线。原始的8位数据或命令被分成两个4位的“半字节”。最低有效半字节,数据(3:0),首先在时钟的上升沿传输。最高有效的半字节,数据(7:4),在时钟的下降沿被第二次传输。不允许传输奇数个4位半字节,这确保了完整字节的数据到达与8位设计的上升沿相同。

LINK和PHY必须满足关于上升沿和下降沿规定的更严格的定时。允许输出和输入时钟模式。

控制信号dir、stp和nxt仅在60MHz接口时钟的上升沿上同步,因为数据传输总是字节对齐的。

时序如图所示

1.10总结

本篇概述了ULPI相关的内容,内容比较多后面还有工作模式和寄存器相关内容会分开讲。

1.11参考

《UTMI+ Low Pin Interface (ULPI) Specification Revision 1.1 October 20, 2004》

《MicroChip AN 19.17 ULPI Design Guide》审核编辑:汤梓红

标签:

相关新闻

X 关闭

X 关闭

精彩推荐