CDC GetEthernetStatistic
2025-07-11
0
0
1. GetEthernetStatistic 请求用途
GetEthernetStatistic 用于根据特性选择器检索统计信息。
主机通过此请求获取设备的以太网统计信息,返回的值表示自设备上电或复位以来发生的匹配指定统计信息的帧数量。这是一个32位无符号整数,每次发生时递增,如果达到最大值则回绕到0。
2. USB 控制传输格式
字段 | 值/说明 |
---|---|
bmRequestType | 0xA1 (10100001B) 方向:设备到主机,类型:类,接收者:接口 |
bRequest | 0x44 (GET_ETHERNET_STATISTIC) |
wValue | 特性选择器(Feature Selector,见下表) |
wIndex | 接口号 |
wLength | 4 |
Data | 32位无符号整数(设备返回的统计值) |
3. Ethernet Statistics Feature Selector Codes(Table 63)
特性选择器 | 代码 | 目标 | 数据长度 | 描述 |
---|---|---|---|---|
RESERVED | 0x00 | None | None | 保留供将来使用 |
XMIT_OK | 0x01 | Interface | 4 | 无错误传输的帧 |
RCV_OK | 0x02 | Interface | 4 | 无错误接收的帧 |
XMIT_ERROR | 0x03 | Interface | 4 | 未传输或传输错误的帧 |
RCV_ERROR | 0x04 | Interface | 4 | 接收错误的帧 |
RCV_NO_BUFFER | 0x05 | Interface | 4 | 错过的帧,无缓冲区 |
DIRECTED_BYTES_XMIT | 0x06 | Interface | 4 | 无错误传输的定向字节 |
DIRECTED_FRAMES_XMIT | 0x07 | Interface | 4 | 无错误传输的定向帧 |
MULTICAST_BYTES_XMIT | 0x08 | Interface | 4 | 无错误传输的多播字节 |
MULTICAST_FRAMES_XMIT | 0x09 | Interface | 4 | 无错误传输的多播帧 |
BROADCAST_BYTES_XMIT | 0x0A | Interface | 4 | 无错误传输的广播字节 |
BROADCAST_FRAMES_XMIT | 0x0B | Interface | 4 | 无错误传输的广播帧 |
DIRECTED_BYTES_RCV | 0x0C | Interface | 4 | 无错误接收的定向字节 |
DIRECTED_FRAMES_RCV | 0x0D | Interface | 4 | 无错误接收的定向帧 |
MULTICAST_BYTES_RCV | 0x0E | Interface | 4 | 无错误接收的多播字节 |
MULTICAST_FRAMES_RCV | 0x0F | Interface | 4 | 无错误接收的多播帧 |
BROADCAST_BYTES_RCV | 0x10 | Interface | 4 | 无错误接收的广播字节 |
BROADCAST_FRAMES_RCV | 0x11 | Interface | 4 | 无错误接收的广播帧 |
RCV_CRC_ERROR | 0x12 | Interface | 4 | 接收的CRC或FCS错误帧 |
TRANSMIT_QUEUE_LENGTH | 0x13 | Interface | 4 | 传输队列长度 |
RCV_ERROR_ALIGNMENT | 0x14 | Interface | 4 | 接收的对齐错误帧 |
XMIT_ONE_COLLISION | 0x15 | Interface | 4 | 一次冲突传输的帧 |
XMIT_MORE_COLLISIONS | 0x16 | Interface | 4 | 多次冲突传输的帧 |
XMIT_DEFERRED | 0x17 | Interface | 4 | 延迟后传输的帧 |
XMIT_MAX_COLLISIONS | 0x18 | Interface | 4 | 因冲突未传输的帧 |
RCV_OVERRUN | 0x19 | Interface | 4 | 因溢出未接收的帧 |
XMIT_UNDERRUN | 0x1A | Interface | 4 | 因下溢未传输的帧 |
XMIT_HEARTBEAT_FAILURE | 0x1B | Interface | 4 | 心跳失败传输的帧 |
XMIT_TIMES_CRS_LOST | 0x1C | Interface | 4 | 传输期间载波检测信号丢失次数 |
XMIT_LATE_COLLISIONS | 0x1D | Interface | 4 | 检测到的延迟冲突 |
4. 典型主机端请求示例
C 结构体示例:
uint32_t statistic_value;
USB_SETUP_PACKET setup = {
.bmRequestType = 0xA1, // 设备到主机,类,接口
.bRequest = 0x44, // GET_ETHERNET_STATISTIC
.wValue = 0x0001, // XMIT_OK
.wIndex = interface_number, // 通信接口号
.wLength = 4 // 4字节统计值
};
// 发送setup包,读取statistic_value数据
5. 设备端处理要点
- 解析wValue中的特性选择器。
- 根据选择器返回相应的32位统计值。
- 确保统计值准确反映设备的实际状态。
- 完成后通过状态阶段(Status Stage)ACK主机。
6. 常见应用场景
场景 | 特性选择器 | 代码 | 说明 |
---|---|---|---|
传输统计 | XMIT_OK | 0x01 | 获取成功传输的帧数 |
接收统计 | RCV_OK | 0x02 | 获取成功接收的帧数 |
错误统计 | RCV_ERROR | 0x04 | 获取接收错误的帧数 |
队列长度 | TRANSMIT_QUEUE_LENGTH | 0x13 | 获取传输队列长度 |
7. 参考
- USB CDC 以太网子类规范 6.4.6](https://www.usb.org/document-library/class-definitions-communication-devices-12)
- ISO/IEC 8802-3 (ANSI/IEEE Std 802.3)](https://standards.ieee.org/standard/802_3-2018.html)