
Linux USB
本专栏主要介绍usb方面的基础知识,及linux usb驱动架构
楓潇潇
这个作者很懒,什么都没留下…
展开
-
gadget之udc
gadget之udc简介udc全称为(usb device conctrl),usb设备控制器,其为某soc的usb device的控制器,将usb device的功能抽象,转换成一个个可实现的实例。相关源码如下://udc的核心层代码drivers/usb/gadget/core.c //某udc控制器的代码,具体需要编写udc驱动者实现drivers/usb/gadget/fotg210-udc.cdrivers/usb/gadget/s3c2410_udc.cstruct usb_u原创 2021-03-17 22:30:41 · 1867 阅读 · 0 评论 -
gadget之composite
gadget之compositecomposite简介composite英文意思为复合/综合。其为整个gadget驱动的中间层,往下注册usb_gadget_driver并与usb_udc(usb_gadget设备)绑定,往上通过usb_composite_dev与usb_composite_driver实现usb_function的绑定。usb_function、composite、udc三者相互联系共同实现usb device的功能。struct usb_composite_dev//作为com原创 2021-03-17 22:29:05 · 1275 阅读 · 0 评论 -
gadget之usb_gadget
gadget之usb_gadget简介略。struct usb_gadget/** * struct usb_gadget - represents a usb slave device * @work: (internal use) Workqueue to be used for sysfs_notify() * @udc: struct usb_udc pointer for this gadget * @ops: Function pointers used to access ha原创 2021-03-17 22:27:39 · 2103 阅读 · 0 评论 -
gadget之usb_function
gadget之usb_functionusb_function/** * struct usb_function - describes one function of a configuration * @name: For diagnostics, identifies the function. * @strings: tables of strings, keyed by identifiers assigned during bind() * and by language IDs原创 2021-03-17 22:26:41 · 2174 阅读 · 0 评论 -
gadget驱动框架(六)
gadget驱动框架(六)本节主要介绍udc驱动枚举过程,需结合udc驱动、composite.c、function等一同分析整个过程。udc驱动中断处理函数当host检测到DP上拉,则认为有新的device插入,此时host将发起进入枚举流程,整个枚举流程大部分是在中断函数中处理,协议对时间有相关的要求,因此整个枚举流程是不能加入过多的调式信息,否则将会影响到枚举的时序。本文基于Linux4.19.123-s3c2410_udc.c进行分析,中断函数具体如下:/* * s3c2410_udc_原创 2021-03-17 22:25:52 · 1009 阅读 · 0 评论 -
gadget驱动框架(五)
gadget驱动框架(五)本节主要分析虚拟串口的tty设备的注册、创建/dev/ttyGSx设备节点、tty相关接口的实现。tty的申请与注册源码:drivers/usb/gadget/function/u_serial.cstatic const struct tty_operations gs_tty_ops = { .open = gs_open, .close = gs_close, .write = gs_write, .put_char = gs_put_char,原创 2021-03-17 22:24:54 · 1287 阅读 · 0 评论 -
gadget驱动框架(四)
gadget驱动框架(四)本文基于linux5.4.23分析usb_function_driver、usb_function_instance、usn_function的创建、注册过程。创建/注册usb_function_driver源码:drivers/usb/gadget/function/f_acm.cDECLARE_USB_FUNCTION_INIT(acm, acm_alloc_instance, acm_alloc_func);创建usb_function_instance源码:d原创 2021-03-17 22:24:04 · 1366 阅读 · 0 评论 -
gadget驱动框架(三)
gadget驱动框架(三)usb_udc与usb_gadget_driver的绑定usb_udc与usb_gadget_driver,在注册的时候分别被添加到udc_list和gadget_driver_pending_list中,无论这两者先后顺序如何,都将会动态的去识别及匹配到具体设备中,绑定过程如下:源码:drivers/usb/gadget/udc/core.c/* ---------------------------------------------------------------原创 2021-03-17 22:22:34 · 1613 阅读 · 0 评论 -
gadget驱动框架(二)
gadget驱动框架(二)usb_composite_driver的创建于注册源码:drivers/usb/legacy/serial.c//创建usb_composite_driverstatic struct usb_composite_driver gserial_driver = { .name = "g_serial", .dev = &device_desc, .strings = dev_strings, .max_speed = USB_SPEED_SUPER,原创 2021-03-17 22:21:38 · 1421 阅读 · 0 评论 -
gadget驱动框架(一)
gadget驱动框架(一)之前在linux移植udc驱动的时候,没有深入的理解整个gadget驱动框架,现在重新再屡屡gadget驱动,以便后期再次学习。本系列的文章以虚拟串口进行分析,相关源码均是基于linux4.19.123。gadget驱动框架gadget源码主要在:drivers/usb/gadget,以虚拟串口为例,对源文件做简单说明:drivers/usb/gadget/function/*.c:实现具体的usb功能,有serial、video、audio等drivers/usb/ga原创 2021-03-17 22:20:22 · 3738 阅读 · 2 评论 -
从零开始学USB(二十三、USB接口HID类设备(五)_报表描述符总结)
在USB的枚举章节,主机获取的最后一个描述符时报表描述符。因为当时没学习HID类的报表描述符,所以当时没分析,这边刚学完HID的报表描述符,趁热打铁,学习一下。首先报表描述符的长度是,在获...转载 2020-03-16 16:49:39 · 1045 阅读 · 1 评论 -
从零开始学USB(二十二、USB接口HID类设备(四)_报表描述符Local类)
本地项目标签定义控件的特征。 这些项目不会转移到下一个主要项目。 如果Main项定义了多个控件,则可能会有几个类似的Local项标签。 例如,一个Input项可能有几个与之关联的Usage标签...转载 2020-03-16 16:47:57 · 773 阅读 · 0 评论 -
从零开始学USB(二十一、USB接口HID类设备(三)_报表描述符Global类)
Global Item 用于描述一个操作( Main Item )所用到的数据格式,它可以改变一个 state table 的量, 这个 state table 的参数用于修饰 Main It...转载 2020-03-16 16:46:29 · 2127 阅读 · 1 评论 -
从零开始学USB(二十、USB接口HID类设备(二)_报表描述符Main类)
报表描述符定义了执行设备功能的数据格式和使用方法。报表描述符和 USB 的其他描述符是不一样的,它不是一个简单的表格, 报表描述符是 USB 所有描述符中最复杂的 。报表描述符非常复杂而有弹...转载 2020-03-16 16:44:54 · 1295 阅读 · 0 评论 -
从零开始学USB(十九、USB接口HID类设备(一)_HID描述符)
USB设备中有一大类就是HID设备,即Human Interface Devices,人机接口设备。这类设备包括鼠标、键盘等,主要用于人与计算机进行交互。它是USB协议最早支持的一种设备类。H...转载 2020-03-16 16:43:15 · 2774 阅读 · 0 评论 -
从零开始学USB(十八、USB的class)
关于USB的Class,对于学习USB协议的人,估计早就听到过此名词了。而对于USB的Class的分类,此处先列出那个最基本的分类表: Base Class D...转载 2020-03-16 16:40:58 · 9398 阅读 · 1 评论 -
从零开始学USB(十七、USB的枚举)
一、什么是枚举?USB枚举,USB Emulation,从字面意思看,就是去列举USB,而列举啥呢,其实就是USB的初始化。简单来说,USB的枚举,对应的就是USB的Host和Device...转载 2020-03-16 16:39:17 · 4926 阅读 · 0 评论 -
从零开始学USB(十六、标准的USB请求)
所有USB设备都响应设备默认控制管道上主机的请求。 这些请求是使用控制传输进行的。 请求和请求的参数将在Setup数据包中发送到设备。 主机负责建立表9-2中列出的字段中传递的值。 每个Set...转载 2020-03-16 16:37:08 · 4668 阅读 · 0 评论 -
从零开始学USB(十五、USB的设备状态)
一、可见设备状态 连接(Attached)设备可以连接到HUB上或者从HUB上拔出.USB设备从总线上拨出后的状态在规范没定义,只说明一旦USB连到总线要求的操作以及属性。上电...转载 2020-03-16 16:35:29 · 1420 阅读 · 0 评论 -
从零开始学USB(十四、USB数据传输的组织形式)
在前面的十一节中,学习了USB中传输中一个包是由多个域组成。https://blog.youkuaiyun.com/qq_16777851/article/details/85226005 ...转载 2020-03-16 16:32:45 · 811 阅读 · 0 评论 -
从零开始学USB(十三、USB的四种传输类型(2))
虽然USB定义了数据在总线上传输的基本单位是包,但是我们还不能随意地使用包来传输数据。必须按照一定的关系把这些不同的包组织成事务(Transaction)才能传输数据一、USB事务那么事务...转载 2020-03-16 16:31:26 · 2402 阅读 · 0 评论 -
从零开始学USB(十二、USB包的分类和具体格式)
前面章节学习了USB的包的简要结构组成。本节从四种分类上来学习一下他们的使用场景。 一、令牌包令牌由PID组成,指定IN,OUT或SETUP数据包类型以及ADDR和ENDP字...转载 2020-03-16 16:29:43 · 2059 阅读 · 0 评论 -
从零开始学USB(十一、USB包的结构)
USB是串行总线,所以数据是一位一位地在数据线上传送的。既然是一位一位传送的,就存在着一个数据位的先后问题。USB采用的是LSB在前的方式,即现出来的是最低位的数据,接下来是次低位....最...转载 2020-03-16 16:27:47 · 3190 阅读 · 0 评论 -
从零开始学USB(十、USB的描述符)
USB设备使用描述符报告其属性。描述符是具有定义格式的数据结构。每个描述符都以字节宽度字段开头,该字段包含描述符中的总字节数,后跟一个标识描述符类型的字节宽度字段。使用描述符允许简单地存储各...转载 2020-03-16 16:25:51 · 2572 阅读 · 0 评论 -
从零开始学USB(九、USB的传输类型(1))
一、传输类型USB通过与主机上的客户端软件相对应的内存储器区和USB设备上的端点之间的管道传输数据。 消息管道传输的数据以USB定义的结构传输,但USB允许特定设备的结构化数据在USB定义的...转载 2020-03-16 16:23:16 · 1367 阅读 · 0 评论 -
从零开始学USB(八、USB的数据流模型)
一、实施者观点USB在主机和连接的USB设备之间提供通信服务。 但是,简单查看最终用户看到将一个或多个USB设备连接到主机,如图5-1所示,实际上是一点点实施起来比图中所示更复杂。 需要系统...转载 2020-03-16 16:19:43 · 2095 阅读 · 0 评论 -
从零开始学USB(七、端点、管道、接口、配置、设备)
端点(endpoint):端点是USB设备的唯一可识别部分,其是主机和设备之间的通信流的终点。它是一个USB设备或主机上的一个数据缓冲区,用来存放和发送USB的各种数据。每个USB逻辑设备由一...转载 2020-03-16 16:16:55 · 3924 阅读 · 0 评论 -
从零开始学USB(六、USB通讯的数据格式)
USB中用NRZI来编码数据前面章节已经学习过了USB的引脚定义了,但是对于其中的USB 2.0的两根数据线D+和D-所对应的数据传输,却没有详细介绍。此处就是介绍,在此串行数据线中,数据是...转载 2020-03-16 16:15:02 · 1623 阅读 · 0 评论 -
从零开始学USB(五、USB的电器特性)
关于机械特性就不在这里详细描述了,这里列出几个重要的知识点。USB电缆:标准的USB电缆包括一对用于电源分配的20~28AWG规格的线对和一对28AWG规格的双绞线,并具有屏蔽和完整的保护层...转载 2020-03-16 16:12:25 · 2649 阅读 · 0 评论 -
从零开始学USB(四、USB系统结构)
一个USB系统可以从三个定义区域来描述:USB互联 USB设备 USB主机USB互连是USB设备与USB主机连接和通信的方式。 这包括以下内容:总线拓扑:USB设备与主机之间的连接模...转载 2020-03-16 16:08:04 · 2277 阅读 · 0 评论 -
从零开始学USB(三、基础知识3)
1. USB 2.0协议内容概览当前最新的USB协议,已经发展到USB 3.0了。但是主流的USB设备和技术,还是以USB 2.0居多。所以此文,主要是以USB 2.0为基础来学习...转载 2020-03-15 22:46:23 · 2056 阅读 · 0 评论 -
从零开始学USB(二、基础知识2)
1.USB相关的硬件USB设备,从物理上的逻辑结构来说,包含了主机Host端和设备Device端。其中,主机Host端,有对应的硬件的USB的主机控制器Host Controller,而设备端,连接的是对应的USB设备。1.1. USB控制器类型:OHCI,UHCI,EHCI,xHCI由于历...转载 2020-03-15 22:43:53 · 3360 阅读 · 0 评论 -
从零开始学USB(一、基础知识1)
从零开始学USB(一、基础知识1) 原创 ...转载 2020-03-15 21:53:56 · 2252 阅读 · 1 评论 -
Linux USB基础之虚拟串口枚举流程(三)
Linux USB基础之虚拟串口枚举流程(三)1 USB检测与枚举过程1.1 USB插拔检测USB集线器的每个下游端口的D+和D-上,分别接了一个15K的下拉电阻到低。当集线器的端口悬空(即没有设备插入)时,输入端就被此两个下拉电阻拉到低电平。在USB设备端,在D+或D-上接入1.5K的上拉电阻到3.3V的电源。1.5K的上拉电阻接在D+或D-上,由设备的速度决定。对于全速设备和高速设备,上...原创 2020-03-15 21:36:35 · 2465 阅读 · 0 评论 -
Linux USB基础之端点(二)
Linux USB基础之端点(二)1 USB端点分类USB 通讯的最基本形式是通过端点。一个USB端点只能向一个方向传输数据(从主机到设备(称为输出端点)或者从设备到主机(称为输入端点))。端点可被看作一个单向的管道。USB 端点有 4 种不同类型, 分别具有不同的数据传送方式:1.1 控制传输控制端点被用来控制对USB设备的不同部分访问. 通常用作配置设备、获取设备信息、发送命令到设备...原创 2020-03-15 21:21:51 · 1157 阅读 · 0 评论 -
Linux USB基础之描述符(一)
Linux USB基础之描述符(一)1 USB描述符1.1 设备描述符:struct usb_device_descriptor设备代表一个USB设备,它由一个或多个配置组成。设备描述符用于说明设备的总体信息,并指明其所含的配置的个数。一个USB设备只能有一个设备描述符。struct usb_device_descriptor { __u8 bLength; ///长度 ...原创 2020-03-15 21:13:52 · 2300 阅读 · 0 评论