USB

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 上移动数据包时,主机控制器也协同操作。

 
 
分类: USB嵌入式单片机

USB 的数据构成方式

 

  包(Packet)是USB系统中信息传输的基本单元,所有数据都是经过打包后在总线上传输的。USB包由五部分组成,即同步字段(SYNC)、包标识符字段(PID)、数据字段、循环冗余校验字段(CRC)和包结尾字段(EOP),包的基本格式如下图:

封包格式

  SOF封包属于令牌封包的一种,但具有独自的PID类型名:SOF。这个封包常用于等时传输,并不应用于低速设备。令牌(token)封包,由于USB的数据交换是由PC主机端所激活的,所以在每一个数据交换中必须以SYNCPIDADDRENDPCRC55个数据域组合而成的令牌封包为起始。数据封包含有4个域:SYNCPIDDATACRC16DATA数据域的位值是根据USB设备的传输速度及传输类型而定,且须以8字节为基本单位。也就是,若传输的数据不足8字节,或传输到最后所剩余的也不足8字节,仍须传输8字节的数据域。格式如下:

握手封包仅包含SYNC和一个PID数据域。

事务

  USB规范将事务( Transaction )定义为将一个服务传输到一个端点。这里的服务是指主机传输信息给设备或从设备接收信息。每一个传输含一个或多个事务,而每一个事务包含一个或多个信息包,如图所示。

数据构成方式

  主机总是用一个令牌包开始一个事务。令牌包指定一个设备地址和端点号。在这之后是一个或多个数据包传输,有的事务也可不需要进行数据包传输,传输方向和数据包的数量也由令牌指定。最后是沿数据传输的反方向发送一个握手包。

  事务依据其目的及数据流的方向可分为输入事务、输出事务和设置。输入事务、输出事务用于主机与设备之间传输数据,设置事务用来将控制传输的要求传输给设备。

 
 
原文地址:https://www.cnblogs.com/Leo_wl/p/3006269.html