本文转自公众号,欢迎关注
基于DWC2的USB驱动开发-0x09 ULPI接口协议其他工作模式介绍 (qq.com)
(资料图片)
ULPI(其他工作模式介绍)
1.1 前言
上一篇讲解了ULPI基本的一些概念,这一篇就重点讲解其具体的工作模式,同步模式是重点内容比较多放在下一篇,这一篇先讲其他模式。
1.2 低功耗模式
当USB总线挂起时,LINK可以选择性地将PHY置于低功耗模式。PHY可以关闭除接口引脚和全速接收器之外的所有电路。如果存在VBUS,总线电阻器也必须通电。如果设置了相应的寄存器位,则对应功能都必须通电,包括中断源和电荷泵。如果PLL断电,则必须停止时钟而不出现毛刺。
1.2.1 低功耗模式的Data线重定义
当处于低功耗模式时,PHY使用下表中列出的信号驱动数据线(3:0)。当处于低功耗模式时,必须从FS接收器组合驱动LineState。
每当发生任何未屏蔽的中断时,都会使得int引脚信号有效。
PHY必须直接从模拟电路锁存中断事件,因为时钟已断电。
LINK忽略8位数据总线的数据位(7:4)的信号。
输入时钟和输出时钟模式都必须遵循这些规则。
信号 | 映射到 | 方向 | 描述 |
---|---|---|---|
nestate(0) | data(0) | OUT | LineState(0) 由FS 模拟接收器直接驱动。 |
nestate(1) | data(1) | OUT | LineState(1) 由FS 模拟接收器直接驱动。 |
reserved | data(2) | OUT | 保留,PHY必须拉低该引脚。 |
int | data(3) | OUT | 高有效,有未屏蔽中断时PHY拉高该引脚。 |
1.2.2 进入低功耗模式
LINK写Function Control寄存器的SuspendM 为0b使得PHY进入低功耗模式。
如图所示LINK或PHY时钟可以在PHY接受寄存器写入数据后至少停止五个周期。
当处于低功耗模式时,PHY拉高dir,并保持nxt为低。
在拉高dir之后,提供了一个数据总线周转周期turn around,在此期间,数据上的值无效。
PHY在turn around周期之后立即开始按照低功耗模式的Data线重定义信号驱动data[3:0]。
1.2.3 退出低功耗模式
如图所示,LINK通过异步拉高stp向PHY发出退出低功率模式的信号。PHY立即开始唤醒其内部电路。当PHY时钟满足ULPI时序要求时,PHY拉低dir。PHY必须确保在拉低dir之前至少驱动了5个时钟周期。PHY还必须确保在拉低dir之前将SuspendM寄存器自动设置为1b。
LINK在检测到dir拉低的一个CLK之后,拉低stp。
在拉低dir之后,提供了一个数据总线周转周期turn around,在此期间,数据上的值无效。
PHY在turn around之前立即停止按照低功耗模式的Data线重定义信号驱动data[3:0]。
当LINK提供输入时钟时,PHY必须在TPREP内同步其内部时钟TPREP是实现相关的。
PHY提供输出时钟时的退出低功耗
LINK提供输入时钟时的退出低功耗
1.2.4 拒绝虚假恢复
由于USB环境的噪声,可能导致低功耗模式下PHY驱动的异步LineState输出,有短暂的non-J-state条件或者毛刺。
LineState上的毛刺可能导致LINK短暂的拉高stp,这应该要认为是虚假的恢复PHY必须拒绝这个事件。PHY可以在重新启动时钟之前选择性地拒绝stp上的毛刺,如图所示。PHY必须通过在PHY拉低dir时在时钟的边沿去检查stp是否拉高,来确定是否满足退出低功耗模式的条件。
如果在dir被拉低的周期中stp没有被拉高,那么PHY必须重新拉高dir并返回到低功率模式,而无需LINK的进一步操作,如图所示。
1.3 全速/低速串行模式(可选)
全速/低速串行模式(FsLsSerialMode)使LINK能够直接访问FS/LS串行模拟收发器。
ULPI中定义了两种类型的串行模式:3p FsLsSerialMode和6p FsL sSerialmode。
这两种模式都是可选的。与低功率模式不同,FS/LS收发器必须通电。
如果设置了相应的寄存器位,则对应功能都必须通电,包括中断源和电荷泵。
1.3.1 FsLsSerialMode的数据线重定义
6p串行模式为UTMI+中定义的每个串行信号提供一条单独的数据线。3p串行模式将USB接收和传输数据压缩到双向数据线上,并提供4位数据总线PHY实现可以支持串行信号。
在任一模式中,UTMI+的低有效tx_enable_n信号被转换为高有效tx_enable,用于在ULPI总线上传输,这允许默认的ULPI总线空闲状态保持在00h。
在两种串行模式中,都提供了一个中断引脚。只要发生未屏蔽的中断事件,就会拉高int引脚。
当处于6p串行模式时,PHY使用下表中列出的信号驱动数据(7:0)。
当处于3p串行模式时,PHY使用下表中列出的信号驱动数据(3:0)。
1.3.2 进入FsLsSerialMode模式
为了进入6p串行模式,LINK在接口控制寄存器Interface Control中设置6-Pin FsLsSerialMode位,使数据总线切换到异步操作,并采用新的总线数据定义。
为了进入3p串行模式,LINK在接口控制寄存器Interface Control中设置3-Pin FsLsSerialMode位,使数据总线切换到异步操作,并采用新的总线数据定义。
默认情况下,输出时钟断电以减少串行模式下的功耗,如图所示。进入串行模式后至少5个时钟周期后,时钟停止,当时钟不可用时,PHY必须拉高dir。在拉高dir之后,提供了一个数据总线周转周期turn around,在此期间,数据上的值无效。PHY在周转周期之后立即开始驱动串行模式信号。
如果LINK要求时钟在串行模式下运行,它可以在进入串行模式之前在接口控制寄存器Interface Contro中设置ClockSuspendM信号,如图所示。
1.3.3 退出FsLsSerialMode模式
当LINK检测到int为高时,它应该通过拉高stp来退出FsLsSerialMode。
当ULPI接口返回同步模式时,LINK可以读取USB中断锁存寄存器USB Interrupt Latch以确定中断源。如果时钟未运行,退出FsLsSerialMode与退出低功率模式相同,如图所示。
如果时钟正在运行,则LINK通过拉高stp向PHY发出退出FsLsSerialMode的信号。
PHY在检测到stp拉高后将拉低dir 1个或多个周期,如图所示。在拉低dir之后的一个时钟中,LINK取消拉高stp。与低功率模式一样,在取消拉高dir之后的周期中,有一个时钟的总线数据周转周期,在周转周期内,数据上的值无效。PHY在紧接周转周期之前停止驱动串行模式信号。
1.4 Carkit模式(可选)
当设置接口控制寄存器Interface Control中的CarkitMode位时,选择该模式。
它允许LINK使用UART信号通过PHY与远程车载套件进行通信。
默认情况下,当PHY进入Carkit模式时,时钟会断电。进入和退出Carkit模式与串行模式相同。如果LINK要求时钟在Carkit模式下运行,它可以在进入Carkit模式之前在接口控制寄存器Interface Control中设置ClockSuspendM信号。
只要发生未屏蔽的中断事件,就会拉高int引脚。当LINK检测到int为高时,它应该通过拉高stp来唤醒时钟(如果断电)。如果时钟已经在运行,LINK拉高stp一个周期,将接口切换到同步模式。
当PHY处于同步模式时,LINK可以读取Carkit中断锁存寄存器Carkit Interrupt Latch以确定中断源。
1.5 保护PHY输入信号
由于包括但不限于硬件复位或缓慢通电的原因,LINK可能无法正确驱动ULPI接口。在这种情况下,当PHY的dir拉低时,LINK无法将数据驱动到空闲00h状态。PHY数据输入信号上的未知值可能会启动未经请求的USB活动、寄存器写入、串行或Carkit传输。
因此,PHY必须始终保护其数据输入。
为了防止数据输入上的错误命令,PHY必须在stp上包含一个弱上拉电阻器。
任何时候stp出乎意料地高,PHY都认为LINK无法驱动接口,并且必须进入保持状态。
当处于保持状态时,PHY不得使用数据上的命令,并且不得拉高dir,除非其内部时钟不稳定。LINK还被允许在任何时候将stp驱动为高电平,从而迫使PHY停止使用数据上的命令。
当PHY处于保持状态时,它可以选择性地在数据上启用弱下拉电阻器,防止它们浮动。
当PHY处于保持状态时发生的所有RXCMD更改必须用单个RX CMD更新来替换,当ULPI总线可用时,PHY退出保持状态时发送该更新。RX CMD更新必须始终传达当前RXCMD值,而不是以前或旧的值。
如果LINK始终可以将stp和数据驱动到已知值,则可以通过将接口控制寄存器Interface Control中的接口保护禁用位Interface Protect Disable设置为1b来禁用保护功能,这会降低功耗。
当时钟运行时,LINK应在停止驱动ULPI接口之前将stp驱动高至少一个时钟周期,迫使PHY进入保持状态以保护其数据输入。PHY中的上拉将在随后的周期中保持stp为高,如图所示。
对于LINK在停止驱动ULPI接口之前无法将stp驱动为高电平的实现,无法保证PHY操作的安全性。
在通电期间或时钟未运行时,PHY始终拉高dir,以保护其数据输入,如图所示。如果当PHY拉低dir时stp为高,则PHY将立即进入保持状态并保护其数据输入。当LINK将stp驱动为低时,PHY立即开始处理其数据输入。
如图所示,如果当LINK停止驱动ULPI接口时PHY处于低功耗模式,则stp上的上拉将自动唤醒PHY。如果LINK不希望PHY自动唤醒,则它必须将stp驱动为低电平。
如果当LINK恢复驱动ULPI接口时dir为高,则LINK应当假定PHY处于低功率模式并且驱动stp为高以唤醒PHY,如图所示,在拉低dir之后的时钟中,LINK拉低stp。当dir和stp都为低电平时,PHY在当前时钟周期中开始处理其数据输入。这也适用于通电期间。
如图所示,当dir为高时,LINK可以在通电期间将stp驱动为低电平。
当dir被拉低时,PHY在周转周期之后开始处理其数据输入。
1.6 总结
本篇讲解了低功耗,全速/低速串行模式,Carkit模式,以及PHY输入信号的保护处理。其中低功耗模式是必须的,其他的是可选实现的。
1.7 参考
《UTMI+ Low Pin Interface (ULPI) Specification Revision 1.1 October 20, 2004》
《MicroChipAN 19.17 ULPI Design Guide》
审核编辑:汤梓红
标签:
免责声明:市场有风险,选择需谨慎!此文仅供参考,不作买卖依据。