嵌入式开发中,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.pswp.cn/bicheng/94194.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/94194.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【自用】Maven常用依赖

【自用】Maven常用依赖 工具类 Guava Guava(Google Guava)是由Google团队开发的一套Java开源工具库,旨在简化和增强Java开发者的日常工作。它提供了许多实用的工具和基础设施,覆盖了集合、并发、字符串处理、I/O、数学运算等多个…

Java 18 新特性及具体应用

目录 1. UTF-8 默认编码 (JEP 400) 2. 简单 Web 服务器 (JEP 408) 3. Javadoc 代码片段 (JEP 413) 4. switch 模式匹配 (JEP 420, 第二次预览) 5. 向量 API (JEP 417, 第三次孵化) 总结 Java 18 于 2022 年 3 月发布,引入了多项新特性,旨在提升开发…

unistd.h 常用函数速查表

在这篇文章中,我们将整理一份 unistd.h 常用函数速查表,便于快速查找和记忆,涵盖文件 I/O、进程管理、系统信息、用户/组信息等方面。unistd.h 常用函数速查表(POSIX/Linux/macOS) 1. 文件与 I/O 操作函数说明示例int …

【电子通识】芯片生产考验“三重门”之CP、FT与WAT测试

在我们日常生活中,从手机、电脑到汽车、家电,都离不开一颗颗小小的芯片。你可曾想过,这些功能强大的芯片在出厂前要经过怎样严苛的“体检”才能保证质量可靠?今天,我们就来聊聊芯片制造过程中三道至关重要的测试关卡&a…

Java RESTful API 构建从入门到精通:一步步打造高效后端服务

还在为高昂的AI开发成本发愁?这本书教你如何在个人电脑上引爆DeepSeek的澎湃算力! 在当今数字化时代,RESTful API 已成为现代Web应用的核心组成部分,它提供了一种标准化、灵活的方式来实现前后端分离和跨平台数据交互。本文作为一篇完整的指南,将从基础概念入手,详细阐述…

TypeScript 接口(interface)

一、接口基础概念接口(interface)是 TypeScript 的核心类型系统工具,用于定义对象的结构规范。它不关心具体实现细节,只强制要求符合接口定义的对象必须包含指定属性和方法。例如:interface Person {name: string;age:…

selenium3.141.0执行JS无法传递element解决方法

问题:在Chrome 131版本以下执行下面代码没有问题,但是在131版本以上出现element无法传递问题,执行下面代码会出现 "Message: javascript error: Cannot read properties of undefined (reading click)"# xpath匹配元素,…

汽车主机厂为何开始押注平台化视觉?

近年来,随着智能制造、出口质量标准、新能源整车结构复杂度等多重因素叠加,越来越多主机厂开始从“点状部署”转向“系统化导入”,平台化的AI视觉检测体系正逐步成为整车厂的标准化选项。在过去,汽车制造四大车间——焊装、涂装、…

STM32 - Embedded IDE - GCC - 重定向printf到串口

导言如上所示,在不同的编译器下,重定向printf到串口时,使用的函数不一样。 ARMCC(Keil-MDK)使用fputc()GCC使用_write() 总之,GCC/newlib的printf()走_write(),不是fputc()。

51单片机-中断系统

本质概述思维导图:51单片机中断系统中断系统概述中断系统是为使CPU具有对外界紧急事件的实时处理能力而设置的。当中央处理机CPU正在处理某件事的时候外界发生了紧急事件请求,要求CPU暂停当前的工作,转而去处理这个紧急事件,处理完…

ubuntu - 终端工具 KConsole安装

地址: https://konsole.kde.org/download.html 直接使用自带安装管理器安装即可

QT-左右侧边栏动画

QT-左右侧边栏动画演示效果一、核心程序二、链接演示效果 一、核心程序 #ifndef SLIDEPANEL_H #define SLIDEPANEL_H#include <QWidget> #include <QPropertyAnimation> #include <QPushButton> #include <QVBoxLayout>class SlidePanel : public QWi…

WebRTC 结合云手机:释放实时通信与虚拟手机的强大协同效能

开发一个基于 WebRTC 技术的云手机群控系统&#xff0c;实现通过浏览器远程控制多台云手机&#xff0c;并提供文件管理、代理管理、备份管理等功能。这里只详细分享 WebRTC 技术。 https://github.com/LingyuCoder?tabrepositories&qsky&type&language&sort …

Kafka中zk的作用是什么

Zookeeper是分布式协调&#xff0c;注意它不是数据库 kafka中使用了zookeeper的分布式锁和分布式配置及统一命名的分布式协调解决方案 在kafka的broker集群中的controller的选择&#xff0c;是通过zk的临时节点争抢获得的 brokerID等如果自增的话也是通过zk的节点version实现的…

【lucene】lucene常用查询一览

Lucene 里除了常见的 **TermQuery / BooleanQuery / PhraseQuery / FuzzyQuery / SpanNearQuery** 之外&#xff0c;还有不少“特殊家族”。下面按“族”归纳&#xff0c;一眼就能知道它们各自解决什么问题、跟普通倒排检索的差别在哪。────────────────── …

base64认识实际使用

Base64是网络上最常见的用于传输8Bit字节码的编码方式之一&#xff0c;Base64就是一种基于64个可打印字符来表示二进制数据的方法。 Base64&#xff0c;就是包括小写字母a-z、大写字母A-Z、数字0-9、符号"“、”/"一共64个字符的字符集&#xff0c;&#xff08;任何…

LX8201微孔雾化驱动芯片应用笔记一DC5V供电

前言LX8201是深圳市乐⽽信科技服务有限公司最新⾃研的⼀款微孔雾化⽚专⽤驱动芯⽚&#xff0c;结合标准外围电路&#xff0c;能有效驱动控制市⾯上各种微孔雾化⽚&#xff0c;基于独特的电路设计和软件算法&#xff0c;其在功耗以及成本上均具有明显的优势。本应用笔记将帮助用…

MySQL索引优化之索引条件字段类型不同

在sql的联表查询中&#xff0c;on后面相等的两个字段如果字段类型不一致&#xff0c;尽管它们都加了索引&#xff0c;最终查询的时候也不会走索引&#xff0c;这是因为会触发隐式类型转换导致索引失效。 例如 Select * from Orders o left join User u on o.user_id u.id; 假如…

【Linux】信号(二):Linux原生线程库相关接口

【Linux】信号的控制使用一.线程的创建pthread_create()接口二.线程等待1.为什么要线程等待&#xff1f;2.pthread_join()三.线程中止1.return2.pthread_exit五.线程应用C自带多线程在上次的博客中主要讲解了什么是线程 这次的博客主要是带大家把线程的相关接口简单的使用一下 …

小程序被爬虫攻击,使用waf能防护吗?

在移动互联网时代&#xff0c;小程序以轻量化、高便捷性成为流量入口新宠&#xff0c;但也因此成为爬虫攻击的重灾区。从电商平台的价格数据爬取到内容平台的版权盗用&#xff0c;爬虫攻击不仅消耗服务器资源&#xff0c;更可能导致商业机密泄露与用户权益受损。面对这类威胁&a…