1. USB子系统简介
1.1 USB简介
USB,是英文Universal Serial Bus(通用串行总线)的缩写,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯。是应用在PC领域的接口技术。USB接口支持设备的即插即用和热插拔功能。USB是在1994年底由英特尔、康柏、IBM、Microsoft等多家公司联合提出的。
1.2 USB虚拟网卡框架
1.2.1 普通网卡与USB网卡框架对比
如图 1‑1所示,普通网卡驱动与USB网卡驱动相比最大的区别是,USB网卡把普通的物理硬件换成了USB的物理硬件。
图 1‑1 USB网卡与普通网卡对比图
1.2.2 USB虚拟网卡框架
如图 1‑2所示,在SylixOS中,USB网卡框架中网卡驱动可大致分为4层分别为USB网卡驱动层、USB协议层、Gadget层和UDC层。
图 1‑2 SylixOS USB虚拟网卡框架
USB网卡驱动层:服务对象是网络协议栈(TCP/IP或者LWIP)用来接收或发送网络报文。
USB协议层:从USB网卡驱动层接收网络报文加工生成对应的USB报文或者,从UDC层接收USB报文转换成网络报文。
Gadget层:完成的工作是绑定UDC层和USB协议层,注册绑定相关的回调函数,此层功能类似于Linux下的Platform功能。是为了去除耦合便于移植和代码复用。
UDC层:配置USB寄存器来实现硬件传输功能。
2. SylixOS虚拟网卡数据流
2.1 数据流整体框架
USB数据在传输的过程中会经过如图 2‑1所示中的相关代码层。数据每经过一个代码层,代码层会对数据进行加工处理。
图 2‑1 USB虚拟网卡数据分层
2.2 数据流实例
如图 2‑2所示,举一个数据传输的实例。上层应用要传输数据“123”(数据“123”称为原始数据),首先需要经过协议栈层。协议栈会把原始数据封装成网络报文继续向下传输。需要注意如果是普通网卡驱动最终传输的就是网络报文,但USB仍然需要对网络报文再次封装。网络报文经过USB协议层时,会根据安装好的驱动选择对应的USB驱动协议进行报文封装,把网络报文转换成USB报文。最终在USB上传输的是USB报文。发送的过程是对原始数据封装组包的过程,同理接收数据是对接收到的数据拆包解析的过程。有了这套机制,就可以保证数据可以正确传输。
图 2‑2 数据流实例