Linux USB驱动(二)

news2024/11/26 6:22:01

1. Linux USB驱动软件框架

应用程序有两种访问硬件的途径:通过设备驱动程序来访问跳过设备驱动程序(直接使用host驱动程序)来访问

当直接使用Host驱动程序时,可以调用libusb库中已经封装好的函数接口。

2. USB电气信号

一个USB设备,可能兼容低速、全速,也可能兼容全速、高速。但不会同时兼容低速、高速。

USB2.0设备由4根线组成,其中包括Vcc, GND, D+, D-。用于传输传输数据的只有两根线D+和D-。两根线的通过高低电平,可以组合成4种状态(00, 01, 10, 11)。根据USB2.0协议,对于低速和全速设备(高速设备类似)主要有四种状态,差分1,差分0,单端1,单端0。后面都是以这四种状态,根据需要产生的别名。

USB主机是如何检测到设备的插入?

USB集线器的每个下游端口的D+和D-上,分别接了一个15KΩ的下拉电阻到地,在端口悬空时,就被这两个下拉电阻拉到了低电平。而在USB设备端,在D+和D-端接了1.5K欧姆的上拉电阻。对于全速和高速设备,上拉电阻接在D+上,对于低速设备,上拉电阻接在D-上。当设备插入到集线器时,由1.5K的上拉电阻和15K的下拉电阻分压,就将差分数据线中的一条拉高了。集线器检测到这个状态后,就报告给USB主控制器(或者通过他上一层的集线器报告给USB主控制器),这样就检测到设备的插入了。USB告诉设备首先被识别为USB全速设备,然后通过HOST和DEVICE两者之间的确认,再切换到高速模式。

当USB设备插入时,USB主机控制器的D+或D-被拉高,在主机控制器端会产生一个中断发现一个新设备并通过端点0给新设备分配一个地址和获取USB设备的设备描述符,解析设备描述符并通过device_add()将其添加到usb_bus_type链表中,并且匹配链表上的driver程序,匹配成功后调用driver的probe函数,这部分过程类似Platform平台总线驱动。

对于低速设备在连接期间D-管脚一直是高电平,当hub检测到D-被拉低,说明设备已经断开连接。

对于全速设备,在连接期间D+管脚一直是高电平,当hub检测到D+被拉低,说明设备已经断开连接。

对于高速设备,设备刚刚插入时,是通过将D+拉高来识别的,D+被拉高可认为是全速设备或者是高速设备,那么如何判断是否是高速设备呢?(速率识别)

Hub给Device发出复位信号,如果Device支持高速模式,就会回复一个K信号,Hub收到K信号后,如果自身也支持高速模式,就会发出一系列的KJ信号,Device收到后就知道Hub也支持高速模式,然后就会把自身D+的上拉电阻断开。

当高速设备断开后,Hub发出的信号,得到的反射信号法无衰减,Hub监测到这些信号以后就知道设备已经断开(此处涉及到比较深的与阻抗匹配相关的硬件知识)。

3. USB数据包

SOP(Start of Packet):起始信号;

SYNC:同步信号;

EOP(End of Packet):终止信号

上图中体现出的一种传输方式为,A要给B发送数据,只有一条线,那么就先发送一个同步信号,B根据同步信号计算出波特率,然后根据波特率设置采样时间,从而达到数据传输的目的。

在USB中就是用了这种思想传输数据,但是USB是使用D+与D-两根线的差分信号来表示逻辑0和逻辑1。

反向不归零编码:波形发生变化表示传输的是0,不发生变化表示传输的是1。

对于要发送很多个数据1的时候,理论上会保持很多个周期T波形不变,这个时候如果双方晶振误差等原因,就容易造成1的个数解析误差,所以在连续发送6个1后,就会发送一个0,即强制翻转发送信号(位填充技术)。

USB传输数据就是使用这种:反向不归零编码+位填充技术。

4. USB协议层数据格式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1558903.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Salesforce技术移民主要国家薪资 - 汇总篇

各位Salesforce的宝们,汇总版的Salesforce技术移民主要国家薪资表格及图示给到大家。 主要针对以下四个岗位:Salesforce管理员、Salesforce项目经理、Salesforce业务分析师、Salesforce架构师; 为方便各位看官,分为了欧元区与美元…

Figma使用问题(更新自己遇到的问题)

文章目录 前言一、如何安装插件?方法1:Figma Community / Figma中文社区方法2:菜单栏 二、图片倾斜插件使用1.Angle Mockups前提:执行过程: 三.中文字体插件(宋体等)Chinese Font Picker前提&am…

基于深度学习的图书管理推荐系统(python版)

