ULPI的同步模式是最主要的模式,内容也比较多,所以单独一篇介绍。
ULPI修改原始的UTMI数据流,使其能够适应更多的数据类型。
传输期间PID字节中的冗余信息被ULPI传输命令(TX CMD)重载。
接收流中未使用的数据字节被接收命令(RX CMD)重载。
ULPI定义了由LINK发送的发送命令字节Transmit Command 和由PHY发送的接收命令字节 **Receive Command ** 。
以上的发送接收是以LINK的角度来看的。
LINK通过发送下表发送命令字节来启动到PHY的传输。TX CMD字节由2位命令代码和6位有效载荷组成。
2位命令代码可以定义4种命令类型。
PHY发送下表的接收命令字节,以更新线路状态、USB接收、断开连接和OTG状态信息给LINK。
RX CMD中的VbusValid指示来自内部VbusValid比较器或外部Vbus指示输入。
Hostdisconnect 主机断开连接状态必须仅在主机模式下指示给LINK(DpPulldown和DmPullddown均设置为1b。
当处于设备模式时,必须忽略Hostdisconnect,并且不能屏蔽RxActive或RxError上的事件。
RX CMD仅在同步模式下发送,并将两种类型的信息传输到LINK。第一个是USB接收信息。第二个是中断事件。所有信息被编码到单个RX CMD字节中。
USB接收信息包括线路状态LineState、RxActive和RxError。
在USB传输之后,PHY必须向LINK发送具有指示EOP的LineState的RX CMD。
对于高速,EOP就是LineState 的!squelch到squelch 。
对于全速和低速,EOP是LineState从SE0到J的转换。
中断事件包括Hostdisconnect、Vbus、IdGnd和其他源,如Carkit中断。
只要检测到这些事件,相应的USB中断启用上升沿USB Interrupt
Enable Rising 或USB中断启用下降沿寄存器USB Interrupt Enable Falling
配置了,就会向LINK发送RX CMD。
如图说明了PHY如何向LINK发送RX CMD信息。第一个数据包显示单个RX CMD。如果检测到连续的更改,PHY将保持dir拉高并驱动连续的RX CMD,如第二个数据包所示。LINK必须能够接受任何数量的连续的RX CMD。
RX CMD的优先级低于USB接收和传输数据,但优先级高于寄存器读取和写入命令。
如果ULPI总线忙于传输USB数据,则RX CMD将在PHY中排队,并在ULPI总线可用时发送。
当发送到LINK时,排队的RX CMD必须始终传达当前RX CMD值,而不是以前或旧的值。
当在USB接收数据包期间nxt被拉低,PHY也必须向LINK发送RX CMD。
本节介绍如何通过ULPI总线传输和接收USB数据包。给出了PHY和LINK处理延迟的限制,以便可以满足USB数据包间延迟。
如图所示,为了发送不包含数据包标识符(PID)的USB数据,LINK发送NOPID类型的TX CMD字节。
PHY可以拉低nxt以限制来自LINK的数据。PHY在TX CMD的第一个时钟周期中不能拉低nxt,并且必须在检测到stp高时去拉低nxt。
由于该命令不包含PID数据,PHY必须等待下一个数据字节,然后才能开始在USB上传输。
当最后一个字节已经被PHY接收时,LINK拉高stp1个周期,并且如果没有发生传输错误,则将数据驱动到00h空闲状态。在第一个字节被PHY接收之前,链路不得拉高stp。
该命令必须用于啁啾chirp 和恢复resume 信号,对于这种信号,必须首先将功能控制寄存器中Function Control 的OpMode位设置为10b。对于啁啾和恢复信号,PHY不需要插入填充比特,因此必须保持nxt为高,直到它看到stp脉冲为止。
当LINK用NOPID数据包驱动ULPI总线时,PHY不应拉高dir,除非它想中止数据包。
所有USB数据包传输期间的RX CMD更改,必须用在USB传输结束时,ULPI总线可用时,发送的单个RX CMD更新来替换。即USB数据传输过程中状态的变化不需要管了,最后发一个最终的状态RX_CMD给LINK即可。RX CMD更新必须始终传达当前RX CMD值,而不是以前或旧的值。
如图所示,为了传输USB数据包,Link首先驱动一个TX CMD字节。命令字节类型设置为01b(传输),并将USB数据包标识符(PID)放置在数据上(3:0)。
PHY使用nxt控制数据接收,LINK在检测到nxt为高之后提供下一个字节,这与UTMI的DataIn和TxReady相同。当最后一个字节已经被PHY接收时,LINK拉高stp 1个时钟周期,并且如果没有发生传输错误,则将数据驱动到00h空闲状态。
在第一个字节被PHY接收之前,LINK不得拉高stp。
对于所有PID数据包,PHY必须自动准备SYNC域并附加EOP域。当TX CMD的PID字段为5h时,PHY必须识别出这是帧开始(SOF)包,并且自动附加长EOP。
在拉高stp之后,LINK不能发送另一个数据包,直到第一个数据包在USB上完成。
如果在给定定时之前接收到RX CMD表示有EOP,LINK可以开始传输下一个数据包。PHY必须始终发送指示EOP的RX CMD。
当LINK用PID数据包驱动ULPI总线时,PHY不应拉高dir,除非它想中止数据包。
所有USB数据包传输期间的RX CMD更改,必须用在USB传输结束时,ULPI总线可用时,发送的单个RX CMD更新来替换。即USB数据传输过程中状态的变化不需要管了,最后发一个最终的状态RX_CMD给LINK即可。RX CMD更新必须始终传达当前RX CMD值,而不是以前或旧的值。
UTMI+规格书所述,PHY必须在传输期间内部阻塞USB接收路径。
USB data transmit (PID)
PHY drives an RX CMD to indicate EOP (FS/LS LineState timing not to scale)
如果LINK在全速或低速USB数据包传输过程中遇到缓冲区运行不足,则必须在数据包结束前在数据包中插入一个位填充错误。为了强制表示传输错误,LINK在数据包结束时,在它拉高stp的同一时钟周期中,将FFh驱动到数据上。LINK只能驱动一个字节的FFh,PHY将通过在USB总线上发送至少8个连续的1来自动生成全速传输错误。在发送另一个数据包之前,LINK必须等待指示SE0-to-J转换的RX CMD。在第一个字节被PHY接收之前,LINK不得拉高stp。该序列取代了UTMI在传输的最后一个字节期间将OpMode从00b更改为10b的方法。为了强制表示高速传输错误,LINK必须在数据包末尾传输值翻转的CRC。
如图所示,当PHY接收到USB数据时,它首先通过拉高dir获得数据总线的所有权。
PHY在与UTMI的RxActive有效相同的周期中拉高dir。
如果dir先前为低,则PHY将拉高dir和nxt,LINK立即接收RXCMD知道这是USB接收数据包。
如果dir先前为高,PHY将拉低nxt并驱动RX CMD,RxEvent字段设置为01b(RxActive状态),以便LINK接收RX CMD直到状态。
PHY可以在下一个周期中开始驱动数据,或者输出RX CMD,直到USB数据可用。
PHY拉高nxt并在总线上发送一个字节,将有效的USB数据包数据发送给LINK。
当nxt为低电平时,PHY驱动RX CMD字节。
USB包接收过程中的状态变化即RX CMD变化,必须在nxt为低时,发出。
如果nxt在数据包接收期间从不为低,则必须在USB数据包接收结束时ULPI 总线可用时发送单个RX CMD更新来替换所有RX CMD改变,即最后只发送一次RX CMD状态,中间的就不管了。RX CMD更新必须始终传达当前RX CMD值,而不是以前或旧的值。
虽然数据流已从UTMI的DataOut修改,但nxt与RxValid相同。
当RX CMD字节显示RxActive被设置为0b或dir被拉低(以先发生者为准)时,LINK认为数据包已完成。
如果PHY检测到USB数据包接收错误,它将忽略任何当前接收的数据字节,拉低nxt,并在RxEvent字段设置为11b的情况下驱动RX CMD字节(RxError状态)。
当RxActive被设置为0时,PHY拉低dir。RxError状态与UTMI的RxError信号相同。
当检测到全速位填充错误时,所有PHY实现都必须设置RxError。
PHY可以选择性地为未与字节边界对齐的高速EOP、数据溢出、数据下溢或其他有效接收错误条件设置RxError。
PHY在EOP之前不对单个全速dribble bit 位设置RxError。
LINK必须忽略出现接收错误的数据包。
如图显示了在数据包中间检测到比特填充错误时ULPI接口的行为。
如图显示了在最后一个CRC字节中发生位填充错误时的行为。
USB规范定义了数据包间时间。ULPI规范通过指定PHY和LINK可用的时钟周期的预算,将这些定时关联回ULPI接口。
PHY必须在给定的定时范围内处理数据。
类似地,LINK必须在给定的决策时间内做出响应,或者如果在给定的时间范围内没有收到响应,则超时。以下详细说明所有要求的ULPI数据包间定时,并源自USB规范和UTMI PHY处理和同步延迟(来自UTMI规范)。
全速数据包间延迟是从第一个数据包的SE0到J转换到第二个数据包上的SYNC域开始测量的。
高速包间延迟是从总线在第一包结束时进入空闲状态开始测量的,直到总线在第二个数据包开始时离开空闲状态时计算。
一个时钟周期有8个HS位时间,一个FS位时间有5个时钟周期,一个LS位时间有40个时钟周期。如图所示
USB规格指定的包间时间
位宽和时钟关系
Transmit-Receive时间:在USB规范中定义为,最大连接的USB系统,包括通过6根USB电缆、5个外部集线器和下游主机或外围设备的来回程时间。
使用ULPI接口的任何PHY必须符合表中给出的时序。
USB总线事件是相对于D+和D-线上的转换来测量的。
ULPI接口定时是相对于检测到转换的时钟边缘来测量的(例如,PHY在时钟de 边缘检测stp).
RX CMD Delay:与UTMI的线路状态延迟2-3个时钟相同,但由于RX CMD期间ULPI总线周转turn around,最大值增加了1个额外的时钟周期。
下表给出了为各种包序列分配给ULPI LINK的时间。当LINK传输第二个数据包时,它必须满足数据包间的延迟。当LINK期望对传输的数据包做出响应时,它必须对数据包间延迟进行计时,以检测超时。对于连续接收数据包,LINK必须能够在给定的时间内接收它们。
Transmit-Transmit,Receive-Transmit:与UTMI的FS SIE决策时间7-19时钟相同,但由于ULPI PHY在RX CMD期间需要总线周转turn around,因此从最大值减去1个时钟周期.
Transmit-Receive,UTMI规范说明高速传输到接收时间不正确,应忽略。
如图说明了各种包序列的PHY管道延迟和LINK决策时间。
高速发送-发送包时序
高速接收-发送包时序
寄存器写
LINK发送寄存器写入命令字节并等待nxt拉高。在nxt拉高之后的时钟周期中,Link发送写入寄存器的数据,并等待nxt再次拉高。当nxt第二次拉高时,Link在下一个时钟周期中拉高stp以完成操作。PHY必须检测stp拉高,然后才能接受另一个传输命令。如果PHY通过拉高dir中止RegWrite,则LINK必须在总线空闲时重试RegWrite。
寄存器读
LINK发送寄存器读取命令字节并等待nxt的拉高。在nxt拉高之后的时钟周期中,PHY拉高dir以获得对数据总线的控制。在dir拉高之后的时钟周期中,PHY必须返回寄存器读取数据。
当在寄存器读取操作期间,即使是在寄存器内容返回的时钟周期拉高dir,PHY也不拉高nxt。
这允许USB数据接收在任何时钟周期内始终优先于寄存器读取。如果PHY早于下图中所示时刻拉高dir中止RegRead,则当总线空闲时,LINK必须重试RegRead
寄存器读取是ULPI不使用nxt来掐断数据的唯一实例。nxt信号仅在USB接收期间被拉高,使得LINK能够始终将USB数据接收与其他数据传输区分开来。
下显示了在初始发送命令字节期间被USB接收中止的寄存器读取或写入。
下图显示了在寄存器读取数据返回到LINK的同一时钟周期内,USB接收中止了寄存器读取。
在以上两种情况下,PHY都拉高dir和nxt以指示RxActive。
寄存器读取和写入操作也会因PHY发送RX CMD而中止,除非是在寄存器读取数据返回到LINK的时钟周期内。
下图显示了在寄存器读取数据返回到LINK的同一周期中发生的USB数据接收。PHY必须首先返回寄存器读取数据,而不是指示RxActive的RX CMD字节。PHY在下一个周期中指示RxActive,将USB接收数据与寄存器读取连续放置
下图显示了在寄存器读取完成后的时钟中立即发生的USB数据接收。PHY将USB接收数据与寄存器读取连续放置。
LINK必须能够接受连续的数据包,其中dir不会在数据包之间拉低。
如下图所示,如果dir在寄存器写入操作结束时拉高stp的同一时钟周期拉高,则PHY认为寄存器写入已成功完成。PHY不会因为stp而拉低dir。
下图显示了在寄存器读取数据返回到LINK后的时钟周期中开始的USB数据接收。
注意,当dir在一个周期周期内拉低时,总线周转turn around的两个周期。
在所有情况下,PHY拉高dir和nxt以指示RxActive。
对立即寄存器地址2Fh的访问表示对扩展寄存器集的访问。在这种情况下,地址在下一个时钟周期内可用。
寄存器写
对于扩展寄存器写入,如图所示,Link发送一个地址设置为2Fh的寄存器写入命令,并等待nxt拉高。在nxt拉高之后的时钟周期中,Link发送扩展寄存器地址,并等待nxt再次拉高。
当 nxt 第二次拉高时,LINK发送寄存器写入数据并等待 nxt 再次拉高。当nxt第三次拉高,LINK在接下来的时钟周期拉高stp,以完成操作。如果PHY通过拉高dir中止RegWrite,则LINK必须在总线空闲时重试RegWrite。
寄存器读
对于扩展寄存器读取,如图所示,Link发送一个地址设置为2Fh的寄存器读取命令,并等待nxt拉高。在nxt拉高之后的周期中,Link发送扩展寄存器地址,并等待nxt再次拉高。当nxt第二次拉高时,PHY拉高dir以获得对数据总线的控制。在dir拉高之后的周期中,PHY返回寄存器读取数据。当在寄存器读取操作期间拉高dir时,即使在返回寄存器读取数据的时钟周期期间,PHY也不拉高nxt。这允许USB接收在任何周期内优先于寄存器读取。如果PHY在下图所示之前通过拉高dir中止RegRead,则当总线空闲时,LINK必须重试RegRead
除了扩展地址字节周期外,扩展寄存器读取与立即寄存器读取相同。
有一个额外的情况,如图所示,在扩展地址周期期间,USB接收中止了扩展寄存器读取。
PHY发送RX CMD也会中止扩展寄存器读取和写入操作,但在寄存器读取数据返回到LINK的周期期间除外。
当LINK在ULPI总线上传输数据时,PHY可以通过拉高dir来中止LINK。ULPI没有指定任何会导致这种情况发生的条件。
当PHY在同步模式下拉高了dir时,LINK可以通过拉高stp来中止PHY,如图所示。
在下一个周期中,PHY必须拉低dir,并保持拉低dir直到Link事务完成。如果LINK如图所示执行寄存器写入或USB传输,则PHY必须等待序列末尾的stp脉冲,然后才能重新拉高dir。如果LINK执行寄存器读取,PHY必须返回寄存器读取数据,如图所示,并且如果需要进行USB接收数据或RX CMD,则允许继续拉高dir。
LINK不能在拉高dir的同一周期中中止PHY,并且PHY必须在其首次拉高dir的相同周期中忽略stp。
如果LINK在与拉低dir相同的周期中拉高stp,则PHY必须仍然保证LINK事务。
当PHY中止时,LINK必须在周转turn around周期后立即驱动TX CMD。如果LINK没有立即驱动TX CMD,则允许PHY重新拉高dir,如图所示。
所有ULPI PHY实现必须支持被拉高stp的LINK中止。虽然该功能可以在任何时候使用,但它主要用于LINK通过禁用PHY来关闭babbling端口。如果LINK在USB接收数据包期间拉高stp,则PHY不能保证当前包和下一包期间USB数据的有效性。
以下部分描述了LINK和PHY必须如何在ULPI总线上进行通信,以执行特定的USB操作序列。
图表是在时间轴上水平压缩的,而不是按比例压缩的。
高速检测握手,或称Chirp,如图所示,注意,图中的时间不是按比例排列的,也没有显示所有RX CMD更新。总线周转周期turn around也没有显示,并且必须在dir的每次拉高和拉低后发生一个周期。
必须遵循以下事件顺序
1.FS/LS检测–如果D-为高,主机检测外围设备连接为低速,如果D+为高,则检测为全速。如果主机检测到低速外围设备,则不遵循此协议的其余部分。
2.主机驱动-如果主机检测到全速外围设备,它会通过写入功能控制寄存器并设置XcvrSelect=00b(HS)和TermSelect=0b来重置外围设备,从而驱动总线上的SE0(D+和D-通过45欧接地).主机还设置OpMode=10b用于正确的Chirp发射和接收,接收Chirp会使LineState以不同的方式进行编码,并考虑高速差分接收器输出,以免出现错误的总线活动。SE0的起点标记为T0。设备PHY拉高dir,并使用RX CMD向LINK通知线路状态改变。
3.设备响应-在检测到SE0不少于2.5us后,如果设备具有高速功能,则设备LINK将XcvrSelect设置为00b(HS),将OpMode设置为10b(chirp),并立即发送一个TX CMD(NOPID),发送一个chirp K不少于1ms。并且chirp K必须在复位时间T0之后不超过7ms结束。如果设备处于低功率模式,它必须在5.6ms内唤醒其时钟,留下200us用于LINK开始传输chirp K信号,留下1.2ms用于chirp信号完成(最坏情况下,时钟慢10%)
4.主机响应–如果主机未检测到设备chirp,则必须继续发送SE0,直到重置结束。如果主机在总线离开chirp K状态后检测到设chirp K不少于2.5us、然后不多于100us,主机发送具有交替的chirp K和J序列的TX CMD(NOPID)。每个单独的chirp K或J必须持续不少于40us且不超过60us。
5.HS空闲–设备必须检测到最小的chirp K-J-K-J-K-J。每个单独的chirp K和J必须被检测至少2.5us。在看到该最小序列之后,设备LINK设置TermSelect=0b和OpMode=00b。设备现在处于高速模式,看到LineState的!squelch。当设备在LineState上看到squelch(10b)时,它知道主机已经完成了chirp,并等待高速USB通信开始。发送chirp序列后,主机将OpMode更改为00b,并开始发送USB数据包.
USB将前导数据包定义为低速数据包的报头,低速数据包必须在主机和集线器之间通过全速总线传输。要进入前导码模式,LINK在功能控制寄存器中设置XcvrSelect=11b。当处于前导码模式时,PHY的操作与全速模式相同,并以全速上升和下降时间发送所有数据。每当LINK以前导码模式发送USB数据包时,PHY必须在以低速比特率发送LINK数据包之前以全速比特率自动发送前导码报头。PHY必须确保全速PRE-PID的最后一位和低速包SYNC的第一位之间的最小间隙为4个全速位时间。在发送PRE PID之后,PHY必须驱动J至少1 FS位时间,之后上拉电阻器可以在总线上保持J状态。
在前导码模式中,PHY还可以从全速总线接收低速包。
挂起和恢复由HOST或者HUB启动
下图说明了主机或集线器如何进入低速挂起状态,然后启动恢复信号以唤醒下游低速设备。图计中时不是按比例进行的,也没有显示所有RX CMD线路状态更新。总线周转周期也没有显示,并且必须在dir的每次拉高和拉低后发生一个时钟周期。以下描述了事件的过程。
1.LS通讯-最初,主机和设备通过USB总线发送低速流量(XcvrSelect设置为10b)。主机有其15kΩ 下拉已启用(DpPulldown和DmPullddown设置为1b)和45Ω 终端已禁用(TermSelect设置为1b)。设备具有1.5kΩ 上拉连接到D-(TermSelect设置为1b)。
2.LS挂起–当设备在3ms内没有看到总线活动时,它进入挂起状态。设备的LINK通过设置SuspendM位将PHY置于低功率模式,从而使PHY仅汲取挂起电流。主机可能断电,也可能未断电。
3.恢复K–当主机想要唤醒设备时,它将OpMode设置为10b,并传输LS K至少20ms。设备的LINK看到线路状态上的恢复K(01b),并拉高stp以唤醒PHY
4.EOP–当stp被拉高时,主机PHY自动附加一个LS EOP(2位LS SE0,后跟1位LS J)。主机PHY知道添加LS EOP,因为主机的DpPulldown和DmPulldown被设置为1b。LS EOP完成后,主机LINK将OpMode设置为00b以进行正常LS操作。设备的LINK看到LS EOP并恢复正常LS操作
下图说明了主机或集线器如何进入全速挂起,然后启动恢复信号以唤醒下游全速设备。
图中计时不是按比例进行的,也没有显示所有RX CMD线路状态更新。总线周转周期也没有显示,并且必须在dir的每次拉高和拉低后发生一个周期。以下描述了事件的过程。
1.FS通讯-最初,主机和设备通过USB总线进行全速数据传输(XcvrSelect设置为01b)。主机其15kΩ 下拉已启用(DpPulldown和DmPullddown设置为1b)和45Ω 终端已禁用(TermSelect设置为1b)。设备的1.5kΩ 上拉连接到D+(TermSelect设置为1b)。
2.FS挂起–当设备在3ms内没有看到总线活动时,它进入挂起状态。设备的LINK通过设置SuspendM位将PHY置于低功率模式,从而使PHY仅汲取挂起电流。主机可能断电,也可能未断电。
3.Resume K–当主机想要唤醒设备时,它将OpMode设置为10b,并传输FSK至少20ms。设备的LINK看到线路状态上的恢复K(10b),并拉高stp以唤醒PHY
4.EOP–当stp被拉高时,主机PHY自动附加一个LS EOP(2位LS SE0,后跟1位FS J)。主机PHY知道添加LS EOP,因为主机的DpPulldown和DmPulldown被设置为1b。LS EOP完成后,主机LINK将OpMode设置为00b以进行正常FS操作。设备的LINK看到LS EOP并恢复正常的FS操作。
下图说明了高速主机或集线器如何进入全速挂起状态,然后启动恢复信号以唤醒下游高速设备。图中计时不是按比例进行的,也没有显示所有RX CMD线路状态更新。总线周转周期也没有显示,并且必须在dir的每次拉高和拉低后发生一个周期。以下描述了事件的过程。
1.HS通讯-最初,主机和外围设备通过USB总线进行高速数据传输(XcvrSelect设置为00b)。主机的15kΩ 下拉电阻已启用(DpPulldown和DmPullddown设置为1b)和45Ω 终端电阻已启用(TermSelect设置为0b)。设备的45Ω 终端电阻已启用(TermSelect设置为0b)。
2.FS挂起–当设备在3ms内没有看到总线活动时,它进入挂起状态。设备的LINK将PHY置于全速模式(XcvrSelect设置为01b),删除45Ω 终止并启用1.5kΩ D+上拉(TermSelect设置为1b)。然后,设备的LINK设置SuspendM将PHY置于低功率模式,从而使PHY仅汲取挂起电流。主机也更改为全速(XcvrSelect设置为01b),删除45Ω 终端电阻(TermSelect设置为1b),然后可能断电也可能不断电
3.Resume K–当主机想要唤醒设备时,它将OpMode设置为10b,并传输FSK至少20ms。设备的LINK看到线路状态上的恢复K(10b),并拉高stp以唤醒PHY。
4.HS通讯-主机LINK设置高速(XcvrSelect设置为00b),并启用其45Ω 终端(TermSelect设置为0b)。设备的LINK在USB总线上看到SE0,并设置高速(XcvrSelect设置为00b),并启用其45Ω 终端(TermSelect设置为0b)。主机的LINK将OpMode设置为00b以进行正常HS操作
设备启动远程唤醒(恢复)。当置于USB挂起状态时,Link会记住它最初的操作速度。根据原始速度,LINK遵循以下详细说明的协议之一。下图中,计时不是按比例进行的,并且没有显示所有RX CMD线路状态更新。总线周转周期也没有显示,并且必须在dir的每次拉高和拉低后发生一个周期。
A)主机和设备都以低功耗模式启动。
B) 外设通过重新启用其时钟并设置其SuspendM位来开始远程唤醒。
C) 设备开始驱动总线上的K以发出恢复信号。设备的LINK在传输时应假设线路状态为K(01b)
D) 主机识别恢复,重新启用其时钟并设置其SuspendM位
E) 主机在检测到远程唤醒后1毫秒内接管恢复驱动程序。如果时钟不能在1ms内重新启动,PHY必须实现自动恢复功能。
F) 设备停止驱动恢复
G) 设备看到主机继续驱动恢复。
H) 主机停止驱动恢复,PHY将LS EOP添加到低速恢复的末尾。设备将LS EOP识别为恢复的结束。T1为LS EOP间隔。
J) 主机和设备都通过将OpMode写入正常来恢复正常操作。
A)主机和设备都以低功耗模式启动
B)外设通过重新启用其时钟并设置其SuspendM位来开始远程唤醒。
C)设备开始驱动总线上的K以发出恢复信号。设备的LINK在发送时应假定线路状态为K(10b)。
D)主机识别恢复,重新启用其时钟并设置其SuspendM位
E)主机在检测到远程唤醒后1毫秒内接管恢复驱动程序。如果时钟不能在1ms内重新启动,PHY必须实现自动恢复功能。
F)设备停止驱动恢复
G)设备看到主机继续驱动恢复
H)主机停止驱动恢复,PHY将LS EOP添加到全速恢复的末尾。设备将LS EOP识别为恢复的结束。(T1是LS EOP间隔。)
I)主机和设备都通过写入OpMode和XcvrSelect恢复到正常操作。
A)主机和设备都以低功耗模式启动
B)设备通过重新启用其时钟并设置其SuspendM位(1)开始远程唤醒
C)设备开始驱动总线上的K以发出恢复信号。设备的LINK在发送时应假定线路状态为K(10b)。
D)主机识别恢复,重新启用其时钟并设置其SuspendM位(2)
E)主机在检测到远程唤醒后1毫秒内接管恢复驱动程序。如果时钟不能在1ms内重新启动,PHY必须实现自动恢复功能。
F)设备停止驱动恢复。
G)设备看到主机继续驱动恢复
H)主机停止驱动恢复,总线返回高速空闲状态。设备将高速空闲识别为恢复结束。(T1是LS EOP间隔。
I)主机和设备都通过写入OpMode、XcvrSelect和TermSelect恢复到正常操作
当USB主机检测到来自下游设备或集线器的远程唤醒信号(resume-K)时,主机必须在1ms内接管resume-K信号的驱动。
如果PHY处于主机模式,时钟断电,并且PHY检测到远程唤醒信号,则LINK必须唤醒时钟并接管resume-K信号的驱动。如果时钟无法在1ms内重新启动,PHY必须提供自动恢复功能。如图所示,PHY必须在内部驱动resume-K,直到时钟恢复并接收到NOPID类型的TXCMD。
当时钟恢复时,LINK通过发送NOPID类型的TXCMD来接管resume-K的驱动。当在自动恢复和由NOPID命令中的LINK驱动的恢复-K之间转换时,PHY必须确保在恢复序列期间没有故障。PHY还必须确保在退出低功率模式之前将SuspendM寄存器位自动设置为1b。
实现由PHY供应商确定,但是PHY供应商必须指定时钟唤醒时间TSTART_HOST。
如果时钟可以在1ms内重新启动,则PHY不需要提供自动恢复功能。
接口控制寄存器中的自动恢复位控制自动恢复功能。
USB 中断状态寄存器中的主机断开位指示设备何时连接或断开,并且仅在 PHY 用作主机时才有效(DpPulldown 和 DmPulldown 均设置为 1b)。当用作主机PHY时,未屏蔽的HostDisconnect中的更改会导致PHY生成中断事件通知。
当用作设备(DpPulldown设置为0b)时,PHY决不能生成指示主机断开连接事件的中断事件通知。
此模式会影响数据包的传输方式,并且只能用于高速。
当OpMode设置为11b时,PHY在发送包时不会自动添加SYNC和EOP。PHY必须仍然对数据进行NRZI编码并执行比特填充。当LINK想要传输USB数据包时,它必须发送NOPID类型的TX CMD。在NOPID命令之后,LINK在ULPI总线上发送一个4字节的SYNC模式(00h,00h,0h,80h),然后是PID、数据有效载荷,最后是一个1字节的EOP(FEh),如图所示。不支持UTMI+的TxBitstuffEnable信号。PHY在启动数据包时自动启用位填充,在拉高STP时禁用位填充。LINK在其驱动EOP字节的同一周期中拉高stp。如果在stp被拉高时数据被设置为00h,则PHY将不会在USB总线上传输任何EOP。PHY必须检测PID字节是否为A5h(SOF数据包),并在stp被拉高时自动发送长EOP。为了传输chirp和恢复信号,LINK必须将OpMode设置为10b。
当OpMode设置为11b时发送PID类型的TX CMD将导致未定义的行为。当OpMode为11b时接收RX CMD和USB接收数据包的操作与OpMode 00b相同
LINK通过设置OTG控制寄存器中的DrvVbus位来打开Vbus。如果Vbus电源在PHY外部,则LINK在OTG控制寄存器中设置DrvVbus和可选的DrvVbusExternal位。VBUS控制设置如下表:
ULPI提供完整的SRP支持。LINK使用OTG控制寄存器中的ChrgVbus和DischrgVbus位来开始和结束会话。
ULPI未定义HNP支持。假设HNP是在LINK硬件和/或软件中实现的。这并不妨碍PHY实现者向任何ULPI PHY添加HNP支持,只要其不干扰或违反本规范中定义的ULPI协议即可。
虽然OTG规范提供了单独的A设备和B设备可用的比较器,但具有0.8V至2.0V阈值(VA_SESS_VLD)的A设备比较器也可用于需要0.8V至4.0V阈值(VB_SESS_VLD)的B设备比较器,从而消除了对单独的B设备比较器的需要。具有单独的A设备和B设备比较器的实现可以映射到单个定义(VSESS_VLD)中。ULPI Vbus比较器阈值如表所示。
VA_VBUS_VLD阈值的目的是允许A设备确定其是否能够在VBUS上输出有效电压。因此,ULPI未指定VA_VBUS_VLD阈值的上限,然而,该阈值的上限通常取决于A设备电源的特性。因此如果A器件电源通过将VBUS驱动到VA_VBUS_REF的基准来操作,并且当其目标设备列表上的B设备没有汲取太多电流时,输出电压不会下降到x%以下,则阈值电压将是:
4.4V
如果VBUS电源在PHY外部并且外部电源提供指示VBUS何时有效的信号,
建议该信号是可选引脚ExternalVbusIndicator上PHY的输入,并且该引脚的状态通过RX CMD字节中的VA_VBUS_VLD≤VBUS指示反映到LINK。OTG控制寄存器中的可选UseExternalVbusIndicator位在内部和外部VbusValid指示器之间进行选择
为了支持行业标准的USB电源控制设备,PHY可以可选地支持接口控制寄存器中的两个附加位,IndicatorPassThru和IndicatorComplement。这两个位允许可选的ExternalVbusIndicator引脚与来自功率控制设备的功率有效信号或过电流故障输出互操作,并适应来自功率控制装置的有效高信号或有效低信号。当ExternalVbusIndicator引脚上提供电源故障信号时,PHY必须使用内部VbusValid比较器的输出和外部电源故障信号的逻辑组合来生成VA_VBUS_VLD≤VBUS指示。
下表定义了UseExternalVbusIndicator、IndicatorPassThru和IndicatorComplement寄存器位的使用,以控制ExternalVbusIndicator输入引脚和内部VbusValid比较器输出的使用,从而在RX CMD字节中生成VA_VBUS_VLD≤VBUS指示。表中还列出了每种设置的典型应用。
RX CMD Vbus有效过电流条件
标准外围设备不应使用Vbus Valid来开始操作。内部VbusValid可能不表示Vbus在第五集线器层上有效,允许低至4.375V。因此设备应使用Session valid。
下图提供了内部和外部VbusValid源的逻辑组合的图形表示,以及控制寄存器位如何影响RX CMD字节中的VA_VBUS_VLD≤VBUS指示。UseExternalVbusIndicator、IndicatorPassThru 和 IndicatorComplement 控制寄存器位是单独可选的。PHY可以实现可选控制位的任何组合,然而,如果实现控制位,则它们必须提供表中定义的功能。如果未实现任何控制位,则PHY有责任定义可选ExternalVbusIndicator引脚如何影响RX CMD字节中VA_VBUS_VLD≤VBUS指示的状态
RX CMD VA_VBUS_VLD≤VBUS指示源
根据应用程序的不同,LINK应启用或禁用适当的VBUS中断。下表中给出了典型应用的示例设置,RXCMD中的VbusValid指示来自内部VbusValid比较器或外部Vbus指示输入。
典型应用所需的RX CMD中的VBus指示器
同步模式是ULPI必须支持的且主要的模式,内容比较多,对于软件开发人员来说重点关注下总线时序,即数据是如何交互的,这样必要的的时候可以使用逻辑分析仪进行抓包分析。另外重点关注下各个状态是如何反应在ULPI的寄存器中的,可能底层分析时需要通过寄存器值分析当前状态。
全部0条评论
快来发表一下你的评论吧 !