前两年做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号端点,可以根据实际需要定义为数据输出或数据输入端点,但是不能将同一个端点定义为双向的(既输入也输出)的端点。