标题:
Linux那些事儿 之 戏说USB(7)我是一棵树(二)
[打印本页]
作者:
bingchentiao
时间:
2013-5-20 22:06
标题:
Linux那些事儿 之 戏说USB(7)我是一棵树(二)
公元
312
年一天夜里,罗马附近的米尔维亚桥,忧思满腹的君士坦丁正在对第二天即将到来的大战感到发愁,当他眺望星空之际,突然看到苍茫的天空中突然出现了四个硕大无朋的火红色的十字架,伴随着这样的字样:依靠此,你将大获全胜。
前几天看碟看到欧洲历史部分的君士坦丁,就
google
到了这么一段。当然这太玄乎了,介于宗教信仰自由,我还是持保留意见吧。不过真有这样的好事,我希望是这样情景:在公元
2007
年
9
月的一天夜里,上海的徐家汇,忧心忡忡的我正在为股市被套而发愁,当我眺望夜空之际,插句题外话,上海几乎没有星空,所有只好将就用夜空代替了,突然看到苍茫的天空中出现了
6
个硕大无朋的数字,伴随着这样的字样:依靠此,你将有
43
个涨停。
为什么说
43
个涨停,这不是刚好比那个金泰多一个么,好不容易碰到这种好事,怎么地也得来个吉尼斯吧,咱别的不多就是吉尼斯多,谁让人多那,找几千个人一块弹弹琴,甩甩头什么的不就有了。
君士坦丁的统治离不开基督教。咱们的
USB
大树要想茁长成长也离不开
USB
协议。
USB
总线是一个单主方式的实现,是一种轮询方式的总线。协议规定所有的数据传输都必须由主机发起,
host controller
初始化所有的数据传输,各种设备紧紧围绕在主机周围。基督教说了,君士坦丁是上帝的第多少个儿子,所有罗马人都要围绕在君士坦丁周围,他不说话,谁都不能出声。
USB
通信最基本的形式是通过
USB
设备里一个叫
endpoint
的东东,而主机和
endpoint
之间的数据传输是通过
pipe
。有关
endpoint
和
pipe
,
复旦人甲
同样也有精辟的见解,没办法,我是他忠实的
fans
。
endpoint
就是通信的发送或者接收点,你要发送数据,那你只要把数据发送到正确的端点那里就可以了。之所以
U
盘有两个
bulk
端点,是因为端点也是有方向的,一个叫做
Bulk in
,一个叫做
Bulk out
,从
usb
主机到设备称为
out
,从设备到主机称为
in
。而管道,实际上只是为了让我们能够找到端点,就相当于我们日常说的邮编地址,比如一个国家,为了通信,我们必须给各个地方取名,完了给各条大大小小的路取名,比如你要揭发你们那里的官员腐败,你要去上访,你从某偏僻的小县城出发,要到北京来上访,那你的这个端点
(endpoint)
就是北京,而你得知道你来北京的路线,那这个从你们县城到北京的路线就算一条管道。有人好奇的问了,管道应该有两端吧,一个端点是北京,那另一个端点呢
?
答案是,这条管道有些特殊,就比如上访,我们只需要知道一端是北京,而另一端是哪里无所谓,因为不管你在哪里你都得到北京来上访。没听说过你在山西你可以上访,你要在宁夏还不能上访了,没这事对吧。严格来说,管道的另一端应该是
usb
主机,即前面说的那个
host
,
usb
协议里边也是这么说的,协议里边说
pipes
代表着一种能力,怎样一种能力呢,在主机和设备上的端点之间移动数据
,
听上去挺玄的。
端点不但是有方向的,而且这个方向还是确定的,或者in,或者out,没有又是in又是out的,鱼与熊掌是不可兼得的,脚踩两只船虽然是每个男人的美好愿望,但不具可操作性,也不提倡。所以你到北京就叫上访,北京的下来就叫慰问,这都是生来就注定的。有没有特殊的那,看你怎么去理解0号端点了,协议里规定了,所有的USB设备必须具有端点0,它可以作为in端点,也可以作为out端点,USB系统软件利用它来实现缺省的控制管道,从而控制设备。端点也是限量供应的,不是想有多少就有多少的,除了端点0,低速设备最多只能拥有2个端点,高速设备也最多只能拥有15个in端点和15个out端点。这些端点在设备内部都有唯一的端点号,这个端点号是在设备设计时就已经指定的。
为什么端点
0
就非要那么的个性那?这还是有内在原因的。管道的通信方式其实有两种,一种是
stream
的,一种是
message
的,
message
管道要求从它那儿过的数据必须具有一定的格式,不是随便传的,因为它主要就是用于主机向设备请求信息的,必须得让设备明白请求的是什么。而
stream
管道就没这么苛刻,要随和多了,它对数据没有特殊的要求。协议里说,
message
管道必须对应两个相同号码的端点,一个用来
in
,一个用来
out
,咱们的缺省管道就是
message
管道,当然,与缺省管道对应的端点
0
就必须是两个具有同样端点号
0
的端点。
USB endpoint
有四种类型,分别对应了四种不同的数据传输方式。它们是控制传输(
Control Transfers
),中断传输(
Interrupt Data Transfers
),批量传输
(Bulk Data Transfers)
,等时传输
(Isochronous Data Transfers)
。控制传输用来控制对
USB
设备不同部分的访问,通常用于配置设备,获取设备信息,发送命令到设备,或者获取设备的状态报告。总之就是用来传送控制信息的,每个
USB
设备都会有一个
endpoint 0
的控制端点,内核里的
USB core
使用它在设备插入时进行设备的配置。这么说吧,君士坦丁旁边有非常信赖的这么一个人,往往通过他来对其它人做些监控迫害什么的,虽然他最后被判了君士坦丁,但我们的
endpoint 0
不会,它会一直在那里等待着
USB core
发送控制命令。最不忠诚的往往是人心,不是么。
中断传输用来以一个固定的速率传送少量的数据,
USB
键盘和
USB
鼠标使用的就是这种方式,
USB
的触摸屏也是,传输的数据包含了坐标信息。
批量传输用来传输大量的数据,确保没有数据丢失,并不保证在特定的时间内完成。
U
盘使用的就是批量传输,咱们用它备份数据时需要确保数据不能丢,而且也不能指望它能在一个固定的比较快的时间内拷贝完。
等时传输同样用来传输大量的数据,但并不保证数据是否到达,以稳定的速率发送和接收实时的信息,对传送延迟非常敏感。显然是用于音频和视频一类的设备,这类设备期望能够有个比较稳定的数据流,比如你在网上
QQ
视频聊天,肯定希望每分钟传输的图像
/
声音速率是比较稳定的,不能说这一分钟对方看到你在向她向你深情表白,可是下一分钟却看见画面停滞在那里,只能看到你那傻样一动不动,你说这不浪费感情嘛。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0