Linux3.11版本引入了基于configfs的usb gadget configfs。...(gadget_strings, gadget_info); [include/linux/usb/gadget_configfs.h] #define USB_CONFIG_STRINGS_LANG(...执行流程如下: 判断输入的USB控制器名称,若输出为空或者是none,则解除usb_gadget_driver和底层USB控制器的绑定。...反之调用usb_udc_attach_driver函数进行匹配USB设备控制器。 遍历udc_list链表,查找fe800000.dwc3 USB设备控制器。...调用UDC驱动接口usb_gadget_udc_start使能USB设备控制器。
1.概述 如下图所示,USB控制器可以呈现出两种不同的状态。USB控制器作为Host时,称为USB主机控制器,使用USB主机控制器驱动。...USB控制器作为Device时,称为USB设备控制器,使用UDC(usb device controller)驱动。本节只分析USB控制器作为Device时的驱动框架。...USB控制器作为Device时,驱动框架可分为5层。...USB设备控制器通过USB线缆连接USB主机控制器,负责USB数据的发送和接收。...usb_gadget_ops是USB设备控制器的硬件操作函数,包含启动USB设备控制器、停止USB设备控制器、vbus电源等功能。ep0表示端点0,驱动注册时会提前分配好,用于响应控制请求。
、电源、extcon(用于USB模式切换),另一个在synopsys提供的驱动中初始化,位于drivers/usb/dwc3/core.c文件中,这部分和USB3.0控制器密切相关,如USB3.0控制器内部寄存器地址...只有两个模块都初始化完毕,USB3.0控制器才能正常工作。本节只分析USB驱动早期初始化部分。 2.设备树 下面是USB3.0控制器的设备树节点。...控制器硬件,主要流程如下: (1)获取USB控制器IP的版本,便于后续进行不同的配置,USB控制器不同IP版本之间有差别,将Linux内核版本号写入USB控制器寄存器,以便发现某些版本下的bug (2)...根据dr_mode,选择是否复位USB控制器 (3)从USB控制器寄存器缓存中获取USB控制器端点数量,此处端点表示的是一组资源 (4)建立scratch_buffers,采用流式DMA映射,RK3399...dwc3_writel(dwc->regs, DWC3_GUID, LINUX_VERSION_CODE) dwc3_soft_reset // 软件复位USB控制器
USB Function驱动通过调用这些接口匹配及访问USB设备控制器,而底层USB控制器驱动要实现这些接口定义的功能。下面分析一下主要的UDC驱动接口调用流程。 2....[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...[include/linux/usb/gadget.h] void usb_gadget_giveback_request(struct usb_ep *ep, struct usb_request *...[include/linux/usb/gadget.h] int usb_ep_set_halt(struct usb_ep *ep); int usb_ep_clear_halt(struct usb_ep
(audio_driver); // 注册audio_driver [include/linux/usb/composite.h] #define module_usb_composite_driver...[include/linux/device.h] #define module_driver(__driver, __register, __unregister, ...) \ static int...调用UDC驱动接口,找到合适的USB设备控制器绑定composite_driver_template。 遍历udc_list链表,查找第一个USB控制器。...USB gadget configfs根据名称查找USB设备控制器,而legacy方式只匹配第一个USB设备控制器,无法匹配指定的USB设备控制器。...找到USB设备控制器后,UDC数据结构保存composite_driver_template,此时就完成了UDC绑定composite_driver_template。
一系列相互独立的端点在一起构成了USB逻辑设备,在系统结构中,位于下方红色方框内: 二、端点的分类 每个USB设备都有一个唯一的设备地址,设备地址是设备连接上主机时由主机分配的,主机主要依靠这个设备地址对...USB设备进行访问。...五、端点与管道 1、管道的概念 管道是主机软件(数据缓存区),和USB设备各各端点之间的数据传输连接,他是两者之间通信流的抽象(实际上数据传输是USB总线接口完成)。...1)、“流”指不具有USB定义格式的数据流,流通道中的数据是流的形式,也就是该数据内容不具有USB要求的结构。...2)、“消息”指具有某种USB定义格式的数据流。消息通道与端点的关系同流通道与端点的关系是不同的。
1.RK3399 USB 下图是RK3399 SOC的框图。RK3399包含了2个USB2.0 Host控制器;两个USB3.0 OTG控制器,同时兼容USB2.0。...2.USB3.0 OTG Controller简介 USB3.0 OTG控制器可以作为主机(Host)、设备(Device),或者根据从USB2.0 PHY和DFP/UFP/Data Role Swap...USB3.0 OTG控制器支持如下的特性: 1)通用特性 兼容规范 Universal Serial Bus 3.0 Specification, Revision 1.0 Universal...xHCI控制器特性 最多支持64个设备 拥有一个interrupter 拥有1个USB2.0 port和1个Super-Speed port 拥有xHCI调试能力 USB3.0/USB2.0并发传输,...OTG A设备和B设备 3.USB3.0 OTG Controller硬件框图 从下面的硬件框图中可以看出,USB3.0 OTG控制器内部的USB2.0和USB3.0的PHY和MAC是独立的,各自使用自己的硬件
关于USB显示器跟HDMI之类的显示器有本质区别,我们需要实现的有两个: 在USB上插入一个显示器,怎么让windows系统能识别到显示器 如何让USB显示器显示对应的屏幕内容。
第三部分是USB设备控制器硬件。 USB gadget驱动描述了USB设备控制器的硬件操作方法,不同的USB控制器实现不同。...是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; // 发送或接收数据的缓冲区
今天给大侠带来基于 FPGA 的 USB 接口控制器设计(VHDL),由于篇幅较长,分三篇。今天带来第三篇,下篇,FPGA 固件开发、USB驱动和软件开发。话不多说,上货。...这里也给出前两篇的超链接: 基于FPGA的USB接口控制器设计(VHDL)(上) 基于FPGA的USB接口控制器设计(VHDL)(中) 之前有关于 Veriliog HDL 实现的 USB 接口控制器设计...而有些USB设备是需要特殊驱动的,比如某些手机,连接到电脑的USB口,是需要安装驱动才能使用的。下面我们一起动手做一做USB接口控制器设计,了解一下如何设计。...(2)沿控制器模块 PDIUSBD12 的读写操作都各自有一个读写控制信号 WR_N 和 RD_N,每次读写操作都在对应的控制信号的下降沿触发,沿控制模块的功能就是可控地产生一个下降沿信号,用于控制读写操作...图 48 USB 接口软件模型 USB 系统软件根据功能可以分为 USBD 和 HCD 上下两部分,其中 HCD 为上层提供了主机控制器的抽象以及数据在总线上的传输抽象。
Linux 内核源码:include\linux\usb.h Linux 内核源码:drivers\hid\usbhid\usbmouse.c 1....BUS/DEV/DRV 模型 "USB 接口"是逻辑上的 USB 设备,编写的 usb_driver 驱动程序,支持的是"USB 接口": USB 控制器或 Hub 识别出 USB 设备后,会创建、...接口函数 在 USB 设备驱动程序中,能使用的 USB 函数都在这个头文件里:include\linux\usb.h。...对于一般的 buffer,在提交 URB 时会临时分配一个 DMA Buffer: 发送数据时:函数内部会先从一般 buffer 中把数据复制到 DMA Buffer,在提交给 USB 控制器 读取数据时...:这是一个同步函数,它会等待 URB 结束 usb_unlink_urb:这是一个异步函数,它不会等待 URB 结束,USB 控制器驱动会调用它的回调函数 void usb_kill_urb(struct
今天给大侠带来基于 FPGA 的 USB 接口控制器设计(VHDL),由于篇幅较长,分三篇。今天带来第一篇,上篇,USB 接口简介 以及 USB 体系结构。话不多说,上货。...之前有关于 Veriliog HDL 实现的 USB 接口控制器设计,这里放上超链接,仅供各位大侠参考。 源码系列:基于 FPGA 的 USB2.0 设计 ?...而有些USB设备是需要特殊驱动的,比如某些手机,连接到电脑的USB口,是需要安装驱动才能使用的。下面我们一起动手做一做USB接口控制器设计,了解一下如何设计。...USB 和主机系统的接口称作主机控制器(HostController),主机控制器可由硬件、固件和软件综合实现。...USB 主机是整个 USB 系统通信的控制方,它通过主机控制器与 USB设备进行交互。
1.3 适用范围 表 1-1: 适用产品列表 内核版本 驱动文件 Linux-4.9 drivers/usb/* Linux-5.4 drivers/usb/* 2 模块介绍 2.1 模块功能介绍...,Android 调试桥 Gadget 小配件 HCD Host Controller Driver,主机控制器驱动 UDC USB Device Controller, USB 设备控制器 HCI Host...Controller Interface,主机控制器接口 EHCI Enhanced Host Controller Interface,增强型主机控制器接口 OHCI Open Host Controller...Interface,开放式主机控制器接口 2.3 模块配置介绍 2.3.1 Device Tree 配置说明 设备树中存在的是该类芯片所有平台的模块配置,设备树文件的路径为:kernel/linux...图 2-11: linux-4.x usb gadget 配置选择 2.6.2 linux-4.x/linux-5.4 USB Gadget 配置流程 Linux-4.x/Linux-5.4 使用 configfs
今天给大侠带来基于 FPGA 的 USB 接口控制器设计(VHDL),由于篇幅较长,分三篇。今天带来第三篇,下篇,FPGA 固件开发、USB驱动和软件开发。话不多说,上货。...之前有关于 Veriliog HDL 实现的 USB 接口控制器设计,这里放上超链接,仅供各位大侠参考。 源码系列:基于 FPGA 的 USB2.0 设计 ?...而有些USB设备是需要特殊驱动的,比如某些手机,连接到电脑的USB口,是需要安装驱动才能使用的。下面我们一起动手做一做USB接口控制器设计,了解一下如何设计。...(2)沿控制器模块 PDIUSBD12 的读写操作都各自有一个读写控制信号 WR_N 和 RD_N,每次读写操作都在对应的控制信号的下降沿触发,沿控制模块的功能就是可控地产生一个下降沿信号,用于控制读写操作...图 48 USB 接口软件模型 USB 系统软件根据功能可以分为 USBD 和 HCD 上下两部分,其中 HCD 为上层提供了主机控制器的抽象以及数据在总线上的传输抽象。
图 14 USB 硬件系统框图 按照功能可以将 USB 接口器件分为 6 类:主机控制器、集线器、USB 接口器件、USB 控制器、USB 电源管理器件以及 USB 特殊功能器件。...(1)主机控制器 USB 主机控制器的功能是实现标准的 USB 主机串口引擎(SIE)和根集线器功能,它们一般通过 PCI 或其他总线和主机 CPU 通信。...(4)USB 控制器 USB 控制器指的就是带有 USB 接口器件的处理器。...连接的建立通过外部/系统微控制器发送命令来实现。这就允许系统微控制器在决定与 USB 建立连接之前完成初始化时序。USB总线连接可以重新初始化而不需要拔出电缆。...RAM)作为 USB 之间速度差异的缓冲区,这就允许微控制器以它自己的速率对 USB信息包进行读写。
USB主控制器广播令牌,总线上设备检测令牌中的地址是否与自身相符,通过接收或发送数据给主机来响应。USB通过支持悬挂/恢复操作来管理USB总线电源。...主机,也称为根,根结或根Hub,它做在主板上或作为适配卡安装在计算机上,主机包含有主控制器和根集线器(Root Hub),控制着USB总线上的数据和控制信息的流动,每个USB系统只能有一个根集线器,它连接在主控制器上.../usb.h> 4.2 USB设备注册框架示例 #include #include #include //定义...#include #include #include #include .../init.h> #include #include #include #include <linux/slab.h
通过扫描以下目录获取物理节点所有 USB 设备: /sys/bus/usb/devices/usb* /sys/bus/usb/devices/usb*/$busnum-* 从该文件系统收集某一个设备的主要信息如下..."level": 1, "manufacturer": "QEMU", "port": 0, "prodid": "0001", "product": "QEMU USB...: 产品 serial: USB 硬件设备序列号 ,例如 0000:00:01.2 定位方法# 定位某一个 USB 设备的方法有两种: busnum + devnum idVendor + idProduct...Type-C Bridge Class DCh 设备描述符、接口描述符 Diagnostic Device E0h 接口描述符 无线控制器 EFh 设备描述符、接口描述符 Miscellaneous...By USB 中文网 USB设备描述符中的idVendor、idProduct和bcdDevice By USB 中文网 USB 硬件设备的序列号 By IBM 注:本作品采用 知识共享署名-非商业性使用
在上一章分析完USB总线驱动程序后, 接下来开始写一个USB驱动: 本节目的: 将USB鼠标的左键当作L按键,将USB鼠标的右键当作S按键,中键当作回车按键 参考/drivers/hid/usbhid/...: usb_deregister(struct usb_driver *driver); 注册一个usb_driver驱动,然后内核会通过usb_driver的成员.id_table函数匹配一次USB设备...释放input_device 3.5在出口函数中 1)通过usb_deregister ()函数注销usb_driver结构体 4.代码如下: #include #include... #include #include #include #include... static struct input_dev *myusb_mouse_dev; //input_dev static char *myusb_mouse_buf
[ 0.513302] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002 [ 0.513303] usb usb1...Controller [ 0.513304] usb usb1: Manufacturer: Linux 3.10.0-327.el7.x86_64 xhci-hcd [ 0.513305...] usb usb1: SerialNumber: 0000:00:14.0 [ 0.518700] usb usb2: New USB device found, idVendor=1d6b,...0.518702] usb usb2: Product: xHCI Host Controller [ 0.518702] usb usb2: Manufacturer: Linux 3.10.0...] usb 1-4: New USB device found, idVendor=413c, idProduct=301a [ 1.040348] usb 1-4: New USB device
在当今的快充技术领域,USB PD 协议已经成为主流。而为了实现更高效的充电,一个关键的组件就是 SINK 端输出控制器芯片。...在这个主题中,我们将深入探讨 泛海微PW6603USB PD 协议 SINK 端输出控制器芯片的相关特点和优势。首先,让我们了解一下 USB PD 协议。...它是一种基于 USB Type-C 接口的电源传输协议,通过协商电压和电流,实现更高效、更安全的充电。而 PW6603 是一款支持 USB PD 协议的 SINK 端输出控制器芯片。...支持 USB PD 3.0 协议:PW6603 兼容最新的 USB PD 3.0 协议,使得充电效率更高,同时也增强了兼容性。2. ...总之,PW6603USB PD 协议 SINK 端输出控制器芯片是一款优秀的快充解决方案。
领取专属 10元无门槛券
手把手带您无忧上云