初涉USB入门 - Part One Summary

来源:互联网 发布:淘宝特价秒杀群 编辑:程序博客网 时间:2024/05/18 01:44

  今日刚刚拿到毕业设计的众多资料,发现自己的毕业设计牵扯到许多方面:Linux驱动程序设计;USB协议;单片机板。能同时接触这么多方面的知识确实另我很是开心,同时也感到了点压力,不知道该怎么入手,不过在复习资料中找到一份前人撰写的初涉USB让我受益匪浅。这里把文章中提到的重点内容复习一遍,提醒自己,同时方便将来查阅。

 

  USB设备在接入主机的过程中包括三个阶段:

        设备插入 --> 枚举过程 --> 数据阶段

  枚举过程:主机与USB设备之间互相通信,利用STEP包达到设备识别等效果,使设备启用的过程。枚举过程中有专用的通信规范,遵从一些指定的规则,这里就不再叙述。上面提到的STEP包是专门用于枚举阶段的数据包,在后面还会简单介绍它在所有包中所处的位置。

  数据阶段:主机与USB设备之间互相通信,交互数据的过程。交互数据的过程中用到的包有IN包和OUT包等。IN包用于指示后期数据传输是由USB设备到主机;OUT包用于指示后期数据传输是由主机到USB设备。也就是说IN,OUT是针对主机而言的。

 

  下面介绍所有的USB包:

    USB数据包分类:令牌包,数据包,握手包,特殊包

    令牌包 包括 OUT包,IN包,STEP包等

  以上许多包都已经提到其作用,包括OUT包,IN包,STEP包。下面在分别就这些包会出现的地方再做一次介绍。

 

  一次主机与USB设备之间的对话一定要通过包的相互传递来实现,一次对话,无论发生在枚举阶段还是发生在数据阶段,都由三个阶段组成。这里的三个阶段不是USB设备接入主机的三个阶段,而是主机与USB设备之间一次交互中包含的三个阶段:

        令牌阶段 --> 数据阶段 --> 握手阶段

  令牌阶段:使用令牌包,即OUT包,IN包或者STEP包。这就要看这次交互处于USB设备接入主机的哪个阶段,以及主机发出什么样的命令。(从主机发出)

  数据阶段:使用数据包。(从主机或USB设备发出)

  握手阶段:使用握手包。(从主机或USB设备返回)

 

  以上的所有介绍中,没有涉及对包的具体分析,即按比特位分析。这些部分的内容在将来应该有需要时会涉及到,到那时再详细记录。

 

图片

  摘抄:

  这里捎带着说一下端点(endpoint)的概念,一般一个USB设备都会有数个端点,端点就是一个数据缓冲控制区(FIFO),每个缓冲区相当于有一个出口一个进口的池子,数据通过进口进入到池子,然后你再在固件里去用这些数据。固件往电脑写数据,也是把数据先放到池子里,然后打开出口,就可以干自己的事情,不用一个个的把数据发出了,池子的出口自动把数据流出。

  一般的端口0是用来做标准请求响应用的,也就是在枚举阶段用到。我一般把端口1定义为出(OUT),端口2定义为入(IN)(注意,这个OUT和IN是相对与电脑的,也就是说OUT是数据从电脑出去到设备,IN是设备的数据进入电脑)。这些定义也是在标准请求中去告诉电脑的。