当前位置:   article > 正文

ULPI的上电、速率协商过程以及暂停和唤醒

ulpi

ULPI的速率协商过程

3.8.5.1 HI_speed detection handshake(chirp)
高速握手信号(chirp)如表3-5所示。注意表3-5的时序是不成比例的,即中间可能跳过了一些时钟周期,并且不是所有的rx_cmd更新都被显示出来了。而且turnaround的时钟周期(本该在每次dir拉高或拉低时显示出一拍的)也没有被显示出来。
1、全速/低速探测:当主机探测到外围设备的D-为高时则认为当前设备为低速设备,当探测到D+为高时则认为当前设备为全速设备。如果主机探测到了一个低速外围设备,则该设备不符合该协议的剩余部分。/应该是由phy探测的吧?
2、主机驱动:如果主机探测到了一个全速的外围设备(phy发送了linestate为01的RX_CMD),则通过写PHY中的function control寄存器(见下面的3.8.3.1,这次写寄存器实际上是和第二次复位写寄存器同时的)的XcvrSelect信号置为00b(HS)、TermSelect置为0b、opmode设为2’b10,之后在ULPI上写SE0/phy给的? ans:看dir(PHY发出SE0的同时,会把D+和D-使用45欧姆电阻下拉匹配),便于收发chirp。SE0的开始被称为T0。外围设备的phy通过把dir拉高,然后通过rx_cmd告知LINK linestate的改变。
3、外围的响应: 在检测到SE0至少2.5us之后如果外围设备具备高速能力(如果不具备高速能力,则不发送chirp k,保持SE0),外围LINK将PHY中的function control寄存器的XcvrSelect信号置为00b(HS)、把opmode设为2’b10(chirp)//不用再次写寄存器,保持原值即可,然后phy传输一个chirp k(linstate置为10b)至少1ms。并且chirp k在T0之后的7ms内必须结束。如果外围设备处于低功率模式,则设备必须在5.6ms之内唤醒时钟,留下200us给LINK的chirp k传输的开始,1.2ms预留给chirp k的完成。
4、主机响应:如果主机没有探测到外围的chirp,则其必须保持SE0直到复位结束。如果主机探测到外围设备的chirp k不少于2.5us,在总线离开chirp k状态不超过100us,主机发出chirp k和chirp j()交替的TX_CMD(NO_PID)///主机怎么发chirp k??ans:两个时钟周期的NO PID格式的tx cmd,之后一直传输8’hff,而且每个单独的chirp k和chirp j的时间都在40us到60us之间。
5、HS idle:外围设备必须检测到最小三组chirp k和chirp j的交替。每个单独的chirp k和chirp j都必须被探测到至少2.5us,当探测到最小序列后,Link通过写PHY中的function control寄存器设置TermSelect = 0b且Opmode = 00b。目前外围设备处于高速模式且linestate上的值为01b,当外围设备发现linestate上的值变为10b时,表明主机已经完成了chirp并在等待高速USB传输的开始。当发射chirp序列后,主机把Opmode信号置为00b并且开始发出USB packet。
在这里插入图片描述
在这里插入图片描述

一、全速模式下的暂停与唤醒

图3-8阐述了主机或者hub是如何进入全速模式下的暂停,以及接下来是如何开始重启来唤醒下游的全速外围设备。
1、FS_Traffic(全速传输状态):开始时,主机和外围设备在USB总线上发送全速的报文(Xcvrselect置1),主机激活15千欧的下拉(DpPulldown和DmPulldown两个信号都置1),45欧的终端是非使能的状态(TermSelsct置1),外围设备将D+信号做了1.5千欧的下拉。
2、FS Suspend(全速的暂停):如果外围设备发现总线上3ms没有动作了,那么就启动了暂停状态,外围设备的Link将phy置为低功率模式通过设置SuspendM bit,该bit在3.9中有描述。主机可能有被上电。
3、Resume K(重启):当主机想要唤醒外围设备时,需要将Opmode置10b,并由主机发出chirp k持续20ms。这期间linestate的值为10b,chirp k结束时拉高stp来唤醒phy。
4、EOP:当phy检测到stp拉高时会自动加上LS EOP(即两个时钟周期的SE0
  • 1
  • 2
  • 3
  • 4
  • 5

(linestate写为00b),然后接着把linestate写为FS J(01b)), phy之所以知道要加入LS EOP是因为主机将DpPulldown和DmPulldown两个信号都置1了,当LS EOP结束,主机将Opmode信号置为00b来进行正常的全速传输。

在这里插入图片描述
在这里插入图片描述

二、高速模式的暂停和唤醒

加粗字体表示与全速不同的部分

图3-9阐述了主机或者hub是如何进入高速模式下的暂停以及接下来是如何开始重启来唤醒下游的全速外围设备。注意表3-5的时序是不成比例的,即中间可能跳过了一些时钟周期,并且不是所有的rx_cmd更新都被显示出来了。而且turnaround的时钟周期(本该在每次dir拉高或拉低时显示出一拍的)也没有被显示出来。
1、HS_Traffic(高速传输状态):最初,主机和外围设备在USB总线上发送高速的报文(Xcvrselect置00b),主机激活15千欧的下拉(DpPulldown和DmPulldown两个信号都置1),45欧的终端是使能的状态(TermSelsct置0)
2、FS Suspend(全速的暂停):如果外围设备发现总线上3ms没有动作了,那么就启动了暂停状态,link将phy置为全速模式(XcvrSelect置为01b),移除45欧的终端,并使能D+信号的1.5千欧的上拉(TermSelect置为1b)。//这两个寄存器的操作和全速的第一步的操作相同,即可以认为全速和高速在暂停时的处理一致,即将XcvrSelect和TermSelect都写为1即可。外围设备的Link将phy置为低功率模式通过设置SuspendM
bit,该bit在3.9中有描述。主机可能有被上电。
3、Resume K(重启):当主机想要唤醒外围设备时,需要将Opmode置10b,并由主机发出chirp k持续20ms。这期间linestate的值为10b,chirp k结束时拉高stp来唤醒phy。
4、HS_Traffic(高速传输状态):主机link设置为高速模式(将XcvrSelect置为00b),并使能45欧的终端(TermSelect置为0b),外围设备的Link看到linestate为SE0状态(00b),同时设置为高速模式(将XcvrSelect置为00b),并使能45欧的终端(TermSelect置为0b)。主机Link将Opmode信号置为00b为了正常的HS模式的操作。
在这里插入图片描述
在这里插入图片描述

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号