记录Ubuntu下,使用libusb库对沁恒CH340芯片进行读写等操作,并验证串口数据格式。
libusb下载地址:网址链接
版本号:版本号
函数使用说明 :函数使用说明文档
(1)首先获取当前系统的USB设备列表:
可见当前系统CH340在USB设备列表的第5个。VID = 0X1A86 , PID = 0X7523;
运行代码,对比结果:
对比正确获取USB的VID和PID信息,后面以此信息打开USB设备。
(2) 解析各描述符信息:
01-设备描述符:
描述符长度:12H(固定)
描述符类型:01H(固定)
USB规范版本号:0110(主版本号01,次版本1,子次版本0,USB1.1)
类代码:FFH(供应商自定义的设备类)
子类代码:00H
协议代码:00H(不使用任何设备类协议)
端点0支持最大数据包长度:8H(单位字节。低速设备=8,全速设备=8/16/32/64,高速设备=64,这里说明此设备属于低速设备)
供应商ID:1A86H
产品ID:7523H
设备版本号:0263H(供应商定义)
供应商字符串描述符索引值:0H(没有定义)
产品字符串描述符索引值:02H(字符串描述符的索引值)
设备序列号字符串描述符索引值:0H(没有定义)
所支持的配置数:1H(支持一个配置)
02-配置描述符
描述符长度:09H(固定)
描述符类型:02H(固定)
配置信息的总长度:27H([配置信息总长度 = 配置描述符 + 接口描述符 + 端点描述符,三个的长度和)
配置支持的接口数:01H(支持一个接口)
配置值:01H
字符串描述符的索引值:0H(无)
配置特性:80H(bit7:1, bit4~0:0, bit5=1:支持远程唤醒,bit6=1:使用总线电源)
所需要的最大电流:31H(单位2mA,31H*2mA)
04-接口描述符
从配置描述符可以看出,当前设备只有一个接口,接口描述符的信息如下:
描述符长度:09H(固定)
描述符类型:04H(固定)
接口号:00H
可替换设置值:00H
端点0以外的端点数:3H(3个)
类代码:FFH(供应商自定义)
子类代码:1H(该字段需要进一步表示设备子类)
协议代码:2H
字符串描述符索引值:0H(无)
05-端点描述符
从接口描述符看到,共有三个端点,分别为A,B,C;
描述符长度:07H(固定)
描述符类型:05H(固定)
端点号,传输方向:(bit7:传输方向,0:out 1:in; bit3~0:端点号。 其余为0)
A:82H:输入,端点号2
B:02H:输出,端点号2
C:81H:输入,端点号1
端点特性:
bit1~0 00:控制传输,01:同步传输 10:块传输 11:中断传输
bit3~2 00:非同步 01:异步 10:自适应 11:同步
bit5~4 00:数据端点 01:反馈端点 10:隐式反馈端点 11:保留
A:02H 数据端点,非同步,块传输
B:02H 数据端点,非同步,块传输
C:03H 数据端点,非同步,中断传输
最大数据包长度:20H,20H,8H
端点所支持的最大数据包的长度
访问间隔:0H,0H,1H
端点数据传输的访问间隔。单位ms
bRefresh和bSynchAddress只针对音频设备有效。
03-字符串描述符
(3)数据通信
(1)bulk传输
USB发送数据:
串口转化数据
同步域
全速/低速设备SYNC被定义长度为8位(0000 0001),高速长度定义为32位(0000 0000 0000 0000 0000 0000 0000 0001)
起始包:SOP
空闲状态 D+=H;D-=L;
将D+和D-从空闲状态拉到相反的逻辑电平状态,此开关级别表示SYNC的第一位
结束包:EOP
将D+,D-拉到0两位时间,然后拉回空闲状态。
数据包标识符:PID
几种常见的PID类型:(LSB 在前,MSB在后)
(1) SOF (0101)
(2) SETUP(1101)
(3) OUT(0001)
(4) DATA(1011)
(5) IN(1001)
地址域:
地址是由两个地址构成,设备地址+端点地址