USB具有多个层,在USB 2.0规范中进行了介绍。如果您熟悉OSI分层网络模型,则可以这样考虑:
- 会话层=第10章USB主机硬件和软件(设备驱动程序)
- 传输层=第9章USB设备框架
- 网络层=第8章协议层(比特流)
- 数据链路层=第7章电气(电路)
- 物理层=第6章机械(电缆和连接器)
从概念上讲,USB基于称为Endpoints的数据流,该数据流可以是IN(到主机)或OUT(从主机)。每个设备都有端点0,用于控制和状态。设备可能具有用于应用程序数据的其他终结点。每个端点的行为就像一个FIFO缓冲区。
数据以批量(如TCP / IP,确保每个字节以正确的顺序到达)或等时(如UDP / IP,保证为新鲜但可能丢弃数据包)在端点上传输。有一个误导性的名为“ Interrupt ”的传输类型,它实际上只是由主机轮询的。
USB 2.0将差分对用于数据链路。关于USB 2.0规范的第7章将对此进行详细介绍。通常,在PCB布局上,我们将其视为匹配长度的差分对,并放入任何USB PHY所需的串联电阻(物理接口)正在使用。USB外设在D +或D-线之一上使用高阻值电阻来通知主机它是高速还是低速外设。
USB主机发现设备存在后不久,主机便从该设备请求一堆描述符。FTDI芯片在后台对此进行了处理。描述在第9.5章中描述。这些包括设备描述符,配置描述符,接口描述符,端点描述符,字符串描述符,甚至HID报告描述符。
所述设备描述符包括USB VID(供应商标识)和PID(产品识别)号。操作系统使用这对数字VID_PID来确定该设备应使用哪个设备驱动程序。请注意,VID号是通过在USB实施者论坛中拥有成员资格而发出的,因此,如果您是个人发明者,那么这就是一个问题。
此外,还有HID(人机接口设备)类驱动程序,它为键盘/鼠标/等提供某种通用输入,以及任何通用输入/输出。HID的一个优点是它不需要提供自定义设备驱动程序,但是与自定义批量驱动程序相比,它的吞吐量有所限制。关于HID描述符还有其他完整的规范文档。和HID使用表 文档,其中详细说明了描述给定人机接口设备上可用的各种功能的所有代码。
FTDI芯片(例如FT220X数据表)提供USB“串行接口引擎”(不要与SPI串行或RS232串行混淆)。这将处理第6、7和8章中描述的大多数低级内容。
FTDI使用EEPROM(在FT2232H上为片外,在FT220X上为片内)来包含少量进入描述符的信息。您可以自定义VID / PID值,并提供自定义描述字符串。