LINUX下libusb使用记录(ubuntu读写CH340芯片为例)

记录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)
在这里插入图片描述

地址域:

地址是由两个地址构成,设备地址+端点地址
在这里插入图片描述

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux使用libusb,你需要进行以下几个步骤: 1. 安装libusb库:使用包管理器安装libusb库,例如在Ubuntu上可以使用以下命令进行安装: ``` sudo apt-get install libusb-1.0-0-dev ``` 2. 编译链接使用libusb的程序:在编译你的程序时,需要将libusb库链接进去。可以使用以下命令编译一个简单的示例程序: ``` gcc -o your_program your_program.c -lusb-1.0 ``` 3. 编写代码:在你的代码中包含libusb的头文件,并使用libusb提供的函数进行设备的检测、打开、读写等操作。以下是一个简单的示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <libusb-1.0/libusb.h> int main() { libusb_context *ctx = NULL; libusb_device_handle *dev_handle = NULL; // 初始化libusb库 if (libusb_init(&ctx) < 0) { printf("Failed to initialize libusb\n"); return -1; } // 打开指定的USB设备 dev_handle = libusb_open_device_with_vid_pid(ctx, vendor_id, product_id); if (dev_handle == NULL) { printf("Failed to open USB device\n"); libusb_exit(ctx); return -1; } // 在这里可以进行设备的读写操作 // 关闭设备和释放资源 libusb_close(dev_handle); libusb_exit(ctx); return 0; } ``` 请注意,上述示例代码中的`vendor_id`和`product_id`需要根据实际情况进行定义,以指定要打开的USB设备。 4. 运行程序:在终端中运行编译生成的可执行文件,即可使用libusb操作USB设备。 以上是在Linux使用libusb的基本步骤,你可以根据自己的需求进行进一步的开发和调试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值