CDC GetLineCoding
2025-07-11
0
0
1. GetLineCoding 请求用途
GetLineCoding 用于获取当前配置的线路编码参数。
主机通过此请求查询设备当前的异步数据传输格式设置,包括波特率、数据位、停止位、奇偶校验等参数。
2. USB 控制传输格式
字段 | 值/说明 |
---|---|
bmRequestType | 0xA1 (10100001B) 方向:设备到主机,类型:类,接收者:接口 |
bRequest | 0x21 (GET_LINE_CODING) |
wValue | 0x0000 |
wIndex | 接口号 |
wLength | Line Coding Structure 的大小(7字节) |
Data | Line Coding Structure(设备返回,见下表) |
3. Line Coding Structure 详细格式(Table 50)
偏移量 | 字段名 | 大小 | 值/说明 |
---|---|---|---|
0 | dwDTERate | 4 | 数据终端速率(位/秒) |
4 | bCharFormat | 1 | 停止位:0=1位,1=1.5位,2=2位 |
5 | bParityType | 1 | 奇偶校验:0=无,1=奇,2=偶,3=标记,4=空格 |
6 | bDataBits | 1 | 数据位(5,6,7,8或16) |
C 结构体定义:
typedef struct _LINE_CODING {
uint32_t dwDTERate; // 波特率(如9600, 19200, 38400等)
uint8_t bCharFormat; // 停止位(0:1位, 1:1.5位, 2:2位)
uint8_t bParityType; // 奇偶校验(0:无, 1:奇, 2:偶, 3:标记, 4:空格)
uint8_t bDataBits; // 数据位(5,6,7,8,16)
} LINE_CODING;
4. 典型主机端请求示例
C 结构体示例:
LINE_CODING line_coding;
USB_SETUP_PACKET setup = {
.bmRequestType = 0xA1, // 设备到主机,类,接口
.bRequest = 0x21, // GET_LINE_CODING
.wValue = 0x0000,
.wIndex = interface_number, // 通信接口号
.wLength = sizeof(LINE_CODING) // 7字节
};
// 发送setup包,读取line_coding数据
5. 设备端处理要点
- 返回当前配置的 Line Coding Structure。
- 确保返回的数据与当前硬件设置一致。
- 如果设备不支持某些参数,返回默认值或最近设置的值。
6. 常见配置示例
配置类型 | dwDTERate | bCharFormat | bParityType | bDataBits | 说明 |
---|---|---|---|---|---|
标准串口 | 9600 | 0 | 0 | 8 | 8N1配置 |
高速串口 | 115200 | 0 | 0 | 8 | 高速8N1配置 |
工业设备 | 19200 | 0 | 2 | 7 | 7E1配置 |
老式设备 | 4800 | 1 | 1 | 7 | 7O1.5配置 |
7. 参考
- USB CDC 规范 6.2.13
- SetLineCoding 6.2.12