基于DWC2的USB驱动开发-0x08 ULPI接口协议概览 (qq.com)
前面我们介绍了GLPI接口,ULPI即基于GLPI接口的UTMI协议的实现。ULPI用于USB中LINK和PHY的通讯,主要应用于外置PHY的场景。了解ULPI接口对整个USB驱动开发也有一些帮助,掌握USB也需要掌握USB整个链路的数据流,PHY到LINK这一层的数据流至关重要,虽然对于编程来说这一层对软件可见度几乎为0,但是了解其有利于解决分析问题,尤其是一些疑难杂症.
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)框图如下:
首先要从整体上了解下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+的特征
ULPI的PHY接口信号基于PLPI定义,还增加了USB接口,其他杂项接口。
PHY接口是固定的,其他接口可能可变,以下只是一个通常的指导设计。
且规定了PHY必须是主机。这里需要注意和UTMI相比这里总线权颠倒了,UTMI是LINK掌握,这里是PHY掌握了,这是因为DATA是双向数据了,为了保证接收数据时不被LINK打断。
信号 | 方向(PHY的角度) | 描述 |
---|---|---|
PHY Interface | ||
clock | I/O | 接口时钟.PHY必须支持输出60MHz时钟,即必须支持时钟输出模式.可选支持输入60MHz时钟,即输入时钟模式是可选的.如果PHY支持这两种时钟模式,则必须由PHY自行配置,不能依赖ULPI的控制和数据信号去设置. |
data | I/O | 数据总线,在ULPI总线空闲时即PHY和LINK都没有数据要发送时,PHY拉低dir监听总线,此时由LINK发送数据,而LINK又没有数据要发送,所以就发送特殊值0,表示无效数据。必须支持8位数据宽,单边沿,上升沿传输数据可选支持4位数据宽,双边沿,上下边沿都传输数据 |
dir | OUT | 由PHY驱动控制数据总线的方向.PHY如果不能接收LINK发送过来的数据时拉高dir.比如PHY的PLL没有稳定时这适用于PHY的两种时钟模式. |
stp | IN | LINK拉高stp表示USB包传输或者寄存器写的结束,也可结束任何接收。Stp必须是在最后一个有效数据之后的CLK拉高。 |
nxt | OUT | PHY拉低nxt以掐断除了寄存器读和RX_CMD外的所有传输。与USB接收期间的RxValid和USB传输期间的TxReady相同。如果dir先前为低,则PHY还可同时设置nxt和dir以指示USB接收激活(RxActive)。PHY不容许在LINK发送TX_CMD时的第一个时钟拉低nxt |
USB****接口 | ||
D+ | I/O | USB的****D+引脚必须有 |
D- | I/O | USB的****D-****引脚必须有 |
ID | IN | USB的ID引脚 只有支持OTG的PHY才需要 |
VBUS | I/O | USB的VBUS引脚。支持OTG的PHY才需要。用于驱动VBUS和VBUS比较器。 |
其他杂项 | ||
XI | IN | 晶体输入或者时钟输入引脚,由厂家实现决定支持的晶体频率 |
XO | OUT | 晶体输出引脚如果是只支持时钟输入的则没有该引脚 |
C+ | I/O | 电荷泵电容器正极端子 |
C- | I/O | 电荷泵电容器负极端子 |
SPKR_L | IN | 可选的Carkit left/mono speaker输入 |
SPKR_MIC | I/O | 可选的Carkit right speaker输入或者麦克风输出 |
RBIAS | I/O | 偏置电流电阻器 |
如下是一个典型的信号连接示例
使用的是PHY的时钟输出模式,即CLOCK由PHY提供
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。
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个引脚用于中断信号事件,时钟可选停止 |
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寄存器将返回到其默认状态。
在任何模式下,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,以确定中断源。
下表总结了时钟时序。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%抖动预算。
控制和数据时序要求如下,这些时序仅适用于同步模式。所有时序都是相对于在PHY时钟引脚处看到的时钟来测量的。控制信号和8位数据总是在时钟的上升沿上计时,而可选的双沿4位数据信号在上升沿和下降沿上计时。
主要关注建立时间和保持时间。
4位数据时钟(可选)
PHY可以可选地支持4位数据总线而不是8位数据总线。原始的8位数据或命令被分成两个4位的“半字节”。最低有效半字节,数据(3:0),首先在时钟的上升沿传输。最高有效的半字节,数据(7:4),在时钟的下降沿被第二次传输。不允许传输奇数个4位半字节,这确保了完整字节的数据到达与8位设计的上升沿相同。
LINK和PHY必须满足关于上升沿和下降沿规定的更严格的定时。允许输出和输入时钟模式。
控制信号dir、stp和nxt仅在60MHz接口时钟的上升沿上同步,因为数据传输总是字节对齐的。
时序如图所示
本篇概述了ULPI相关的内容,内容比较多后面还有工作模式和寄存器相关内容会分开讲。
《UTMI+ Low Pin Interface (ULPI) Specification Revision 1.1 October 20, 2004》
《MicroChip AN 19.17 ULPI Design Guide》
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !