当前位置: 首页 > news >正文

嵌入式开发中,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 字节,需拆分为多个包连续传输。

http://www.dtcms.com/a/346230.html

相关文章:

  • AP服务发现PRS_SOMEIPSD_00255 的解析
  • Java面试-访问修饰符:public、protected、default、private 详解
  • CAN总线工具学习:DBC解析、设备扫描与报文监控
  • Linux环境搭建FTP协议
  • fdisk工具源码编译生成
  • 记SpringBoot3.x + SpringSecurity6.x的实现
  • 20250822日记
  • 深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)第四章知识点问答(37题)
  • 如何编译botan加密库?
  • 模板商城探秘:DINO-X 定制模板指南(1)
  • Ansys Motor-CAD:概述(EMag、THERM、LAB、MECH)
  • Unreal Engine UActorComponent
  • 豆包 + 蘑兔,破解写歌难题!
  • 普中烧录软件 PZISP,打不开,提示“应用程序无法启动,因为应用程序并行配置不正确.....”
  • 深度学习设计模式:责任链(Chain of Responsibility)模式(例子+业务场景+八股)
  • RFID技术在铸管生产车间AGV小车的使用
  • SQL 复杂连接与嵌套查询的优化之道:从自连接、不等值连接到 CTE 的体系化实践
  • 「数据获取」《中国农村统计年鉴》1985-2024(获取方式看绑定的资源)
  • Python中各种数据类型的常用方法
  • 国产轻量级桌面GIS软件Snaplayers从入门到精通(20)
  • 自定义单线通信协议解析
  • Unreal Engine Simulate Physics
  • MySQL InnoDB记录存储结构深度解析
  • windows 帮我写一个nginx的配置,端口是9999,静态资源的路径是D:\upload
  • 企业架构之微服务应用架构
  • 深入理解底层通信协议和应用层协议的区别
  • Java Stream常见函数与应用案例
  • 大模型应用发展与Agent前沿技术趋势(下)
  • Debezium导致线上PostgreSQL数据库磁盘日志飙升处理方案
  • Unreal Engine ATriggerVolume