基于深度学习的图书管理推荐系统 1、效果图 1/1 [] - 0s 270ms/step [13 11 4 19 16 18 8 6 9 0] [0.1780757 0.17474999 0.17390694 0.17207369 0.17157653 0.168248440.1668652 0.16665359 0.16656876 0.16519257] keras_recommended_book_ids深度学习推荐列表 [9137…

Redis 事务 与 管道

redis事务 谈到事务大家可能就会想起mysql中的事务 注意这里的事务不是指的是事务的四大特性acid 持久性 原子性 隔离性 一致性 事务的概念就是 一组命令,串行化执行而不被打断 这里redis的事务和mysql的事务就不太一样 传统关系型数据库的事务主要强调的是一个没有执行完成就…

python3——基础概要

基础 数据结构 Python 3.x中有6种标准的对象类型: Number(数字)、String(字符串)、List(列表)、Tuple(元组)、Sets(集合)、Dictionary&#xff08…

B+Tree讲解

B-/B树看 MySQL索引结构 B-树 B-树,这里的 B 表示 balance( 平衡的意思),B-树是一种多路自平衡的搜索树.它类似普通的平衡二叉树,不同的一点是B-树允许每个节点有更多的子节点。下图是 B-树的简化图. B-树有如下特点: 所有键值分布在整颗树中; 任何一个…

【MySQL】内外连接——内连接、外连接、左外连接、右外连接、内外连接的区别、左外连接和右外连接的区别

文章目录 MySQLMySQL表的内连接和外连接1. 内连接2. 外连接2.1 左外连接2.2 右外连接 3. 内外连接的区别4. 左外连接和右外连接的区别 MySQL MySQL表的内连接和外连接 MySQL 中的内连接(INNER JOIN)和外连接(包括左外连接 LEFT JOIN 和右外连…

数据分析之Tebleau 简介、安装及数据导入

Tebleau简介 Tebleau基于斯坦福大学突破性交互式技术 可以将结构化数据快速生成图表、坐标图、仪表盘与报告 将维度拖放到画布等地方是他的主要操作方式 例:Tebleau是手机相机 (相对来说更简单) POWER BI是单反相机 Tebleau各类产品 Teblea…

GPT提示词分享 —— 智能域名生成器

提示词👇 我希望你能充当一个聪明的域名生成器。我将告诉你我的公司或想法是什么,你将根据我的提示回复我一份域名备选清单。你只需回复域名列表,而不是其他。域名应该是最多 7-8 个字母,应该简短但独特,可以是朗朗上口…

ubuntu16.04 不支持 gcc-11,g++11

总结 ubuntu16.04 不支持 gcc-11,需要升级 18.04 或更高的版本。 背景 最近需要在我的 ubuntu16.04 电脑上安装 gcc-11,g-11,使用更高的版本来编译代码。根据网上查到的方式是添加以下的源并进行安装 sudo add-apt-repository ppa:ubuntu…

第十三届蓝桥杯JavaA组省赛真题 - 求和

解题思路&#xff1a; 这&#xff0c;真的是&#xff0c;省赛真题吗... public class Main {public static void main(String[] args) {long res 0;for (int i 1; i < 20230408; i) {res i;}System.out.print(res);} }

1.5编写一个程序,输入梯形的上底,下底和高,输出梯形的面积。

1、编写一个程序,输入梯形的上底,下底和高,输出梯形的面积。 package com.kangning.web.controller.system;import java.util.Scanner;/*** 编写一个程序,输入梯形的上底,下底和高,输出梯形的面积。*/ public class CountArea {public static void main(String[] args) …

Available platform plugins are: linuxfb, minimal, offscreen, vnc.

说明&#xff1a; buildroots根文件中已经移植好了QT的库&#xff0c;但是运行QT交叉编译之后的可执行文件报错&#xff1a; qt.qpa.plugin: Could not find the Qt platform plugin "eglfs" in "" This application failed to start because no Qt platf…

Linux 理解进程信号

目录 一、共享内存通信机制中的临界资源访问与同步控制 1、概念 2、生活角度理解信号机制 3、信号量的操作 二、信号 1、生活角度的信号 2、技术应用角度的信号 3、操作系统角度的信号 信号如何产生 理解组合键变为信号 理解信号如何被进程保存 时钟中断&#xff0…

【面试题】RocketMQ如何保证消息不丢失?

前言&#xff1a;在面试的时候如果你会用消息中间件&#xff0c;那么面试一般都会问到MQ是如何保证消息不丢失的这个问题&#xff0c;所以这个问题对于面试和日常工作都非常之重要&#xff0c;本文主要讲述RocketMQ是如何保证消息不丢失的&#xff0c;但是我们可以举一反三&…

C语言操作符详细讲解

前言 本次博客一定会让刚刚学习C语言小白有所收获 本次操作符讲解不仅分类还会有代码示例 好好看 好好学 花上几分钟就可以避免许多坑 1 操作符的基本使用 1.1操作符的分类 按功能分 算术操作符&#xff1a; 、- 、* 、/ 、% 移位操作符: >> << 位操作符…

内存池的实现与场景分析

内存管理库 jemalloc 内存管理&#xff0c;C 语言。tcmalloc 内存管理&#xff0c;C。在头文件中引入即可。 确定 block 的大小、不确定 block 的释放时间&#xff0c;如何设计内存池 ? #include <stdio.h> #include <stdlib.h>// gcc mem_pool_v1.c -o mem_poo…

Linux: 进程优先级

Linux: 进程优先级 一、进程优先级概念二、如何查看进程优先级三、如何修改进程的优先级&#xff08;PRL vs NI&#xff09;四、为何优先级PRL必须限定范围五、进程其他特性 一、进程优先级概念 优先级的本质就是排队&#xff0c;而排队则是资源不足所引起的。在计算机中&#…

Sublime 彻底解决中文乱码

1. 按ctrl&#xff0c;打开Console&#xff0c;输入如下代码&#xff1a; import urllib.request,os; pf Package Control.sublime-package; ipp sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHand…

LLM:函数调用(Function Calling)

1 函数调用 虽然大模型能解决很多问题&#xff0c;但大模型并不能知晓一切。比如&#xff0c;大模型不知道最新消息(GPT-3.5 的知识截至 2021年9月&#xff0c;GPT-4 是 2023 年12月)。另外&#xff0c;大模型没有“真逻辑”。它表现出的逻辑、推理&#xff0c;是训练文本的统计…