1. USB子系统简介

1.1      USB简介

     USB,是英文Universal Serial Bus(通用串行总线)的缩写,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯。是应用在PC领域的接口技术。USB接口支持设备的即插即用和热插拔功能。USB是在1994年底由英特尔康柏、IBM、Microsoft等多家公司联合提出的。

1.2      USB虚拟网卡框架

1.2.1   普通网卡与USB网卡框架对比

    如图 11所示,普通网卡驱动与USB网卡驱动相比最大的区别是,USB网卡把普通的物理硬件换成了USB的物理硬件。

170855_4Tcf_3260790.png

图 11 USB网卡与普通网卡对比图

1.2.2   USB虚拟网卡框架

    如图 12所示,在SylixOS中,USB网卡框架中网卡驱动可大致分为4层分别为USB网卡驱动层、USB协议层、Gadget层和UDC层。

170906_jJDO_3260790.png

图 12 SylixOS USB虚拟网卡框架

    USB网卡驱动层:服务对象是网络协议栈(TCP/IP或者LWIP)用来接收或发送网络报文。

    USB协议层:从USB网卡驱动层接收网络报文加工生成对应的USB报文或者,从UDC层接收USB报文转换成网络报文。

    Gadget层:完成的工作是绑定UDC层和USB协议层,注册绑定相关的回调函数,此层功能类似于Linux下的Platform功能。是为了去除耦合便于移植和代码复用。

UDC层:配置USB寄存器来实现硬件传输功能。

2. SylixOS虚拟网卡数据流

2.1      数据流整体框架

    USB数据在传输的过程中会经过如图 21所示中的相关代码层。数据每经过一个代码层,代码层会对数据进行加工处理。

171037_1GzM_3260790.png

图 21 USB虚拟网卡数据分层

2.2      数据流实例

    如图 22所示,举一个数据传输的实例。上层应用要传输数据“123”(数据“123”称为原始数据),首先需要经过协议栈层。协议栈会把原始数据封装成网络报文继续向下传输。需要注意如果是普通网卡驱动最终传输的就是网络报文,但USB仍然需要对网络报文再次封装。网络报文经过USB协议层时,会根据安装好的驱动选择对应的USB驱动协议进行报文封装,把网络报文转换成USB报文。最终在USB上传输的是USB报文。发送的过程是对原始数据封装组包的过程,同理接收数据是对接收到的数据拆包解析的过程。有了这套机制,就可以保证数据可以正确传输。

图 22 数据流实例