usb高速握手过程

关键词: USB2.0   UTMI   枚举 高速 全速 空闲 复位 挂起 速度检测 chirp J chirp K    

低速设备D-上有一个1.5k欧的上拉电阻。
高速和全速设别在D+上有一1.5k欧上拉电阻。
连接后通过检测电压变化来了解设备是否为低速设别。

低速下:D+为“0”,D-为“1”是为“J”状态,“K”状态相反;
全速下:D+为“1”,D-为“0”是为“J”状态,“K”状态相反;
高速同上。

低速下空闲状态为“K”状态;
全速下空闲状态为“J”状态;
高速下空闲状态为“SE0”状态;

对于全速操作,SE0表示为复位和EOP,持续时间大于2.5us表示总线复位;
对于高速操作,SE0维持3ms~3.125ms,设备进入全速状态,全速后100us~875us内采样,如果继续维持SE0,则设备总线复位,开始高速握手;
若变为“J”状态,则进入挂起状态”suspend“。

高速握手条件:
1.设备处于挂起状态,若出现SE0则立即开始高速握手;
2.设备处于全速,SE0持续2.5us,则开始高速握手;
3.设别处于高速,SE0持续3.0ms,切继续持续,则开始高速握手。

高速握手过程处于总线复位阶段。

chirp J,只有D+被驱动,chirp K相反。

高速握手过程:
当设备为非低速设备,且总线处于SE0状态才可以进行高速握手。

1.在复位阶段,scvrselect和termselect为全速状态,DP被上拉,HS terminations被
屏蔽,opmode被驱动disable bit stuffing and nrzi encoding状态。
2.xcvrselect变为高速时,设备发送chirp K暨全零信号到主机,同时txvalid有效。
3.高速集线器检测到chirp K后发送一串交替的chirp K J对,设备检测到三个chirp K J对后,
驱动termselect为高速。
4.高速集线器发现termselect变化后持续若干chirp K J对后进入短暂SE0状态,之后便开始
发送sof 包。
5.高速握手成功。

若设备在发送chirp K后没有相应,则设备只能工作在全速模式。


### USB2.0 握手流程详解 #### 握手信号定义 USB2.0握手过程中涉及多个特定的信号,用于确保主机与设备之间的通信正常建立。主要握手机制通过 SE0 (Single Ended Zero),J 和 K 状态来实现[^1]。 - **SE0**: 表示总线处于空闲状态,D+ 和 D- 都被拉低。 - **J State**: 正常状态下默认保持的状态,其中一条数据线高电平另一条低电平。 - **K State**: 与 J state 相反的数据线高低电平配置。 #### 握手阶段描述 当连接发生时,USB 设备进入复位状态并接收到来自主机发出的一系列同步脉冲之后: - 主机会发送复位条件给新接入的外设,这期间总线上维持至少 10ms 的 SE0 来初始化设备; - 接着主机释放总线回到 J 态,等待一段时间让设备完成内部初始化; - 新加入的设备响应此事件,在检测到非 SE0 后立即回复应答包 ACK 或者 NAK/STALL(取决于当前准备情况),此时它也切换到了已知的工作模式——全速(Full Speed)或低速(Low Speed)[^2]; - 对于高速(High-Speed)设备,则会在上述基础上进一步执行林格编码(Link Pulse Coding)协商过程以确认支持更高的传输速率。 ```python def usb_handshake(): """ Simulate the basic handshake process of a USB device connecting to host. This function demonstrates simplified steps involved during initial connection setup between USB devices and hosts according to USB2.0 specifications. """ print("Host sends reset signal by holding bus in SE0 for at least 10 ms.") time.sleep(0.01) # simulate delay print("Device detects non-SE0 condition on bus after initialization completes.") if random.choice([True, False]): response = "ACK" else: response = "NAK or STALL" print(f"Device responds with {response} indicating readiness status.") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值