USB的高速速率是如何确定的?

从全局说起。先说host对dev的插入检测。由于dev插入到host,导致为0的D+和D-线突然有了电平变化,有且只有一根线的电平会变。在高速和全速模式下,D+线会被拉高;在低速模式下D-线会被拉高。同时,host会对插入的dev进行消抖检测,在RTL中延迟一段时间,认为抖动结束,开始真正地检测dev是否插入。

当检测到dev插入,host状态机从PRT_DISCON转向PRT_DISABLE,因为此时仅用于检测插入,还没有使能该port,故状态机名字叫做PRT_DISABLE。对host,会给ulpi phy连续发送两个数,0x84和0x50,查ulpi手册得知,这两个数是给ulpi芯片的地址0x4写入0x50,将host的port opmode(port的操作模式)切换成disable bit-stuff和disable NRZI编码,这就是通知upli PHY,下一步要发送k j序列了,不要耽误事,不要对我的k j序列进行编码解码。对于高速host,在切换port的op_mode后,才能发送复位,才能进入等待chirp k状态;对于全速设备,直接进入复位状态。以下以高速host为例。

等待chirp k,如果插入的dev也支持高速传输,则会拉高D-线一段时间,向host发送chrip k,host收到后会向dev发送至少3对的k j序列,与dev握手,dev收到后将自己切换成高速状态。这就是chrip的handshake。

随后,host将prt_opmode切换,将PHY变成NORMAL模式。

chirp handshake结束后,D+和D-自然就回到了SE0态,即D+/D-为0。那么此时host由于处于HST_CHIRP_DONE状态,并不会将SE0视作复位,并且该SE0持续时间很短,大概200us,而USB协议复位需要持续ms级时长才能被当作复位。

随后,host状态切换为正常状态,开始每隔125us发送起始帧。

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值