USB开发基础--了解USB的通讯过程

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

USB的两根信号线负责与总线上的设备交换数据。这些电缆形成了所有设备必须共享的惟一的一条传输通路。 RS-232有一条Tx线用来传输一个方向的数据,一条Rx线用来传输另一个方向的数据。与RS-232不同,USB的一对电线只传输一个不同的信号,不 同方向的信号要按顺序来传输。

  因为所有的传输共享一个数据通道,所以每一个事务必须包括事务的源和目的地址。每个设备有一个由 主机分配的惟一的地址,所有的数据都是流向主机或从主机获取。每个事务都是以主机发送数据块开始的,这个数据块包括接收设备的地址以及设备中被称为终端的 一个特殊位置。一个设备发送的每个数据是为了响应从主机接到的请求而发送的接收到的数据或状态信息。  

  USB通信分为两类,根据它们被用于原始配置还是应用中。在配置通信中主机通知设备,设备收到通知后准备好交换数据。大部分这类通信发生在上电或连接时主机检测到外设的时候。应用通信出现在主机的应用程序与一个检测到的外设交换数据的时候。这些是实现设备应用的通信。例如,对鼠标来说,应用通信是发送点击动作给主机,主机端应用程序接收到这个动作后执行相应动作。

配置通信

  在检测过程中,设备的固件对主机的一系列标准请求做出响应。设备必须识别出每一个请求,返回被请求的信息。

  在PC上,Windows执行检测工作,所以不涉及用户编程的问题。然而,为了完成检测工作,Windows必须有两个可用的文件:一个识别这个设备驱动程序的文件名和位置的INF文件和设备驱动程序本身,如果您的项目符合某种通用设备类,则操作系统可能已经提供了此类设备的所需的这两个文件,而不需要开发人员自己提供。

  根据设备以及设备将被如何使用,设备驱动可能是如下两者之一;Wlndows自带的或芯片或外设厂商提供的。INF文件是一个文本文件,通常你可以对驱动提供考提供例子,稍加修改就可以得到了。

应用通信

  在主机已经与设备交换了检测信息并且设备驱动已经被分配并载入后,应用通信过程可以非常顺利地进行下去了。在主机上,应用程序可以使用标准Windows API功能来读和写设备。在外设上,传输数据通常需要把要发送的数据放在USB控制器的传输缓冲器中,当一个硬件中断发出数据已经到达的信号时从接收缓冲器中读取接收到的数据,并且在完成传输时确保外设准备好下一次传输。

主机与设备建立通信的过程

  主机端的USB集线器监视着它的每个端口的信号线的电压,当USB设备插入主机时,信号线的电平会发生变化,此时主机知道有新设备插入了。

  当主机检测到设备的插入后会首选重启这个设备,接着主机发出Get_Port_Status请求来验证设备是否已经重启,设备重启后主机通过检测根信号线的电平状态判断设备的速度。

  主机发送第一次Get_Descriptor(wValue字段的高字节为0x01,表示设备描述符)请求取得设备描述符,设备描述符提供了设备的多种信息,包括:设备通讯终端0的最大包的大小,设备支持的配置号以及有关这个设备的其它信息,主机通过对这些信息的分析以确定接下来的通信动作。

  设备描述符里规定了设备一个或多个配置描述符,主机再次或多次发出Get_Descriptor(wValue字段的高字节为0x02,表示配置描述符)指令来读取这些配置描述符,第一次只读出配置描述符的前9个字节,这9个字节里包含了配置描述符和它的所有从属描述符(接口描述符、端点描述符)的总长度,然后主机根据这个长度读出设备的所有配置描述符(当然包括其所有从属描述符)。

  在读取完配置描述符后,若之间读取的设置描述中指定了相关字符串描述符(用来描述厂商、产品和设备序列号信息的)的索引,主机将发出若干次Get_Descriptor(wValue字段的高字节为0x03,表示字符串描述符)命令来获得这些字符串描述,此时主机将会弹出窗口,展示发现新设备的信息,产商、产品描述、型号等。

  在主机已经从它的描述符中知道了能够知道的所有信息后,便开始为这个设备安装驱动程序。

  加载了USB设备驱动以后,主机发送Set_Configuration命令请求为该设备选择一个合适的配置。

  至此,USB枚举过程结束,设备可以正常使用了。

USB通信基础了解 USB 通讯协议基础了解 阅读详情

相关推荐

WinUsb实现USB免驱通讯技术总结

