握手

握手是两个实体(一般是存在于不同的线程中)完成一次交互。这个交互在并行编程中,常见的是告知对方可以继续下去了,用于同步或协作。在协议中,一般是做一些校验或履行规则之类,类似于暗号的东西。在并行编程中,主动方一般是notify方,而被动方就是wait方。程序观中的消息范式和握手范式是等价的。但是两者在不同的场合下,所体现出的直观性不同,在并行编程中,握手更能形象的表达其中的关系。另外,握手机制(wait-notify)是线程间同步或协作的最基本手段,是一个核心的概念。更高的抽象是阻塞队列,栅栏等。

在USB协议中,握手阶段是设备与主机之间进行通信的重要组成部分,主要用于设备的枚举过程。握手信号的交换确保了设备和主机之间的正确连接和数据传输准备。以下是握手阶段的主要工作原理和步骤: ### 握手阶段的基本原理 握手阶段的核心目的是确认设备和主机之间的连接状态,并为后续的数据传输做好准备。在USB协议中,握手信号通常通过特定的包类型(如ACK、NAK、STALL等)来实现。这些信号确保了数据传输的可靠性和设备状态的确认。 ### 握手阶段的主要步骤 1. **设备连接检测** 当设备插入到USB端口时,主机控制器会检测到设备的连接。此时,主机通过检测设备的上拉电阻来判断设备的速度类型(低速、全速或高速)。 2. **设备复位** 主机发送一个复位信号(Reset)给设备,以初始化设备并将其置于默认状态。这个复位信号会持续至少10毫秒,确保设备完全复位。 3. **设备枚举** 在复位完成后,主机开始枚举过程,通过一系列控制传输来获取设备的信息。这个过程包括: - **获取设备描述符**:主机发送请求以获取设备的基本信息,如设备的类别、支持的USB版本等。 - **设置设备地址**:主机为设备分配一个唯一的地址,以便后续通信使用。 - **获取配置描述符**:主机请求设备的配置信息,包括设备支持的接口和端点等。 - **选择配置**:主机根据获取的配置信息选择一个合适的配置,以激活设备的功能。 4. **握手信号交换** 在枚举过程中,设备和主机之间会交换握手信号。例如: - **ACK**:表示数据包已被正确接收。 - **NAK**:表示设备暂时无法处理请求,主机需要稍后重试。 - **STALL**:表示设备无法完成请求的操作,通常需要主机进行错误处理。 5. **数据传输准备** 一旦握手信号交换完成且设备被正确配置,设备和主机之间的数据传输通道就准备就绪。此时,主机可以开始发送或接收数据。 ### 握手阶段的实现示例 以下是一个简单的代码示例,展示了如何通过USB协议发送握手信号: ```c // 模拟发送ACK握手信号 void send_ack_handshake() { // 发送ACK包 usb_send_packet(ACK_PACKET); // 等待确认 while (!usb_check_ack_received()) { // 等待握手信号确认 } } // 模拟发送NAK握手信号 void send_nak_handshake() { // 发送NAK包 usb_send_packet(NAK_PACKET); // 等待重试 while (!usb_retry_needed()) { // 等待重试请求 } } // 模拟发送STALL握手信号 void send_stall_handshake() { // 发送STALL包 usb_send_packet(STALL_PACKET); // 处理错误 handle_error(); } ``` ### 握手阶段的重要性 握手阶段在USB协议中起到了关键作用: - **可靠性**:通过握手信号,主机和设备可以确认数据的正确传输,避免了数据丢失或损坏。 - **状态管理**:握手信号帮助主机了解设备的状态,例如设备是否准备好进行数据传输。 - **错误处理**:如果设备无法完成请求的操作,握手信号(如STALL)可以通知主机进行相应的错误处理。 通过上述步骤和机制,USB协议确保了设备和主机之间的高效通信和数据传输可靠性。握手阶段是整个USB通信过程中的基础,为后续的数据传输奠定了坚实的基础。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值