奔跑的小刺猬
欲速则不达
展开
-
从零开始学USB(二十八、usb鼠标驱动驱动实例分析[3]传输)
我们分析的这个usb鼠标是一个输入类型的中断传输。既然是输入类型,必然要做好接收。而一个端点中,一次事务中,传输的的最大字节数即量是在端点描述符中定义的。/* USB_DT_ENDPOINT: Endpoint descriptor */struct usb_endpoint_descriptor { __u8 bLength; __u8 bDescriptorTyp...原创 2019-03-19 23:32:52 · 3431 阅读 · 3 评论 -
从零开始学USB(二十七、usb鼠标驱动驱动实例分析[2]管道)
端点是USB设备的唯一可识别部分,其是主机和设备之间的通信流的终点。管道,就是一个USB主机和USB设备端点之间的数据传输的通道。站在主机的角度,它的目的是设备的某个端点。而管道这算是主机和端点之间的连线。这里我们先看一下管道在usb里的定义/* * For various legacy reasons, Linux has a small cookie that'...原创 2019-03-18 23:28:49 · 1713 阅读 · 0 评论 -
从零开始学USB(二十六、usb鼠标驱动驱动实例分析[1]简介)
这个驱动是在上一节的最简单的usb驱动基础上增加了输入子系统和usb包的获取和请求。首先先给出一个稍微简化了一下的usb的鼠标驱动,这里只做了鼠标的三个按键。为了方便验证,这里用鼠标的左键,右键和中间分别作为标准按键的l s enter 键。#include <linux/kernel.h>#include <linux/slab.h>#includ...原创 2019-03-18 00:01:41 · 3451 阅读 · 0 评论 -
从零开始学USB(二十五、4.19版本的内核支持usb驱动)
用的是S5PV210的SOC1.设备树支持设备树设备树默认是支持USB驱动的。如下: usbphy: usbphy@ec100000 { compatible = "samsung,s5pv210-usb2-phy"; reg = <0xec100000 0x100>; sa...原创 2019-03-17 00:04:13 · 2910 阅读 · 0 评论 -
从零开始学USB(二十四、最简单的USB驱动开始)
18年底,花了2个月啃学习USB2.0协议。现在终于开始要派上用场了,开始和代码打交道了。当然,现在只是从简单的开始usb设备驱动开始,后面再慢慢的分析usb总线,usb的hub之类。先给出代码,后面再一句一句分析。#include <linux/kernel.h>#include <linux/slab.h>#include <linux/m...原创 2019-03-10 00:34:50 · 8098 阅读 · 0 评论 -
从零开始学USB(二十三、USB接口HID类设备(五)_报表描述符总结)
在USB的枚举章节,主机获取的最后一个描述符时报表描述符。因为当时没学习HID类的报表描述符,所以当时没分析,这边刚学完HID的报表描述符,趁热打铁,学习一下。首先报表描述符的长度是,在获取HID描述符长度的时候获取的。所以才能在获取报表描述符时使用准确的获取长度。 05 01 09 02 A1 01 09 01 A1 00 05 09 19 01 29 03 15 00 ...原创 2019-01-14 19:49:20 · 3257 阅读 · 2 评论 -
从零开始学USB(二十二、USB接口HID类设备(四)_报表描述符Local类)
本地项目标签定义控件的特征。 这些项目不会转移到下一个主要项目。 如果Main项定义了多个控件,则可能会有几个类似的Local项标签。 例如,一个Input项可能有几个与之关联的Usage标签,每个控件都有一个。 Tag One-Byte Prefix (nn represents size value) Description Usage 0000 10 nn ...原创 2019-01-13 23:52:43 · 1705 阅读 · 0 评论 -
从零开始学USB(二十一、USB接口HID类设备(三)_报表描述符Global类)
Global Item 用于描述一个操作( Main Item )所用到的数据格式,它可以改变一个 state table 的量, 这个 state table 的参数用于修饰 Main Item 。在不被重新赋值的情况下, Global Item 将会保持不变。 Global item tag One-Byte Prefix (nn represents size valu...原创 2019-01-13 22:00:45 · 3344 阅读 · 3 评论 -
从零开始学USB(二十、USB接口HID类设备(二)_报表描述符Main类)
报表描述符定义了执行设备功能的数据格式和使用方法。报表描述符和 USB 的其他描述符是不一样的,它不是一个简单的表格, 报表描述符是 USB 所有描述符中最复杂的 。报表描述符非常复杂而有弹性,因为它需要处理各种用途的设备。报表的数据必须以简洁的格式来储存,这样才不会浪费设备内的储存空间以及数据传输时的总线时间。实际上可以这样理解, 报表内容的简洁,是通过报表描述符全面的、复杂的数据描述实现的...原创 2019-01-12 18:46:00 · 4020 阅读 · 2 评论 -
从零开始学USB(十九、USB接口HID类设备(一)_HID描述符)
USB设备中有一大类就是HID设备,即Human Interface Devices,人机接口设备。这类设备包括鼠标、键盘等,主要用于人与计算机进行交互。它是USB协议最早支持的一种设备类。HID设备可以作为低速、 全速、高速设备用。由于HID设备要求用户输入能得到及时响应,故其传输方式通常采用中断方式。在USB协议中,HID设备的定义放置在接口描述符中,USB的设备描述符和配置描述符中不包含H...原创 2019-01-10 23:30:09 · 31206 阅读 · 3 评论 -
从零开始学USB(十八、USB的class)
关于USB的Class,对于学习USB协议的人,估计早就听到过此名词了。而对于USB的Class的分类,此处先列出那个最基本的分类表: Base Class Descriptor Usage Description 00h Device Use class information...原创 2019-01-08 23:20:44 · 8627 阅读 · 2 评论 -
从零开始学USB(十七、USB的枚举)
一、什么是枚举?USB枚举,USB Emulation,从字面意思看,就是去列举USB,而列举啥呢,其实就是USB的初始化。简单来说,USB的枚举,对应的就是USB的Host和Device之间的对话,即Host根据Device所报告上来的参数,得知USB的device是啥类型的,具有啥功能,然后初始化相关参数,这样主机就可以根据这些信息来加载合适的驱动程序。只要枚举成功了,那么就已经成功大半...原创 2019-01-05 23:52:33 · 9598 阅读 · 6 评论 -
从零开始学USB(十六、标准的USB请求)
所有USB设备都响应设备默认控制管道上主机的请求。 这些请求是使用控制传输进行的。 请求和请求的参数将在Setup数据包中发送到设备。 主机负责建立表9-2中列出的字段中传递的值。 每个Setup数据包都有8个字节。 一、bmRequestType(向谁请求)D7:传输方向0 = 主机至设备; 1 = 设备至主机;D6..5:命令类型D6D5=00:标准请求命令; ...原创 2019-01-03 23:47:50 · 6256 阅读 · 2 评论 -
从零开始学USB(十五、USB的设备状态)
一、可见设备状态 连接(Attached)设备可以连接到HUB上或者从HUB上拔出.USB设备从总线上拨出后的状态在规范没定义,只说明一旦USB连到总线要求的操作以及属性。上电(Powered) USB设备的电源可来自外部电源,也可从USB接口的集线器而来。电源来自外部电源的USB设备被称作自给电源式的(self-powered)。尽管自给电源式的USB设备可能在连接上USB接口以...原创 2019-01-03 19:30:05 · 6531 阅读 · 1 评论 -
从零开始学USB(十四、USB数据传输的组织形式)
在前面的十一节中,学习了USB中传输中一个包是由多个域组成。https://blog.csdn.net/qq_16777851/article/details/85226005 在前面的十二节中,学习了USB传输中学习了包的形式有哪些(令牌包、数据包、应答包等),以及各自的特点和功能。https://blog.csdn.net/qq_16777851/article/details...原创 2018-12-31 19:00:00 · 5727 阅读 · 3 评论 -
从零开始学USB(十三、USB的四种传输类型(2))
虽然USB定义了数据在总线上传输的基本单位是包,但是我们还不能随意地使用包来传输数据。必须按照一定的关系把这些不同的包组织成事务(Transaction)才能传输数据一、USB事务那么事务是什么呢?事务通常由两三个包组成:令牌包,数据包 和握手包。令牌包用来启动一个事务,总是由主机发送。 数据包传送数据,可以从主机到设备,也可以从设备到主机,方向由令牌包决定。 握手包的发送者通常为...原创 2018-12-31 16:32:45 · 4470 阅读 · 2 评论 -
从零开始学USB(十二、USB包的分类和具体格式)
前面章节学习了USB的包的简要结构组成。本节从四种分类上来学习一下他们的使用场景。 一、令牌包令牌由PID组成,指定IN,OUT或SETUP数据包类型以及ADDR和ENDP字段。 PING特殊令牌包也具有与令牌包相同的字段。对于OUT和SETUP事务,地址和端点字段唯一识别将接收后续数据包的端点。对于IN事务,这些字段唯一地标识哪个端点应该传输数据包。对PING事务,这些字段唯一地...原创 2018-12-30 23:45:56 · 7804 阅读 · 6 评论 -
从零开始学USB(十一、USB包的结构)
USB是串行总线,所以数据是一位一位地在数据线上传送的。既然是一位一位传送的,就存在着一个数据位的先后问题。USB采用的是LSB在前的方式,即现出来的是最低位的数据,接下来是次低位....最后是最高位(MSB)。一个包有被分成很多个域(field),而LSB、MSB就是以域来为单位划分的。这里还有一个数据传输方向的问题,因为在USB系统中,主机处于主导地位,所以把设备到主机的数据叫做输入,...原创 2018-12-23 22:30:23 · 9317 阅读 · 3 评论 -
从零开始学USB(十、USB的描述符)
USB设备使用描述符报告其属性。描述符是具有定义格式的数据结构。每个描述符都以字节宽度字段开头,该字段包含描述符中的总字节数,后跟一个标识描述符类型的字节宽度字段。使用描述符允许简单地存储各个配置的属性,因为每个配置可以重用具有相同特征的其他配置的描述符或描述符的部分。以这种方式,描述符类似于关系数据库中的各个数据记录。适当时,描述符包含对字符串描述符的引用,这些字符串描述符提供以可读形式...原创 2018-12-23 14:10:27 · 25209 阅读 · 2 评论 -
从零开始学USB(九、USB的传输类型(1))
一、传输类型USB通过与主机上的客户端软件相对应的内存储器区和USB设备上的端点之间的管道传输数据。 消息管道传输的数据以USB定义的结构传输,但USB允许特定设备的结构化数据在USB定义的消息数据有效负载内传输。 USB还定义了对于任何管道(流或消息),数据经过总线时都要进行分组,但最终在总线事务的数据有效载荷中传输的数据的格式化和解释是客户端软件和功能的责任。 但是,USB提都要供了不同的...原创 2018-12-20 22:08:24 · 7237 阅读 · 4 评论 -
从零开始学USB(八、USB的数据流模型)
一、实施者观点USB在主机和连接的USB设备之间提供通信服务。 但是,简单查看最终用户看到将一个或多个USB设备连接到主机,如图5-1所示,实际上是一点点实施起来比图中所示更复杂。 需要系统的不同视图从不同实施者的角度解释具体的USB要求。 几个重要的必须支持概念和功能,以便为最终用户提供所需的可靠操作今天的个人电脑。 USB以分层的方式呈现,以便于解释和允许特定USB产品的实施者专注于与其产...原创 2018-12-19 21:34:05 · 6074 阅读 · 1 评论 -
从零开始学USB(七、端点、管道、接口、配置、设备)
端点(endpoint):端点是USB设备的唯一可识别部分,其是主机和设备之间的通信流的终点。它是一个USB设备或主机上的一个数据缓冲区,用来存放和发送USB的各种数据。每个USB逻辑设备由一组独立的端点组成。每个逻辑设备都有一个由系统在设备连接时分配的唯一地址。设备上的每个端点在设计时都会得到一个唯一的设备确定的标识符,称为端点号。每个端点都有一个设备确定的数据流方向。设备地址,端点号和方向的组...原创 2018-12-16 22:06:39 · 16053 阅读 · 9 评论 -
从零开始学USB(六、USB通讯的数据格式)
USB中用NRZI来编码数据前面章节已经学习过了USB的引脚定义了,但是对于其中的USB 2.0的两根数据线D+和D-所对应的数据传输,却没有详细介绍。此处就是介绍,在此串行数据线中,数据是如何被编码和传送的。USB所传输的数据,用的数据编码方式是NRZI(Non-Return-to-Zero Inverted),其具体的含义解释,看到有位网友已经非常清晰的分析过了,我就不重复造轮子了。...原创 2018-12-16 16:59:48 · 10696 阅读 · 10 评论 -
从零开始学USB(五、USB的电器特性)
关于机械特性就不在这里详细描述了,这里列出几个重要的知识点。USB电缆:标准的USB电缆包括一对用于电源分配的20~28AWG规格的线对和一对28AWG规格的双绞线,并具有屏蔽和完整的保护层。高速(480 Mb / s)和全速(12 Mb / s)要求使用带有两根电源导线和双绞线信号导线的屏蔽电缆。低速(1.5 Mb / s)建议,但不要求使用带双绞线信号导线的电缆。连接器设计为热插...原创 2018-12-15 00:19:04 · 7038 阅读 · 3 评论 -
从零开始学USB(四、USB系统结构)
一个USB系统可以从三个定义区域来描述:USB互联 USB设备 USB主机USB互连是USB设备与USB主机连接和通信的方式。 这包括以下内容:总线拓扑:USB设备与主机之间的连接模型。层间关系:USB在系统中的每一层都要完成一定的任务。数据流模型:数据在生产者之间通过USB在系统中移动的方式和消费者。任务规划:USB提供可以共享的互连机制。通过规划对互连机制的访问,可以支持同...原创 2018-12-14 21:35:49 · 7317 阅读 · 2 评论 -
从零开始学USB(三、基础知识3)
1. USB 2.0协议内容概览当前最新的USB协议,已经发展到USB 3.0了。但是主流的USB设备和技术,还是以USB 2.0居多。所以此文,主要是以USB 2.0为基础来学习USB协议的基础知识,当然,会在相关内容涉及到USB 3.0的时候,也把USB 3.0的相关内容添加进来。关于USB 2.0和USB 3.0等USB的协议规范,可以去官网下载:http://www.usb.o...原创 2018-12-12 21:32:14 · 9782 阅读 · 4 评论 -
从零开始学USB(二、基础知识2)
1.USB相关的硬件USB设备,从物理上的逻辑结构来说,包含了主机Host端和设备Device端。其中,主机Host端,有对应的硬件的USB的主机控制器Host Controller,而设备端,连接的是对应的USB设备。1.1. USB控制器类型:OHCI,UHCI,EHCI,xHCI由于历史原因,导致USB的主机控制器,出现了多种不同的类型,即OHCI和UHCI,EHCI,和xH...原创 2018-12-08 21:40:55 · 10455 阅读 · 7 评论 -
从零开始学USB(一、基础知识1)
1.什么是USB?USB是Universal Serial Bus的缩写,中文译为通用串行总线。正如USB的第一个单词表述的那样,为了通用。那么我们看一下,还有哪些总线不是串行的,哪些是不通用的串行总线下表来自《USB Complete》里面对一些常见总线所总结的一些区别:当然上表中关于SPI的2.1M肯定是不对的,之前学习单片机的时候用STM32的SPI接口读写SD卡,现...原创 2018-12-08 19:04:26 · 14497 阅读 · 5 评论