嵌入式开发中,usb通信中输出端点和输入端点

一. 简介

本文简单学习一下,嵌入式开发中,usb的输出端点和输入端点。

在嵌入式开发的 USB 通信场景中,输出端点(OUT Endpoint)输入端点(IN Endpoint) 是 USB 设备与主机(如电脑、嵌入式主控)进行数据交互的核心 "通道",其设计和使用直接决定了设备的通信能力。两者的核心区别围绕数据流向展开,同时需结合嵌入式设备的硬件特性、USB 协议规范及驱动逻辑来理解。

二. 嵌入式开发中,usb通信中输出端点和输入端点

1. 核心定义:数据流向是根本区别

在嵌入式开发中,USB通信的"输入"(IN)和"输出"(OUT)端点是以USB主机(Host)为参考基准来定义的。

###### 端点类型 ###### 数据流向 ###### 核心作用(嵌入式场景) ###### 典型应用举例
输出端点(OUT) 主机 → 嵌入式设备 接收主机下发的控制指令、配置参数或待处理数据 主机向嵌入式设备发送控制命令(如电机转速设置)、向 U 盘写入文件数据
输入端点(IN) 嵌入式设备 → 主机 向主机上报设备状态、传感器数据或处理结果 嵌入式设备向主机上传温湿度数据、U 盘向主机读取文件数据、摄像头向主机传输图像帧

2. 嵌入式场景下的共性特性

无论是输入还是输出端点,在嵌入式 USB 通信中均需遵循以下共性规则,这些规则由 USB 协议和嵌入式硬件限制共同决定:

(1) 端点是 "单向、专用" 的通道(除了端点0,它用于控制传输,可双向)

  • 每个端点仅支持一个方向的传输(要么 IN,要么 OUT),无法双向复用(除了端点0,它用于控制传输,可双向);
  • 嵌入式设备的端点数量有限(受 USB 控制器硬件限制,如多数低端控制器支持 4~8 个端点),需根据需求分配(如一个设备可同时包含 1 个 OUT 端点和 1 个 IN 端点,实现双向通信)。

(2) 与传输类型强绑定

嵌入式设备的端点必须关联 USB 协议定义的传输类型(不同传输类型对应不同的端点类型),输入 / 输出端点仅存在于以下 3 种传输类型中(控制传输的端点有特殊规则,见下文):

###### 传输类型 ###### 支持的端点方向 ###### 嵌入式场景用途
批量传输(Bulk) IN 端点、OUT 端点 大量数据传输(如 U 盘、数据记录仪),需保证数据完整性
中断传输(Interrupt) IN 端点、OUT 端点 小批量、周期性数据(如键盘(IN)、鼠标(IN)、设备状态上报)
同步传输(Isochronous) IN 端点、OUT 端点 实时性数据(如 USB 麦克风(IN)、USB 音箱(OUT)),不保证数据完整性

(3) 控制传输的特殊端点:端点 0(默认控制端点)

所有 USB 设备必须包含一个端点 0 (默认控制端点),它是双向的(可同时实现 IN 和 OUT 功能),仅用于设备枚举、配置、命令交互(如主机查询设备信息、发送复位命令),不用于普通数据传输。

3. 嵌入式开发中的关键差异(OUT 端点 vs IN 端点)

在嵌入式硬件设计、协议栈配置和驱动开发中,输入 / 输出端点的处理逻辑存在显著差异,具体体现在以下 4 个维度:

###### 对比维度 ###### 输出端点(OUT) ###### 输入端点(IN)
硬件触发逻辑 主机向设备发送数据时,USB 控制器产生 OUT 中断,嵌入式 MCU 需中断服务函数中读取数据 设备有数据待上传时,需主动向 USB 控制器 "提交" 数据,或等待主机发起 IN 事务后,控制器产生 IN 中断触发数据发送
数据缓冲区 需在嵌入式设备中分配 "接收缓冲区"(用于存储主机发来的数据),缓冲区大小需 ≥ 端点的 "最大包大小" 需分配 "发送缓冲区"(用于存储待上传到主机的数据),缓冲区大小需 ≥ 端点的 "最大包大小"
协议栈配置 需在 USB 设备描述符(Endpoint Descriptor)中设置 bEndpointAddress 最高位为 0 (如端点地址 0x02 表示端点 2,OUT 方向) 需设置 bEndpointAddress 最高位为 1 (如端点地址 0x82 表示端点 2,IN 方向)
错误处理 若主机发送的数据错误(如 CRC 校验失败),嵌入式设备无需处理,主机将自动重传(批量 / 中断传输) 若设备发送的数据错误,主机可能丢弃(同步传输)或要求重传(批量 / 中断传输),需在驱动中处理重传逻辑

三. 嵌入式开发实战关键点

1. 端点参数配置(核心是 "最大包大小")

嵌入式设备的每个输入 / 输出端点必须配置 最大包大小(Max Packet Size),该值由 USB 设备速度和传输类型决定,直接影响通信效率,协议规定的默认值如下:

USB 设备速度 批量传输(Bulk)最大包大小 中断传输(Interrupt)最大包大小 同步传输(Isochronous)最大包大小
低速(Low-Speed,1.5Mbps) 不支持批量 / 同步传输 ≤ 8 字节 不支持
全速(Full-Speed,12Mbps) ≤ 64 字节 ≤ 64 字节 ≤ 1023 字节
高速(High-Speed,480Mbps) ≤ 512 字节 ≤ 1024 字节 ≤ 1024 字节
超高速(Super-Speed,5Gbps) ≤ 1024 字节 ≤ 1024 字节 ≤ 1024 字节

例:一个全速嵌入式数据采集设备,若用批量 IN 端点上传数据,最大包大小可配置为 64 字节,每次最多上传 64 字节;若数据量超过 64 字节,需拆分为多个包连续传输。