CDC SendBreak
2025-07-11
0
0
1. SendBreak 请求用途
SendBreak 用于发送特殊的载波调制信号,生成RS-232风格的break信号。
主机通过此请求控制设备产生指定持续时间的break信号,常用于:
- 串口通信中的流控制
- 设备复位信号
- 协议同步信号
- 中断当前传输
2. USB 控制传输格式
字段 | 值/说明 |
---|---|
bmRequestType | 0x21 (00100001B) 方向:主机到设备,类型:类,接收者:接口 |
bRequest | 0x23 (SEND_BREAK) |
wValue | Break信号持续时间(毫秒)<br>0xFFFF:持续break直到收到wValue=0x0000的请求 |
wIndex | 接口号 |
wLength | 0 |
Data | 无 |
3. wValue 字段说明
- 0x0000:停止break信号
- 0x0001-0xFFFE:break持续时间(毫秒)
- 0xFFFF:持续break,直到收到停止命令
典型值示例:
- wValue = 0x0064:100ms break
- wValue = 0x00C8:200ms break
- wValue = 0xFFFF:持续break
- wValue = 0x0000:停止break
4. 典型主机端请求示例
C 结构体示例:
USB_SETUP_PACKET setup = {
.bmRequestType = 0x21, // 主机到设备,类,接口
.bRequest = 0x23, // SEND_BREAK
.wValue = 0x0064, // 100ms break
.wIndex = interface_number, // 通信接口号
.wLength = 0 // 无数据阶段
};
// 发送setup包,无data阶段
持续break示例:
// 开始持续break
USB_SETUP_PACKET setup_start = {
.bmRequestType = 0x21,
.bRequest = 0x23,
.wValue = 0xFFFF, // 持续break
.wIndex = interface_number,
.wLength = 0
};
// 停止break
USB_SETUP_PACKET setup_stop = {
.bmRequestType = 0x21,
.bRequest = 0x23,
.wValue = 0x0000, // 停止break
.wIndex = interface_number,
.wLength = 0
};
5. 设备端处理要点
- 解析 wValue:
- 0xFFFF:开始持续break
- 0x0000:停止break
- 其他值:定时break(毫秒)
- 生成相应的break信号。
- 完成后通过状态阶段(Status Stage)ACK主机。
6. Break信号特性
- 信号电平:通常为逻辑低电平(0V)
- 持续时间:根据wValue指定
- 用途:
- 流控制
- 设备复位
- 协议同步
- 中断传输
7. 常见应用场景
场景 | wValue | 说明 |
---|---|---|
设备复位 | 0x00C8 | 200ms break复位设备 |
流控制 | 0x0064 | 100ms break暂停传输 |
持续监控 | 0xFFFF | 持续break直到停止 |
停止break | 0x0000 | 停止当前break信号 |
8. 参考
- USB CDC 规范 6.2.15](https://www.usb.org/document-library/class-definitions-communication-devices-12)
- RS-232 Break信号](https://en.wikipedia.org/wiki/RS-232#Break_signal)