USB虚拟串口——CDC ACM 两路虚拟串口

CDC 系列文章

CDC 两路虚拟串口

前面两篇文章分别介绍了一路串口的两种实现方式

  • 不使用 IAD 接口关联描述符实现一路虚拟串口
  • 使用 IAD 接口关联描述符实现一路虚拟串口

本篇主要介绍使用 IAD 实现两路串口

如果需要实现更多路的虚拟串口,依次添加 IAD 即可。

描述符结构

设备描述符
配置描述符
接口关联描述符(CDC1)
    接口1描述符(CDC ACM)
        CDC 控制接口描述符
        类特殊描述符(CDC Header, CDC Call, CDC ACM, CDC Union)
        输入端点描述符
    接口2描述符(CDC DATA)
        CDC 数据接口描述符
        输出端点描述符
        输入端点描述符
接口关联描述符(CDC2)
    接口3描述符(CDC ACM)
        CDC 控制接口描述符
        类特殊描述符(CDC Header, CDC Call, CDC ACM, CDC Union)
        输入端点描述符
    接口4描述符(CDC DATA)
        CDC 数据接口描述符
        输出端点描述符
        输入端点描述符

设备描述符

12 01 00 02 EF 02 01 40 FE CA 02 40 00 01 01 02 03 01

Device Descriptor

OffsetFieldSizeValueDescription
0bLength10x12描述符长度
1bDescriptorType10x01设备描述符
2bcdUSB20x0200USB 2.0
4bDeviceClass10xEF
5bDeviceSubClass10x02子类
6bDeviceProtocol10x01协议
7bMaxPacketSize010x40端点 0 最大包长度
8idVendor20xCAFE厂商 ID
10idProduct20x4002产品 ID
12bcdDevice20x0100设备的版本号
14iManufacturer10x01厂商字符串索引
15iProduct10x02产品字符串索引
16iSerialNumber10x03设备的序列号字符串索引
17bNumConfigurations10x01配置数目

类,子类和协议参考 USB-IF
需要注意的是,如何使用接口关联描述符,这里的类,子类和协议需要固定为

bDeviceClass = 0xEF (miscellaneous device class)
bDeviceSubClass = 0x02 (common class)
bDeviceProtocol = 0x01 (interface association descriptor)

配置描述符集合

在这里插入图片描述

配置描述符

09 02 8D 00 04 01 00 80 32
OffsetFieldSizeValueDescription
0bLength10x09描述符长度
1bDescriptorType10x02配置描述符
2wTotalLength20x008d配置描述符集合总长度
4bNumInterfaces10x04接口数目
5bConfigurationValue10x01配置值
6iConfiguration10x00该配置的字符串的索引值(0 表示没有)
7bmAttributes10x80配置的属性
8bMaxPower10x32最大电流量,单位为 2 mA

配置描述符的 bNumInterfaces(第五个数据) 的值为 4,表明有四个接口

CDC1

接口关联描述符

08 0B 00 02 02 02 00 00
OffsetFieldSizeValueDescription
0bLength10x08描述符长度
1bDescriptorType10x0B接口关联描述符
2bFirstInterface10与该功能相关联的第一个接口的接口号 0 表示第一个接口
3bInterfaceCount12与该功能相关联的连续接口的接口数量
4bFunctionClass12类码 CDC
5bFunctionSubClass12子类码 CDC ACM
6bFunctionProtocol10协议码 不指定协议
7iFunction10字符串描述符索引

类,子类和协议参考 USB-IF

  • bFirstInterface 为 0 表示从第一个接口开始
  • bInterfaceCount 为 2 表示有两个接口

所以接口关联描述符将接口1 和接口 2 关联到一起

后面的接口描述符,类特殊描述符和端点描述符等和 USB虚拟串口——CDC ACM 虚拟串口(不使用 IAD) 一致

CDC2

接口关联描述符

08 0B 02 02 02 02 00 00
OffsetFieldSizeValueDescription
0bLength10x08描述符长度
1bDescriptorType10x0B接口关联描述符
2bFirstInterface12与该功能相关联的第一个接口的接口号 2 表示第三个接口
3bInterfaceCount12与该功能相关联的连续接口的接口数量
4bFunctionClass12类码 CDC DATA
5bFunctionSubClass12子类码 CDC ACM
6bFunctionProtocol10协议码 不指定协议
7iFunction10字符串描述符索引

类,子类和协议参考 USB-IF

  • bFirstInterface 为 2 表示从第三个接口开始
  • bInterfaceCount 为 2 表示有两个接口

所以接口关联描述符将接口3 和接口 4 关联到一起

后面的接口描述符,类特殊描述符和端点描述符等和 USB虚拟串口——CDC ACM 虚拟串口(不使用 IAD) 一致

类特殊命令

get line coding

A1 21 00 00 00 00 07 00
A1 21 00 00 02 00 07 00
  • index = 0 发送到接口 1
  • index = 2 发送到接口3
    在这里插入图片描述
    其他类特殊命令类似,用 index 区分不同的接口

数据交互

接口是软件的概念,数据交互往对应的端点写数据即可

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tyustli

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值