首页
学习
活动
专区
圈层
工具
发布

usb协议开发_基于事件驱动的架构

USB主机和USB设备之间的数据传输共有四种类型:控制传输、批量传输、中断传输和同频传输。与之对应,USB主机和USB设备之间有四种事务:控制事务、批量事务、中断事务和同步事务。...1.5.1 批量(Bulk)传输 作用:主要用于非实时性传输,数据包较大而延时要求较低。...数据传输阶段:依据令牌阶段的IN或OUT传输,来决定数据传输为DATA0或DATA1来进行数据传输 c) 握手阶段:接收信息的一方发送ACK信号以表示接收成功;若为NAK,表示发送失败;STALL...其中,Linux内核只支持同步传输外的三种传输事件,ISO事务需要手工进行初始化工作。控制传输事务、批量传输事务、中断传输事务API如上所示。...传输,它调用: status = hcd->driver->urb_enqueue(hcd, urb, mem_flags); c) 批量传输 root_hub本身没有批量传输流程,按照控制传输流程

2.8K30

Linux驱动开发: USB驱动开发

在USB主向设备发送读取描述符的请求后,USB设备将所有的描述符以连续的数据流方式传输给USB主机。主机从第一个读到的字符开始,根据双方规定好的数据格式,顺序地解析读到的数据流。...对于中断传输,批量传输和控制传输,端点可能发送比之短的数据包 6 bInterval 1 数字 周期数据传输端点的时间间隙。 此域的值对于批传送的端点及控制传送的端点无意义。...批量BULK 批量端点用以传送大量数据。这些端点常比中断端点大得多. 它们普遍用于不能有任何数据丢失的数据。USB 协议不保证传输在特定时间范围内完成。...数据结构初始化(等时)  等时urb 没有和中断、控制、批量urb 类似的初始化函数,因此它们在提交到USB核心之前,需要在驱动程序中手动的初始化。...) USB光谱仪的USB接口支持使用批量方式传输数据,当前程序里使用的是同步方式提交请求。

