《Linux那些事儿之我是USB》我是U盘(13)从协议中来到协议中去(下)--总结

(1)
USB通信的最基本的形式就是通过endpoint端点,一个接口有一个或多个端点,而作为像U盘这样的存储设备吧,它至少有一个控制端点,两个bulk端点.

(2)
usb协议里规定了,usb设备有四种通信方式,分别是控制传输,中断传输,批量传输,等时传输.其中,等时传输显然是用于音频和视频一类的设备,这类设备期望能够有个比较稳定的数据流,比如你在网上QQ视频聊天,肯定希望每分钟传输的图像/声音速率是比较稳定的,usb-storage里边肯定不会用到等时传输.因为我们只管copy一个文件.

U盘使用的是一个叫做Bulk-Only的传输协议.使用这种协议的设备只有两种传输方式,一种是批量传输,另一种是控制传输,控制传输是任何一种usb设备都必须支持的,它专门用于传输一些控制信息.而bulk传输,它就是U盘的主要工作,读写数据.

(3)
和endpoint齐名的有一个叫做管道,endpoint就是通信的发送或者接收点,你要发送数据,那你只要把数据发送到正确的端点那里就可以了.之所以U盘有两个bulk端点,是因为端点也是有方向的,一个叫做Bulk in,一个叫做Bulk out,从usb主机到设备称为out,从设备到主机称为in.

而管道,实际上只是为了让我们能够找到端点,就相当于我们日常说的邮编地址,管道应该有两端吧.

管道的另一端应该是usb主机,即前面说的那个host,usb协议里边也是这么说的,协议里边说pipes代表着一种能力,在主机和设备上的端点之间移动数据,usb里边所有的数据传输都是有主机发起的.一切都是以主机为核心,usb core里边很多函数就是,为了让usb host能够正确的完成数据传输或者说传输调度

比如说我要从U盘里读一个文件,那我告诉usb host某个端点能有用吗?那个文件又不是存放在一个端点里边,它不该是存放在U盘里边吗?即数据本身并不是在端点里,但是看上去却觉得仿佛在端点里.这一切的谜团,让我们在storage_probe()函数里去慢慢解开吧.

猜你喜欢

转载自blog.csdn.net/sinat_37817094/article/details/80355691