USB设备作为一个完整的硬件设备,是由硬件和固件两部分组成的。其中固件包括有关系统配置和CPU的一些设置模块、USB协议栈模块等几部分。
USB设备在硬件上要由USB的芯片来实现。这个芯片的作用有:管理和实现USB的物理层差模信号;提供给连接的接口;电源管理;以寄存器的形式提供各种端点;提供各种配置和存储寄存器。因此,固件就是以这些硬件资源为基础来实现USB的功能。一般的USB 芯片都会提供几个标准的端点,每个端点都支持单一的总线传输方式,其中端点0必须支持控制传输。管理和使用这些端点,就需要通过相应的控制寄存器、状态寄存器、中断寄存器和数据寄存器来实现。合理有效地使用这些寄存器,是编好USB 协议栈的关键。
简而言之,USB的协议栈以设备端点的使用和管理作为基础和核心。而在端点的这些寄存器中,对中断寄存器的管理尤为重要,而且编写USB的中断服务程序是整个设备端USB固件编写的主要内容。
中断服务程序的功能主要是处理USB发送和接收的不同通信信息;从端点0获得主机的控制信息,或是向端点0发送设备的描述信息;以及向其他端点发送完整的数据。能够触发USB中断的条件很多,一般可分为一下几类:
1.接收缓冲区满;
2.发送缓冲区空;
3.设备SETUP令牌传输;
4.输出OUT令牌传输;
5.输入IN令牌传输;
6.主机发送唤醒RESUME信号;
7.主机发送包结束EOP信号。
中断服务程序的任务就是分辨这些触发条件,然后转入相应的处理程序中。整个中断的处理过程可分为3个步骤:
1.通过访问USB芯片的寄存器了解中断触发的原因,以及其他相关信息。
2.根据确定的中断触发原因,转入相应的处理程序。
3.根据协议处理的结果,控制USB芯片完成相应的通信任务。
步骤1和3与芯片本身的硬件结构直接相关,需要根据芯片的相关规定来确定,而步骤2最复杂,但这个过程与芯片的硬件没有直接联系,各种USB设备的步骤2都有共同的地方,可以参考编写。
以下为一个比较精简的USB设备固件流程图。
用户50611 2009-1-4 00:29