USB1.1协议学习经验之1----设备端点

来源:互联网 发布:ubuntu怎么打开终端 编辑:程序博客网 时间:2024/06/14 10:03

前两年做USB设备程序和USB设备主机驱动程序,学习了USB1.1协议,现在将我的学习经验和实际工作遇到的USB协议的关键知识与大家共享,如有不正确的地方,还请指教。

USB协议全本包括的内容很多,有气电特性,拓扑,数据流模型,主机硬件和软件等众多内容,我选偏软件和实践中经常遇到的内容知识点和大家分享。

先说几个大家经常在网上看到或听到的术语:

USB固件:我开始学做USB东东的时候,老是看到这个词,不知道是什么东西,后来才搞清楚,就是USB设备,比如像U盘,MP3什么的;

USB设备驱动:就是计算机中的USB驱动程序,如果你在WIN9X下用U盘,就有找到新硬件,要求安装USB设备驱动的提示;

USB主机:常用的就是计算机,但也不一定只是计算机,还可能是其他的支持USB主机的设备,比如现在好多数码相机,机床什么的。认为是计算机的可以了。

现在开始:

在设计USB设备(USB器件资料中)和写USB主机驱动(要指定和设备通讯的端点号)时,我们多会遇到到一个USB术语---端点(Endpoint),端点的定义原文:A uniquely addressable portion of a USB device that is the source or sink of information in a communication flow between the host and device. See also Endpoint Address.我英文不好,就不翻译了。按照我的理解,端点就是USB设备与USB主机连接通讯收发控制信息,数据的USB设备的内部端口。

每个连接到USB主机上USB设备都有一个唯一的地址,这个地址是在设备连上主机时,由主机分配的,而设备中的每个端点在设备内部有唯一的端点号。这个端点号是在设备设计时被给定的。每个端点都是一个简单的连接点,或者支持数据流进设备,或者支持其流出设备,两者不可得兼。

一个端点的特性决定了它与客户软件进行的传送的类型。一个端点有以下特性:

  ·端点的总线访问频率要求

  ·端点的总线延迟要求

  ·端点的带宽要求

  ·端点的端点号

  ·对错误处理的要求

  ·端点能接收或发送的包的最大长度

  ·端点的传送类型

  ·端点与主机的数据传送方向

  端点号不为0的端点在被设置前处于未知状态,是不能被主机访问的。

0号端点的要求:

所有USB设备都需要实现一个缺省的控制方法。这种方法将端点0作为输入端点,同时也将端点0作为输出端点。USB系统用这个缺省方法初始化及一般地使用逻辑设备(即设置此设备)。缺省控制通道支持了对控制的传送,一旦设备接上,并加电,且又收到一个总线复位命令,端点0就是可访问的了。

对非0号端点的要求:

设备可以有除0以外的其它端点,这取决于这些设备的实现。低速设备在0号输入及输出端点外,只能有2个额外的可选端点。而高速设备可具有的额外端点数仅受限于协议的定义(协议中规定,最多15个额外的输入端点和最多15个额外的输出端点)

除缺省控制通道的缺省端点外,其它端点只有在设备被设置后才可使用。

 

看的有点迷糊,举个例子说明一下:

以USB器件SL811HS(Embedded USB Host/Slave Controller)设计一个USB设备(比如U盘),你需要将mcu(单片机/DSP),SL811HS,FLASH器件和其它一些器件连起来,在mcu中编写操作U盘固件程序来实现一个U盘设备的功能。SL811HS中有4个端点号(0-3),0号端点为缺省控制端点,1-3号端点,可以根据实际需要定义为数据输出或数据输入端点,但是不能将同一个端点定义为双向的(既输入也输出)的端点。