设为首页
优惠IDC
收藏本站
六狼博客
六狼论坛
开启辅助访问
切换到窄版
用户名
Email
自动登录
找回密码
密码
登录
立即注册
只需一步,快速开始
只需一步,快速开始
快捷导航
门户
首页
BBS
云计算
大数据
手机
移动开发android,ios,windows phone,windows mobile
编程
编程技术java,php,python,delphi,ruby,c,c++
前端
WEB前端htmlcss,javascript,jquery,html5
数据库
数据库开发Access,mysql,oracle,sql server,MongoDB
系统
操作系统windows,linux,unix,os,RedHat,tomcat
架构
项目管理
软件设计,架构设计,面向对象,设计模式,项目管理
企业
服务
运维实战
神马
搜索
搜索
热搜:
php
java
python
ruby
hadoop
sphinx
solr
ios
android
windows
centos
本版
帖子
用户
六狼论坛
»
首页
›
操作系统
›
linux
›
LINUX内核USB子系统学习笔记之初识USB
返回列表
查看:
53
|
回复:
0
LINUX内核USB子系统学习笔记之初识USB
[复制链接]
helloyesyes
helloyesyes
当前离线
积分
2850
窥视卡
雷达卡
升级
92.5%
当前用户组为
探花
当前积分为
2850
, 升到下一级还需要 150 点。
932
主题
932
主题
932
主题
探花
探花, 积分 2850, 距离下一级还需 150 积分
探花, 积分 2850, 距离下一级还需 150 积分
积分
2850
发消息
楼主
|
发表于 2013-2-4 14:10:57
|
显示全部楼层
|
阅读模式
努力成为linux kernel hacker的人李万鹏原创作品,转载请标明出处
http://blog.csdn.net/woshixingaaa/archive/2011/04/25/6362603.aspx
这个是
USB
系统的拓扑图,
4
个部分构成:
USB
主机控制器,根集线器,集线器,设备。其中
Root Hub
与
USB
主机控制器是绑定在一起的。
再了解一下
USB
驱动框架:
USB
通信都是由
host
端发起的。
USB
设备驱动程序分配并初始化一个
URB
发给
USB Core,USB Core
改一改,发给
USB
主机控制器驱动,
USB
主机控制器驱动把它解析成包,在总线上进行传送。
USB Core
是由内核实现的,其实也就是把
host control driver
里的功能更集中的向上抽象了一层,它是用来对最上层的
USB
设备驱动屏蔽掉
host control
的不同。
USB
设备的构成包括了配置,接口和端点。
1.
设备通常具有一个或者更多个配置
2.
配置经常具有一个或者更多个接口
3.
接口通常具有一个或者更多个设置
4.
接口没有或者具有一个以上的端点
需要注意的是,驱动是绑定到
USB
接口上,而不是整个设备。
USB
通信最基本的形式是通过一个名为端点(
endpoint
)的东西。它是真实存在的。端点只能往一个方向传送数据(端点
0
除外,端点
0
使用
message
管道,它既可以
IN
又可以
OUT
),或者
IN
,或者
OUT
。除了端点
0
,低速设备只能有
2
个端点,高速设备也只能有
15
个
IN
端点和
15
个
OUT
端点。主机和端点之间的数据传输是通过管道。端点只有在
device
上才有,协议说端点代表在主机和设备端点之间移动数据的能力。
端点有
4
中不同的类型:控制,批量,等时,中断。
对应
USB
的
4
种不同的传输类型:
1.
控制传输:适用于小量的,对传输时间和速率没有要求的设备。如
USB
设备配置信息。
2.
批量传输:适用于类似打印机,扫描仪等传输量大,但对传输时间和速度无要求的设备。
3.
等时传输:适用于大量的,速率恒定,具有周期性的数据,对实时性有要求的,比如音视频。
4.
中断传输:适用于非大量,但具有周期性的数据,比如鼠标键盘。
这
4
大类由
4
个
transaction
组成:
1. IN transaction
IN
事务为
host
输入服务,当
host
需要从设备获得数据的时候,就需要
IN
事务。
2. OUT transaction
OUT
事务为
host
输出服务,当
host
需要输出数据到设备的时候,就需要
OUT
事务。
3. SETUP transaction
SETUP
事务为
host
控制服务,当
host
希望传输一些
USB
规范的默认操作的时候就需要使用
setup
事务。
4. SOF transaction
这个用于帧同步。
然后这
4
种
transaction
又由
3
类包组成,每类又分几种:
1. in
包
in
包用于指明当前的事务为
in
类型的。
2. out
包
out
包用于指明当前事务为
out
类型的。
3. setup
包
setup
包指明当前事务为
setup
类型的。
4. sof
包
sof
包指明当前事务为
setup
类型的。
1. data0
包
该数据包的类型为
0
。
2. data1
包
该数据包的类型为
1
。
1. ack
包
ack
握手包指明当前的事务的数据包传输是成功的。
2. nak
包
nak
握手包指明当前设备忙,不能处理数据包,请主机稍后再次发送。
3. stall
包
stall
握手包指明当前设备不能接受或者传输数据,表示一个严重的错误。
下图是一个
USB
鼠标插入
Linux
系统时完整的枚举过程,一共发生了
11
次传输,每次传输包括几个事务,每个事务又包括几个包,每个包包括几个域。
这里有一个概念需要注意,这里的中断传输与硬件中断那个中断是不一样的,这个中断传输实际是靠
USB host control
轮询
usb device
来实现的,而
USB host control
对于
CPU
则是基于中断的机制。拿
USB
鼠标为例,
USB host control
对
USB
鼠标不断请求,这个请求的间隔是很短的,在
USB spec Table 9-13
端点描述符中的
bInterval
域中指定的,当鼠标发生过了事件之后,鼠标会发送数据回
host
,这时
USB host control
中断通知
CPU
,于是
usb_mouse_irq
被调用,在
usb_mouse_irq
里,就可以读取鼠标发回来的数据,当读完之后,驱动再次调用
usb_submit_urb
发出请求,就这么一直重复下去,一个
usb
鼠标的驱动也就完成了。下面是
USB
鼠标中断传输图,可以看到
USB host control
向
usb device
发送了
IN
包,没有数据的时候
device
回复的是
NAK,
有数据的时候才向
host control
发送
DATA
包。
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
显身卡
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
浏览过的版块
dos
Copyright © 2008-2020
六狼论坛
(http://it.6wolf.com) 版权所有 All Rights Reserved.
Powered by
Discuz!
X3.4
京ICP备14020293号-2
本网站内容均收集于互联网,如有问题请联系
QQ:389897944
予以删除
快速回复
返回顶部
返回列表