USB通信数据流分析
数据在主机端经过客户软件层、USB系统软件层和主机控制器3个逻辑层,在设备端经过USB总线接口层、USB设备层和功能层。在编程时,客户软件通过USB系统软件提供的编程接口操作对应的设备,而不是直接操作内存或I/O端口来实现。
以信号从主机流向设备为例:客户软件经USBD(USB Driver)传输给系统软件的数据是不具有USB通信格式的数据。系统软件对这些数据分帧,实现带宽分配,而后交给USB主机控制器。主机控制器对数据按USB格式打包,实现传输事务,再经串行接口引擎(SIE)后将数据最终转化为符合USB电气特征的差分码从USB电缆发往设备。数据到达设备后的操作是一个逆过程:在设备层中将数据解码,发往不同端点的数据包被分开并正确排列,帧结构被拆除,数据成为非USB格式的;而后数据被送往各端点,实现通信。
在主机方,有HCD和USBD两个接口层。HCD的全称为主机控制驱动(Host Control Driver),它是对主机控制器硬件的一个抽象,提供与USB系统软件之间的软件接口。从客户软件的角度看,USBD控制所有的USB设备,而客户对设备的控制和所要发送的数据只要交给USBD就可以了。USBD为客户软件提供命令机制和管道机制。客户软件通过命令机制可以访问所有设备的端点0且与默认管道通信,从而实现对设备的配置和其他一些基本的控制工作。管道机制允许客户和设备实现特定的通信功能。
USB主机/设备的细节图
如上图所示为USB主机/设备详细示意图。主机和USB设备物理上的简单连接要求大量的层和实体之间相互作用。USB总线接口层提供主机和设备之间的物理/信号/包的连通性。USB设备层是USB 系统软件所具有的观点,也是USB系统软件对设备执行普通USB操作的层。功能层通过合适的匹配的客户软件层向主机提供通信的能力。USB 设备和功能层在他们的层内都有一个逻辑通信的情况,但是实际上他们是通过USB总线接口层完成数据传输的。
USB逻辑设备对USB系统来说是一个端点的集合。接口是端点聚集而成的端点集,是功能设备的体现。USB系统软件用默认的控制管道管理设备。客户软件用管道束(与端点集相关)来管理接口。
客户软件要求数据通过USB在主机上的缓冲区和USB设备上的端点之间移动。而在USB 上移动之前,由主机控制器(或者USB设备,由传输方向决定)将数据进行封装。当总线访问是在USB 上移动数据包时,主机控制器也协同操作。