2024年最全Linux内核中识别USB设备过程_linux系统内核usb插入中断识别过程,2024年最新物联网嵌入式开发架构师必备框架技能核心笔记

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
img
img

如果你需要这些资料,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

高速信号传输是通过电流驱动的,而且D+和D-上的信号幅值在0V和400mv之间切换,所以传输时不允许有一个接到3.3V的上拉电阻存在。以下就是简化的高速设备检测流程。

1,集线器或者主机必须确认连在它端口上的设备不是低速设备,如果是低速设备,则集线器或者主机就不会发起高速握手协议。

2,当集线器或者主机确认端口设备不是低速设备后,它将在握手协议的最开始阶段,T0时刻,发出一个SE0(信号或称命令、状态。不管是什么,理解了就好),用作复位

3,设备检测这个SE0,进行复位。(这里设备根据自己处在何种状态,会作出不同的动作)

4,假如设备是高速设备,则它会让上拉电阻仍然连接,但会使高速的端接无效,并驱动高速信号电流流向D-线上,这将在总线上产生一个K脉冲。该脉冲,在复位的TO时刻后,必须持续至少1.0 ms,但不能超过7.0ms

5,集线器在观察到设备发出的K脉冲至少2.5 us后,必须能检测出这个脉冲。假如集线器没有检测出这个脉冲,则它必须持续的发出SE0信号,直到复位结束。

6,在当K脉冲信号在总线上存在不超过100 us的时间后,集线器必须开始发送间隔的K脉冲和J脉冲序列信号,在J’s和K’s之间的总线上不允许有空闲状态发生。该序列信号在复位结束之前将持续一段时间,不少于100 us,但不长于500 us。(这保证了总线上始终保持活动状态,阻止设备进入高速挂起状态。)每一个独立的K脉冲和J脉冲的持续时间至少为40 us,但不能长于60 us。

7,在完成脉冲序列信号发生之后,集线器发出SE0信号,直到复位结束。在复位结束时,集线器必须转到高速使能状态,而无需在数据线上作出任何改变。

8,在设备完成它自己的脉冲信号(K脉冲)后,它将寻找高速集线器的脉冲信号。设备至少需要观测到K-J-K-J-K-J脉冲序列,来作为检测到一个有效的集线器脉冲信号。每一个独立的K脉冲和J脉冲至少需检测到2.5 us。

A),假如设备检测到脉冲序列K-J-K-J-K-J,则在检测到后的500 us(TWTHS)之内,设备要求断开D+的上拉电阻,并使能高速端接,进入高速缺省状态。即已进入高速模式

B),假如设备在完成它自己的脉冲信号之后的1.0 ms到2.5 ms之内,没有检测到脉冲序列K-J-K-J-K-J,则设备要回复到全速缺省状态,并等待至复位结束。(进入全速模式)

。须

应该是803的切换时序和多道的切换时序没有对上。然后就需要分析他们的时序和查看一下切换时的电流情况。(切换流程较复杂)

通过linux查看,确实是注册的高速设备,所以,这个设备是支持高速的

先复习一下usb的基础知识,方便更深入的学习

现象:当将一个usb设备接入windows时

1.显示usb名称

2.没安装过驱动会跳出一个对话框,提示安装驱动

电脑怎么知道的该显示那个名称???

1.windows里面有了usb的总线驱动程序,接入usb设备后,是总线驱动程序知道的你是什么名字,我们安装的是设备驱动程序

所以usb设备的层次就分为两层

》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

设备驱动层         //需要自己写的(了解数据含义)

<–Usb总线驱动层   //一般为内核自带(1.识别设备,2.找到并安装设备驱动程序3.提供usb读写函数   不了解数据含义)

<–硬件设备(usb主机控制器)

》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

写的usb总线驱动程序相当于写的usb主机控制器驱动程序,usb主机控制器接有usb设备,设备驱动程序相当于是支持usb设备的,设备驱动程序为了能够访问usb设备,需要借助usb总线驱动程序提供的函数,把包发给usb主机控制器,然后主机控制器将数据发给usb设备。(usb驱动程序框架)

Usb总线驱动程序负责什么??