Windows 8 或更高版本地系统上已经集成了该驱动程序,这意味着Windows 8 或更高版本地系统上不需要安装驱动程序,系统自动会匹配WinUSB驱动,而对于Vista、Windows7、XP系统,可以通过一些第三方软件(如Zadig)来安装或生成WCID版本的驱动程序,同样只需要安装一次WCID版本的驱动软件,以后所有WCID设备都可以使用该驱动,间接实现了免驱。0x81, /* 端点的特性:B3-B0(端点号), B6-B4(0), B7(1=IN, 0=OUT)

qq_35257512的博客 4424

USB通信协议介绍

USB协议及USB通讯方式介绍; usb协议定义,USB端点介绍,USB通讯方式介绍,令牌包,USB从机枚举流程:设备描述符,配置描述符,接口描述符,端点描述符; 当USB从机连接到USB总线上时,USB主机会检测有USB从机插入,同时USB从机通电并将USB描述符信息从非易失性存储器加载到描述符寄存器中, 等到USB主机从寄存器中获取到USB描述符,就能知道USB从机的基本信息,在这个过程中,会给USB从机分配对应的设备地址。 设备类型,设备版本号,设备序列索引,厂商ID(VID),产品ID(PID),厂

热土程序园,利他愉己~ 9426

USB学习笔记——USB通信过程与枚举过程

在网上看到一篇文章就是讲这个的,仔细阅读后获得了很多感触,整理总结如下。 一、USB接口 在USB的集线器端D-,D+都接了下拉电阻,而USB设备端的D-,D+接了上拉电阻,所以当USB设备插入时可以根据集线器端D-,D+上的电压变化来判断是否有USB设备接入。 检测到有设备接入后,可以根据D-,D+来判断USB设备的工作模式,是低速还是全速或者高速。所以D-,D+这两根线很重要。 二、 USB数据传输过程 主机与USB设备相互传输数据具体过程如下: 1、客户软件首先将传输的数据放入缓冲

weixin_46199479的博客 5248

USB 通讯

USB(Universal Serial Bus)通讯是一种基于总线结构的数字通信协议,用于连接计算机及其外部设备,如打印机、键盘、鼠标、摄像头等。USB通讯协议背后涉及到复杂的数据传输机制和协议规范。在USB通讯中,数据传输的基本单元是包(Packet)。多个包组成一个事务(Transaction),而多个事务则组成一个传输(Transfer)。传输在主机软件与USB设备特定的端点之间进行,这种关联被称为pipes。一个USB设备可以拥有多个管道。

xie__jin__cheng的博客 1083

USB具体通讯过程(含枚举过程

前言    现在刚开始接触USB开发,零零散散学习了一些USB基础知识,但是却得不到连贯。在这个学习过程中首先困惑的就是USB通讯过程究竟是什么样子的,我觉得做一下简单的了解后记录下来,首先从USB整体结构基础来入手直到整个通讯过程。可能有理解不到位的地方,望各位能够指正,我会及时改正。一、USB系统的结构    USB系统是由三个逻辑层组成:功能层、USB设备层和USB总线接口层。并且每一层都...

go_str的博客 4万+

STM32H743IIT6+USB3300,USB_HS高速双向HID通讯开发

STM32H743IIT6+USB3300开发,环境为STM32CUBEMX+MDK5.27 开发目的:实现与电脑的USB_HS高速通讯,通过ULPI接口外接PHY芯片。 板子为微雪open743,模块USB3300也是微雪家的,之前单独买了一个USB3300模块搭配自己手里的743核心板(杜邦线连接),发现USB枚举无法正常。无奈之举,买了一块微雪的开发板。项目着急开发程序,板子只能买,全网做USB3300模块也就微雪一家。 开发流程: 1、微雪只提供了USB_HS的HID和MSC例子,其

u010396127的博客 2万+

USB通讯的执行过程 - STM32 USB设计

首先,我们来看看usb工作过程。   当usb设备接入到主机时,主机开始枚举usb设备,并向usb设备发出指令要求获取usb设备的相关描述信息,其中包括设备描述(device descriptor)、配置描述(configuration descriptor)、接口描述(interface descriptor)、端点描述(endpoint descriptor)等。这些信息是通过端点0(

* . Benirus的专栏 5243

安卓开发中的USB转串口通讯

安卓开发中的USB转串口通讯本文使用GitHub上开源的”hoho.android.usbserial”USB串口库。该库基于“Android USB Host API”,驱动完全由java开发,无需root,不限内核,很是方便。简介Anddroid USB Host API原文链接 android.hardware.usb包下提供了USB开发的相关类。 我们需要了解UsbManager

STchaoL的博客 7255

stm32 usb和安卓手机的通讯过程

stm32 usb和安卓手机端的通讯流程 前段时间公司开发了一个安卓外设,主要是用某宝淘来的demo 在stm32F103的usb功能来和安卓设备的usb通讯 叙述之前先来一个整体的框图吧: 需要准备的设备有: ①.安卓手机或者安卓pad,(手机必须支持otg功能,否则就得用host功能了) ②.otg转接线或者转接头 ③.安卓数据线(一定要是能通讯数据的线缆,有些山寨的这个线只有2根线,没有...

u012665888的博客 1万+

MacOSX开发USB通讯

背景:项目需要在MAC上通过USB传输信息,进行交互。   实现: 1、导入依赖头文件 #include 2、初始化IOHIDManager 3)多种设备配对设置 5、加入RunLoop 7、实现插拔callback 10、实现接收数据callback方法,即可接收数据。 11、向USB设备发送指令。 IOHIDManagerRef managerRef =

十万个逗的博客 6164

USB通讯过程

目录 关于USB的一些事 一、USB总线枚举:实际上就是主机获取从机配置参数并配置的过程 1、USB主机检测的USB设备插入后,先对设备进行复位操作,设备复位后通讯地址为0,USB主机会向地址0发送一个获取设备描述的请求,设备收到请求后将设备描述符发送给主机,主机在确认收到设备描述符之后会返回一个长度为0的数据确认包到设备,进而USB系统进入设置地址阶段 2、USB主机在回复设备确认包之后会对设备进行二次复位,之后便进入设置地址阶段,主机向地址为0的设备发送一个设置地址请求包,新的地址就在该请求包里

u011337503的专栏 3808

USB中的端点详细了解

前言    端点在实际的USB通讯过程种的具体作用与含义十分重要,但是有些难以理解,自己整理一些知识作为备忘。(注:    1、文中的EP表示Endpoint;)一、端点概念。    端点(Endpoint),是主机与设备之间通讯数据的接收或来源。主机与设备之间通信时最终会总用于设备上的各个端点,它是主机与设备间通信流的一个逻辑终端。一系列相互独立的端点在一起构成了USB逻辑设备,在系统结构中,位...

go_str的博客 2万+

Qt usb通讯

Qt通讯方式有很多,如Tcp/Ip、串口等,但对Usb通讯支持较弱,此篇主要描述Qt与plc设备通过usb进行通讯的解决方法;5)使用函数hid_read/hid_write读写usb口,例如:写入开始测试。3)解析时注意先把char转为16进制,再进行数值提取,如下提取第5为数据。3)线程中,m_Handle默认为空,定时1秒检测是否有接入usb。3)检测到指定的pid、vid后,重新打开usb。4)线程中执行打开操作,创建新的usb描述符。4)根据指定pid、vid,打开usb口。

QtCompany的博客 3476

windowsUSB通讯

前言 WindowsUSB通讯,利用设备VID与PID查询设备,利用了windows的setupapi.lib与hid.lib库,开发时需要包含 #include <hidsdi.h> #include <setupapi.h> 头文件 USB通讯类 CommUsb.h #pragma once #include <windows.h> //一定要加入该头文件 #include <iostream> #include <vector&g..

积累点滴,保持自我 6037

了解USB通讯过程

USB的两根信号线负责与总线上的设备交换数据。这些电缆形成了所有设备必须共享的惟一的一条传输通路。 RS-232有一条Tx线用来传输一个方向的数据,一条Rx线用来传输另一个方向的数据。与RS-232不同,USB的一对电线只传输一个不同的信号,不 同方向的信号要按顺序来传输。   因为所有的传输共享一个数据通道,所以每一个事务必须包括事务的源和目的地址。每个设备有一个由 主机分配的惟一的地址,

csaji777的专栏 712

STM32-USB学习笔记(一) USB基础

原文: https://segmentfault.com/a/1190000015995506 侵删 USB基础知识扫盲 前言 本文将从USB的插入检测、身份识别、数据传输三个方面对USB通讯整个过程扫盲,其中有些知识点的详细信息会放在文章最下面的附录中供查看,从而保证文章的整体简洁。在进入主题之前,首先了解一下USB的一些基础知识 USB的分类 按接口类型分 控...

一无所知 7221

Android终端硬件通讯总结(串口通讯Usb Com、Usb、蓝牙、Wifi)

Android上位机与外设通讯连接库

Kelly 4725
上一篇: USB枚举周详过程
下一篇: USB开发基础--USB命令(请求)和USB描述符
枫★曦
博客等级 码龄19年 251粉丝 153原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值