78.7K23
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Linux USB 设备驱动模型

    对于控制传输、批量传输、中断传输,有 3 个同步函数可以用来直接发起传输。...使用 URB 进行传输时,它是异步方式:需要先分配、构造、提交一个 URB("usb request block"),当传输完成后,它的回调函数被调用。...关键就在于需要填充 URB: dev:跟谁传输数据 pipe:跟哪个 pipe 传输数据 buffer:里面存有要发送的数据,或者用来接收要读取的数据 数据长度 回调函数 2.3.1 分配和释放 URB...对于控制传输、批量传输、中断传输,分别有如下函数: static inline void usb_fill_control_urb(struct urb *urb, struct usb_device...urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; 2.3.4 提交 URB 构造好 URB 后,需要提交到 USB 系统里,才能启动传输。

    6K40

    20.Linux-USB鼠标驱动

    对于控制类型的端点管道使用: usb_sndctrlpipe()/usb_rcvctrlpipe() 对于实时类型的端点管道使用: usb_sndisocpipe()/usb_sndisocpipe() 对于批量类型的端点管道使用...,USB传输数据时,就是打包成urb结构体来传输 iso_packets:表示iso类型的包个数,这里我们不是iso类型包,直接填0 mem_flags:分配内存的参数,这里填入GFP_KERNEL,正常分配...,                       usb_complete_t complete_fn,void *context,int interval); 初始化中断型端点的urb数据结构体 针对批量型端点的...urb:指向要初始化的urb dev:指向要传输的usb设备 pipe:要传输的端点管道, 本节的pipe通过usb_rcvintpipe()宏获取 transfer_buffer:指向要传输数据的虚拟地址缓冲区...结构体,urb:用来传输数据  ->4.4) 因为我们2440支持DMA,所以要告诉urb结构体,使用DMA缓冲区地址  ->4.5)使用usb_submit_urb()提交urb 3.3在鼠标中断函数中

    11.2K81

    【驱动设计的硬件基础】USB

    简单说,就是计算机和外设之间的 "翻译官"+ "快递员":既负责把电脑的指令翻译成外设能懂的语言,又要把外设的数据快速送到电脑里。...批量传输(最能装):传大文件(如 U 盘、移动硬盘)用它,一次能传 64KB(USB2.0)甚至 1024KB(USB3.0),出错了会重传,保证数据完整。...读接口描述符:确定每个功能的具体参数(比如存储的传输方式是批量,视频的传输方式是同步)。...) 异步传输:构建URB(USB Request Block)提交请求(适合高速流) // 构建批量读URB示例 usb_fill_bulk_urb(urb, dev, pipe, buf,...Mac免驱失败,最终发现需修改idProduct字段并关闭SIP保护 九、结语 从 1996 年到现在,USB 能成为 "万能接口",不是因为它多复杂,而是因为它把复杂的硬件规则藏在了背后。

    82610

    带你遨游USB世界

    2.1.4、USB数据传输规范和约定 USB传输是主从模式,主机负责发起数据传输过程,从机负责应答。...每种数据传输模式的流程示意图以及应用场景如下: 控制传输—— Control Transfers ? 用于枚举过程,要保证数据传输过程的数据完整性。 批量传输—— Bulk Transfers ?...5、USB host驱动分析 5.1、URB USB请求块(USB Request Block,URB)是USB设备驱动中用来描述与USB设备通信所用的基本载体和核心数据结构。...一个URB用来向一个特定USB设备的特定USB端点发送数据或接收数据。设备中的每个端点都处理一个URB队列。 URB的处理流程: ?...在probe中探测设备是否符合HID规范,并且创建和初始化URB: ? ? 在usb_mouse_open函数中提交URB: ? 执行回调函数,向user space上报input事件: ? ?

    3.7K21

    基于Java异步处理的 USB 设备监控系统设计与实现:技术架构与业务场景分析

    从工业设备到个人电子产品,USB 设备已经成为数据传输和设备连接的主流方式。然而,设备的动态插拔和状态变化的检测,成为了许多业务系统中的一个重要挑战。...例如,在制造业的生产线中,每当新的设备(如传感器、扫描仪等)接入时,系统必须能够及时响应,确保数据能够准确无误地传输到系统中。与此同时,如果设备在操作过程中被拔出,系统同样需要即时感知并作出反应。...这种同步方式虽然简单,但存在显著的问题:性能瓶颈:每次查询设备状态时,系统需要等待设备响应,如果设备列表很大,查询的时间就会变得很长,导致系统性能下降。...result)); return null; // 返回 null 表示获取设备列表失败 } return deviceList;}异步任务处理模块:通过 CompletableFuture.runAsync...任务批量处理: 对于设备插拔事件较少的情况,可以考虑将多个设备的处理合并为一个异步任务,从而减少线程的创建和销毁开销。7.

    86010

    USB技术浅析

    在传输的类型上,仍旧是控制传输,中断传输,批量传输,同步传输四种。...5)USB 2.0没有流(Streaming)的能力,而超高速支持对批量端点的流(Streaming)。 我们来看一次IN传输: 主机和设备应遵守传输类型和端点特性的限制。...主机通过发送一个确认包(IN)到设备发起一次传输。这个确认包包含了将包路由到预想的端点的寻址信息。主机告诉设备它可以发送的数据包的数量,以及预计从设备接收到的第一个数据包的序列号。...流传输 流传输是bulk中的一种特殊模式,当设备的配置描述符在配置了 MaxStreams后,就代表设备可支持流传输。 ? 上图代表一个输入批量管道,这里建立起了大量的流(Streams)。...2.USB3.0 HOST Usb3.0相比于usb2.0,在usb core层,驱动并没有太大变化,仍旧与原来的流程相同,usb代码的核心数据结构仍然是URB,URB的使用方法也与原来相同: ?

    3.9K30

    数据包发送与嗅探

    libnet的开发目的是:建立一个简单统一的网络编程接口以屏蔽不同操作系统低层网络编程的差别,使得程序员将精力集中在解决关键问题上。...原始套接字(raw socket)是一种网络套接字,允许直接发送/接收IP协议数据包而不需要任何传输层协议格式。...在网络上传输数据时,由于数据传输的两端可能对应不同的硬件平台,采用的存储字节顺序也可能不一致,因此 TCP/IP协议规定了在网络上必须采用网络字节顺序(也就是大端模式) 。...第一个参数是第2步返回的pcap_t类型的指针 第二个参数是保存收到的第一个数据包的pcap_pkthdr类型的指针 pcap_pkthdr类型的定义如下: struct pcap_pkthdr {...-lm -lnet libusb_client1.o:libusb_client1.c gcc -c libusb_client1.c clean: rm -rf libusb_client1

    3.5K30

    使用python开发usb的两种方式(windriver与pyusb)

    实际的数据传输流程如下: python usb dll(through ctypes) windriver usb device 由于dll文件是在win7机器上编译的,故仅能在...pyusb的数据传输流程如下: python pyusb pyusb backend usb device 很明显可以看出省略了dll,大大减少了代码量。...具体使用过程: 下载并安装pyusb backend 连接usb device,使用pyusb backend安装驱动,我选择libusb,一般可以正常使用。不行就换其他的。...usb.util.find_descriptor()找设备描述符,我没有调试出来且繁杂,不如在 dev.set_configuration()之后直接dev.write(),前提是 已经知道设备描述符,这个可以通过一个简单的...pid: product id read_length : buffer length for reading backend: select one from ['libusb

    15.7K20

    南天PR2驱动:多操作系统的安装与应用指南

    一、前言南天 PR2 驱动用于连接南天测量设备(如测距仪、全站仪等)与电脑,实现数据传输与管理。目标:多操作系统兼容,支持数据采集、测量记录和分析。...DataManager 或 PR2 Utility选择正确 COM 端口,测试通信四、Linux 系统安装安装依赖sudo apt update sudo apt install build-essential libusb...sudo usermod -aG dialout $USER连接设备与测试通过 /dev/ttyUSB0 或 /dev/ttyS0 测试通信使用 screen /dev/ttyUSB0 9600 测试数据传输五...Linux:加入 dialout 组;Mac:系统安全设置允许驱动驱动不兼容下载对应系统版本驱动,避免使用 32 位驱动在 64 位系统七、应用技巧数据采集:使用官方软件可以直接导出 CSV 或 DXF 格式批量管理...:Windows 可通过 COM 批量采集数据脚本接口:Linux / Mac 支持 Python 或 C++ SDK 接口,方便二次开发 小结:Windows:安装驱动 + COM 测试 + 软件采集

    57610

    xmake v2.5.2 发布, 支持自动拉取交叉工具链和依赖包集成

    这是用来干什么的呢,做过交叉编译以及有 C/C++ 项目移植经验的同学应该知道,折腾各种交叉编译工具链,移植编译项目是非常麻烦的一件事,需要自己下载对应工具链,并且配置工具链和编译环境很容易出错导致编译失败.../*.c") add_packages("libusb") 如果用户系统上确实没有安装 libusb,那么 xmake 会自动下载 libusb 库源码,自动编译安装集成,没啥问题。...因为通过 apt 安装的 libusb 包名是 libusb-1.0, 而不是 libusb。...使用 on_fetch 完全定制系统库查找 如果不同系统下安装的系统库,仅仅只是包名不同,那么使用 add_extsources 改进系统库查找已经足够,简单方便。...add_files("src/*.cpp") add_files("src/*.manifest") xrepo 命令改进 关于 xrepo 命令,我们也稍微改进了下,现在可以通过下面的命令,批量卸载删除已经安装的包

    2.5K10

    信创系统支持 USB HID 设备的两种方案

    相较于传统的串口通信设备,HID 设备具有传输速率更高、标准化支持更强、可热插拔以及免驱动的优势。随着越来越多的外设逐步转向 HID 标准,这里探讨一下 HID 设备在 UOS 系统中的支持方案。...特点: 封装了 /dev/hidraw* 和 libusb 接口; 简单易用,只需 VID/PID 即可打开设备; 支持读写 Input/Output/Feature 报告。...当然,这个库由于封装了 /dev/hidraw 和 libusb 接口,有时会遇到一些问题,这个时候可能需要直接读写 /dev/hidraw。...2. libusb 简介:通用 USB 访问库,HID 是 USB 设备的一类。...数据传输流程 读取输入报告: Linux设备的数据通过 read() 系统调用读取 报告被加入事件队列,主线程通过 process_hid_report() 处理 Windows应用程序通过 IOCTL_HID_READ_REPORT

    73610

    iOS设备有线投屏的方案

    关于 iPhone 如何使用 USB 投屏的方案能找到的资料非常有限,很多开源的代码也很难一次跑起来,所以我把最近的一些调研做一个简单的总结和分享业务中刚好需要用到使用 USB 数据线投屏到电脑的场景,...有个叫 Daniel Paulus 的老哥逆向工程后使用 golang 开发了一个 quicktime_video_hack的项目,底层主要依赖 libusb 库,基于 GStreamer 框架做编解码...file darwin_usb.c, line 603,主要是 gousb 版本的问题,手动更新 go get -u github.com/google/gousb@latest,或者手动调用 C.libusb_init...使用采集卡让 iOS 设备通过 Lightning AV 转换器将画面与声音输出到采集卡,再由采集卡的软件传输数据。...总结最终,我们采取的方案是 AVFoundation,但没有使用 libjpeg-turbo,而是用 macOS 内置的 CoreGraphics 编码,从视频采集 -> socket传输 -> nodejs

    3K30

    体验CH32H417 超快的 USB 3.0 外设

    初始化逻辑 代码逻辑采用的是 "优先尝试 USB 3.0,失败后回退到 USB 2.0" 的策略。...系统上电时只会初始化 USB 3.0,如果连接失败(例如插在 2.0 接口上),才会关闭 3.0 并初始化 2.0。...2025-08-21)说明枚举出来的是 WCH 自定义类(Class=WCH),由它家的内核驱动接管,而不是 Windows 自带的 WinUSB/libusbK, 自家驱动通常会用更激进的队列深度/URB...简单讲讲USB的知识 如果对这个外设从寄存器出发解读,那就太无聊了,我想可以通俗一点~(主要是着重理解端点这个东西) USB 3.0 的工作过程本质上是: Host 和 Device 围绕“端点(Endpoint...下载速度 单向下载 — 450.64 MB/s 单向上传 447.54 MB/s — 双向同时 395.16 MB/s 395.12 MB/s USBSS(USB 3.0 SuperSpeed),批量端点

    73810
    领券