Usb总线驱动负责识别usb设备,然后给usb设备找到对应的驱动程序

Usb设备种类很多,怎么能一接入电脑就能识别出来??

Usb和pc设备都要遵守一些规范

当usb设备接入电脑后,pc会发送指令询问你是什么?

Usb回复我是什么什么设备。

两人都要用一样的协议都要说中文

Usb总线驱动程序发出指令获取设备信息(描述符)

Usb设备必须返回描述符给PC

PC上有很多设备,PC是怎么进行区分的??

Usb接口只有四条线 5v GND D+ D-

接在usb总线上的每一个usb设备都有自己的编号

Pc想访问某个usb设备时,发出命令都要有对应的编号地址

刚接入的时候,没编号,怎么通讯??

每一个设备接入pC时,usb总线驱动程序都会给它分配一个编号

Usb设备接入PC时,还没有编号,怎么把编号告诉他们??

在未分配新编号之前,PC使用默认的0编号进行通讯

Usb一接入,电脑能够立即发现???

是硬件做的处理,pc 端D+ D-接有15k下拉电阻

Usb设备的D-端和5v之间接有一个1.5k电阻,当插入pc时,5v有电压了,就会拉高D-引脚,电脑就知道有设备接入了。

D-和5v之间有一个1.5k电阻代表的是全速设备,D+和5v之间有一个1.5k电阻代表的是一个高速设备。(应该是之前的标准,当前的板卡没有发现遵循这个)

Usb是主从结构:所有的usb传输都是从主机这方发起,usb设备没有主动通知usb主机的能力

Usb鼠标滑动一下产生数据,但是它没有能力通知PC机来读取数据。

怎么保证数据是及时的??

PC机不断的查询。

Usb的传输类型

U盘(不实时,文件可靠 批量传输

Usb鼠标(时间有保证,可靠 中断传输—)(借助概念,使用的查询方式))

Usb摄像头(数据不可靠,实时 实时传输

控制传输:文件可靠,实时(usb的识别过程)

Usb传输的对象:端点(endpoint)

读u盘 写u盘 可细化为,把数据写到u盘的端点1,从u盘的端点2读取数据

除了端点0外的端点都是单向的。

端点0用于控制传输。既能输出也能输入

每一个端点都只有一种传输类型和传输方向

术语中的输入(IN)输出(OUT)永远都是基于usb主机来说的

比如鼠标,鼠标的数据是从鼠标传到PC机,对应的端点称为输入端点。

Usb主机控制器协议规范:(硬件层)

UHCI  OHCI  EHCI

UHCI:intel(适用于低速1.5mbps和全速usb设备12mbps)

OHCI:microsoft(微软) (适用于低速和全速usb设备)

EHCI: 高速(480Mbps)

Usb总线驱动程序

1.识别设备,

(1)分配地址,并告诉usb设备(set address)

(2)发出命令获取描述符

2.找到并安装设备驱动程序

3.提供usb读写函数

Usb设备自带一个hub

查看插入usb设备后的串口打印信息,在内核目录下搜索

信息。(usb device using)

Grep “USB device using” * -nR

--》Drivers/usb/core/hub.c
--》hub_port_init() //hub_set_address()把地址告诉usb设备
               //usb_get_device_descriptor//获取描述符
	            //usb_new-device(udev)
		        Err= usb_get_configuration(udev)//将描述符读出并解析
		        Usb_parse_configuration//解析
                Device_add  //把设备放入bus_type的dev链表,从usb_bus的driver链表里读出usb_driver,把usb_interface和usb_driver的id_table一一比较如果能匹配调用usb_driver的probe函数

--》hub_port_connect_change()//choose_address(udev)给新设备分配编号
	    udev =usb_alloc_dev(hdev,hdev-bus,port1);
		dev->dev.bus=&usb_bus_type;

--》hub_events()//hub事件
--》hub_thread//hub线程,在队列里面休眠
--》Kick_khubd唤醒这个线程
--》hub_irq
--》硬件上的操作

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
img
img

如果你需要这些资料,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
[外链图片转存中…(img-T9Eay590-1715631865952)]
[外链图片转存中…(img-49ETLBX5-1715631865961)]

如果你需要这些资料,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 26
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值