是因为windows自带了USB总线驱动程序, USB总线驱动程序负责: 识别USB设备,给USB设备找到对应的驱动程序 新接入的USB设备的默认地址(编号)是0,在未分配新编号前,PC主机使用0地址和它通信...然后USB总线驱动程序都会给它分配一个地址(编号) PC机想访问USB总线上某个USB设备时,发出的命令都含有对应的地址(编号) USB是一种主从结构。..., 比如:鼠标的数据是从鼠标传到PC机, 对应的端点称为"中断输入端点" 其中端点0是设备的默认控制端点, 既能输出也能输入,用于USB设备的识别过程 同样linux内核也自带了USB总线驱动程序,框架如下...总线驱动,如何识别USB设备 由于内核自带了USB驱动,所以我们先插入一个USB键盘到开发板上看打印信息 发现以下字段: 如下图,找到第一段话是位于drivers/usb/core/hub.c的第2186...其中usb_bus_type是一个全局变量, 它和我们之前学的platform平台总线相似,属于USB总线, 是Linux中bus的一种.
1.简介 USB是通用串行总线(Universal Serial Bus)的缩写。...为了解决上述问题,USB总线诞生了。USB总线就好像一条管道,管道里流过的东西只要符合USB协议,至于具体流的是什么东西,USB总线并不关心,可以是自来水,可以是污水,可以是天然气,也可以是石油。...3.USB总线特点 3.1.主从模式 USB是主从模式的总线,主机称为Host,从机(也称为设备)称为Device。从机与从机之间、主机与主机之间(不包括USB4.0),不能互联。...USB OTG线中增加了一根USB ID线,当USB ID线上拉时,处于从机(设备)模式,当USB ID线接地时,处于主机模式。 3.2.总线结构 如下图所示,USB总线呈现出树状的拓扑结构。...)总线,超高速是全双工(dual-simplex)总线,支持同时收发数据 USB2.0使用轮询模式,超高速使用异步通知方式 USB2.0不支持流能力,超高速支持批量(bulk)端点的流(Stream)方式
2.Gadget Function驱动 Linux内核的USB Gadget Function驱动都在drivers/usb/gadget/function/目录下,有通讯设备类(Communication...[include/linux/usb/composite.h] struct usb_function_driver { const char *name; struct module...Linux 3.11版本引入了USB Gadget Configfs。在用户层可以通过暴漏出来的API定义USB Gadget设备的任意功能和配置,极大的方便了USB复合设备的配置和使用。...*); // usb总线复位时调用,必须实现,在中断中调用 void (*reset)(struct usb_gadget *); struct device_driver driver;...mA); // 下拉让usb主机感知到usb设备接入usb总线,usb主机会枚举usb设备 int (*pullup) (struct usb_gadget *, int is_on);
Linux3.11版本引入了基于configfs的usb gadget configfs。.../bcdDevice # USB 1.1: 0x0110 # USB 2.0: 0x0200, USB 2.1: 0x0210, USB 2.5: 0x0250 # USB 3.0: 0x0300...(gadget_strings, gadget_info); [include/linux/usb/gadget_configfs.h] #define USB_CONFIG_STRINGS_LANG(...主要的工作流程为: 分配一个config_usb_cfg1结构体,该结构体包含了usb_configuration结构体,保存了该USB设备的配置信息。 设置USB设备的配置描述符的某些选项。...调用UDC驱动接口usb_udc_connect_control连接USB主机控制器,这样USB主机就能识别并枚举USB设备。
usb作为设备模式时的数据结构是usb_gadget和gadget_driver;usb_gadget内部包含了usb_udc和usb_gadget_ops数据结构,usb_gadget_ops是usb...控制器硬件,主要流程如下: (1)获取USB控制器IP的版本,便于后续进行不同的配置,USB控制器不同IP版本之间有差别,将Linux内核版本号写入USB控制器寄存器,以便发现某些版本下的bug (2)...中的内容 /* Write Linux Version Code to our GUID register so it's easy to figure out which...kernel version a bug was found. */ dwc3_writel(dwc->regs, DWC3_GUID, LINUX_VERSION_CODE)...dwc3_writel(dwc->regs, DWC3_GUID, LINUX_VERSION_CODE) dwc3_soft_reset // 软件复位USB控制器
USB是通用串行总线 USB是通用串行总线,USB协议版本包括 USB1.0、USB1.1、USB2.0、USB3.0、USB3.1、USB3.2,最新的是USB4.0协议,可直连CPU的PCIe...总线,最大速度可达40Gbps。 ...USB传输可以安排在1个或多个帧或微帧中,每个传输包含多个事务,每个事务又进一步含有多个信息包(packets)。信息包必须在一个帧或微帧中传输完毕,不能跨帧或微帧。...USB传输由一个或多个事务(transaction)组成,这些事务可将数据载入端点或从端点取出。USB2.0事务开始于主机在总线上发送的令牌信息包(token packet)。
[include/linux/usb/gadget.h] int usb_add_gadget_udc(struct device *parent, struct usb_gadget *gadget)...void usb_gadget_udc_stop(struct usb_udc *udc); [include/linux/usb/gadget.h] int usb_udc_attach_driver...如果数据信息包很大且设备总是没有准备好,不断重新尝试可能会浪费很多总线时间。这种情况下,使用带有多个数据信息包的高速批量和控制传输将是更好的途径。...usb_gadget_connect调用后,设备会将D+上拉,主机识别D+上拉后开始枚举设备。...将DWC3_DCTL寄存器第31位设置为1时,USB设备控制器开始运行,会将D+上拉,主机识别D+上拉后开始枚举设备。
/linux_c/usb_dev_ubuntu# 如果提示忙,表示当前系统已经默认挂载。...2.4 查看usbmon可以识别到的USB总线编号 root@wbyq:/mnt/hgfs/linux-share-dir/linux_c/usb_dev_ubuntu# ls /sys/kernel.../linux_c/usb_dev_ubuntu# 其中 Bus 003 表示 3号总线。...cat /sys/kernel/debug/usb/usbmon/1u | grep "1:010" 输入: cat /sys/kernel/debug/usb/usbmon/3u 读取总线上全部数据...root@wbyq:/mnt/hgfs/linux-share-dir/linux_c/usb_dev_ubuntu# cat /sys/kernel/debug/usb/usbmon/3u ffff9bbbaf235b00
(audio_driver); // 注册audio_driver [include/linux/usb/composite.h] #define module_usb_composite_driver...(__usb_composite_driver) \ module_driver(__usb_composite_driver, usb_composite_probe, \ usb_composite_unregister...[include/linux/device.h] #define module_driver(__driver, __register, __unregister, ...) \ static int...USB gadget configfs根据名称查找USB设备控制器,而legacy方式只匹配第一个USB设备控制器,无法匹配指定的USB设备控制器。...分配端点0的usb_request、分配USB请求的缓冲区、设置usb_request的回调函数、复位所有端点,并将gadget的端点数量清零。
最近 VMware 莫名其妙的卡,开机一会就开始卡死了,找了好多办法也不行,暂时先换 VirtualBox,已安装但在使用网银 U 盾等 USB 设备时,无法识别 USB 设备。
采用示波器侦测串口总线的通信是比较常用的一种解码技术。研华USB数字存储示波器USB-DSO提供8位/16位 1GS/s采样,信号输出和高级信号捕获、总线译码、信号比对测试等功能。...128M深度存储器可以让软件采集较长时间、不间断的数据,适合于总线译码。本文以CAN总线为例进行说明。...CAN总线解码概述 1、 CAN总线概念 CAN(控制器区域网络)总线是一种在汽车和工业机械中使用的串行协议,允许微控制器相互通讯。...CAN解码设置 USB-DSO从CAN低波形上进行解码设置。...参考资料: 高能:研华USB数字存储示波器! 研华测试与测量解决方案2018.1
下面,小编就来跟大家讲解解决usb无法识别的方法了。...电脑usb图-4 打开设备管理器,在菜单栏上单击“查看”,选择“显示隐藏的设备”。 usb图-5 双击“通用串行总线控制器”项目,将下面所有灰色项目和USB大容量存储设备都卸载掉。...usb图-6 然后右击“通用串行总线控制器”项目,弹出的下拉菜单选择“扫描检查硬件改动”。...无法识别图-7 拔掉USB设备,然后再重新插上 usb设备图-8 如果还没好,右击“通用串行总线控制器”下的“USB Root Hub”项目,打开的右键菜单点击“属性”命令。...usb设备图-9 打开的属性窗口切换到“电源管理”选项卡,去掉“允许计算机关闭此设备以节约电源”,点击“确定”按钮 无法识别图-10 以上就是usb无法识别的讲解方法了。
一系列相互独立的端点在一起构成了USB逻辑设备,在系统结构中,位于下方红色方框内: 二、端点的分类 每个USB设备都有一个唯一的设备地址,设备地址是设备连接上主机时由主机分配的,主机主要依靠这个设备地址对...USB设备进行访问。...一个端点具有以下一些特性: 端点的总线访问频率要求 端点的总线延迟要求 端点的带宽要求 端点的端点号 对错误处理的要求 端点能接收或发送的包的最大长度 端点的传送类型 端点与主机的数据传送方向 四、端点描述符...五、端点与管道 1、管道的概念 管道是主机软件(数据缓存区),和USB设备各各端点之间的数据传输连接,他是两者之间通信流的抽象(实际上数据传输是USB总线接口完成)。...1)、“流”指不具有USB定义格式的数据流,流通道中的数据是流的形式,也就是该数据内容不具有USB要求的结构。
1.RK3399 USB 下图是RK3399 SOC的框图。RK3399包含了2个USB2.0 Host控制器;两个USB3.0 OTG控制器,同时兼容USB2.0。...USB3.0使用的是Synopsys公司的IP,驱动也使用Synopsys的dwc3 USB驱动。...OTG A设备和B设备 3.USB3.0 OTG Controller硬件框图 从下面的硬件框图中可以看出,USB3.0 OTG控制器内部的USB2.0和USB3.0的PHY和MAC是独立的,各自使用自己的硬件...因此USB2.0和USB3.0的带宽也是独立计算的,USB2.0的带宽并不会占用USB3.0的带宽。...HS/FS/LS MAC : USB2.0 part logic SS MAC : SS part logic(USB3.0) USB2.0 PHY: UTMI+ interface USB2.0 PHY
SMB_DATA WAKEUP_OUT DO 模块睡眠指示 低电平有效 33 PETp0 PERST# DI 复位控制引脚 低电平有效 34 GND GND 地 35 GND GND 地 36 USB_D...- USB_DM IO USB 差分信号(-) 90Ω 差分特性阻抗 37 GND GND 地 38 USB_D+ USB_DP IO USB 差分信号(+) 90Ω 差分特性阻抗 39 3.3Vaux
1 前言 我们知道USB2.0向下兼容USB1.x,即高速2.0的hub能支持所有的速度类型的设备,而USB1.x的hub不能支持高速设备(High Speed Device)。...2 全速和低速USB的识别 根据规范,全速(Full Speed)和低速(Low Speed)很好区分,因为在设备端有一个1.5k的上拉电阻,当设备插入hub或上电(固定线缆的USB设备)时,有上拉电阻的那根数据线就会被拉高...图2 低速USB设备的连接 3 高速USB的识别 USB全速/低速识别相当简单,但USB2.0,USB1.x就一对数据线,不能像全速/低速那样仅依靠数据线上拉电阻位置就能识别USB第三种速度:高速。...因此对于高速设备的识别就显得稍微复杂些。 高速设备初始是以一个全速设备的身份出现的,即和全速设备一样,D+线上有一个1.5k的上拉电阻。...至此,高速设备与USB2.0 hub握手完毕,进行后续的480Mbps高速信号通信。 最后附上几幅实际USB高速识别的示波器抓图,图中蓝色信号是D+,黄色信号是D-。
是Linux内核描述USB设备控制器端点的通用数据结构。...[include/linux/usb/gadget.h] struct usb_ep { // USB设备模式端点通用数据结构 const char *name; // 名字 const...[include/linux/usb/gadget.h] struct usb_ep_ops { int (*enable) (struct usb_ep *ep, const struct usb_endpoint_descriptor...[include/linux/usb/gadget.h] struct usb_request { // 用于描述一个I/O请求 void *buf; // 发送或接收数据的缓冲区...事件 R 参考资料 Rockchip RK3399TRM V1.3 Part1 Rockchip RK3399TRM V1.3 Part2 Linux内核4.4.179版本源码
因为主机端在没有任何外设接进来的时候,D+和D-分别接了两个15K欧的下拉电阻,当有设备接上来的时候,也就是有上拉电阻过来了,这时候,主机端通过识别上拉电阻在D+和D-来取决它是否为低速设备,在这个过程中...(6)挂起态 总线供电设备在3ms内没有总线动作,即USB总线处于空闲状态的话,该设备就要自动进入挂起状态,在进入挂起状态后,总的电流功耗不超过280UA。...USB的包(宏观上来说)有四种:令牌包、数据包、握手包、特殊包。包是USB传输数据的基本单位。每种类型的包都会有不同的域来构成。...来看一张我画的图,再怎么觉得难的东西,也许你看完这张图以后,也就知道自己该怎么去学习了,这张图是我使用USB逻辑分析勾出来的图,然后加上自己学习的总结,这就是一个USB中传输的过程,相信你已经明白了USB...说了这么多,那USB又是怎么来识别设备的呢?通过枚举。 ?
Linux 内核源码:include\linux\usb.h Linux 内核源码:drivers\hid\usbhid\usbmouse.c 1....BUS/DEV/DRV 模型 "USB 接口"是逻辑上的 USB 设备,编写的 usb_driver 驱动程序,支持的是"USB 接口": USB 控制器或 Hub 识别出 USB 设备后,会创建、...注册 usb_device usb_device 被"drivers\usb\core\generic.c" 驱动认领后,会选择、设置某个配置 这个配置下面的接口,都会分配、设置、注册一个 usb_interface...左边的 usb_driver 和右边的 usb_interface 如果匹配,则调用 usb_driver.probe 2....接口函数 在 USB 设备驱动程序中,能使用的 USB 函数都在这个头文件里:include\linux\usb.h。
《QT开发实战》 《嵌入式通用开发实战》 《从0到1学习嵌入式Linux开发》
领取专属 10元无门槛券
手把手带您无忧上云