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

【嵌入式】第2讲:USB CDC 从“插上电脑”到“出现 COM 口”,枚举过程到底发生了什么

好进入第 2 讲。第2讲USB CDC 从“插上电脑”到“出现 COM 口”枚举过程到底发生了什么后面调试时最常见的问题不是“代码编译不过”而是插上电脑没反应设备管理器里看不到东西有未知设备但没 COM 口有设备名但打不开有 COM 口但发不回去这些问题本质上都和枚举过程有关。所以这一讲要学会两件事电脑插上板子后双方在干什么调试时怎么根据现象判断卡在哪一步一、先讲一句最核心的话“出现 COM 口”不是 USB 一插上就天然有的而是电脑先成功识别了你的设备是 CDC然后操作系统才把它呈现成 COM 口。也就是说插上USB - 电脑检测到设备接入 - 电脑开始枚举 - 设备返回描述符 - 电脑确认这是 CDC 设备 - 系统加载对应驱动 - 设备管理器里出现 COM 口如果这条链中间任何一步出问题COM 口都可能不会出现。二、什么叫“枚举”可以先把“枚举”理解成电脑在给新插入的 USB 设备做身份核验和能力确认。电脑要确认这些问题你是不是一个合法 USB 设备你是什么设备你支持什么功能你有几个接口你有哪些端点该给你配什么驱动设备必须按 USB 规范回答。如果回答对了电脑就继续。如果回答错了电脑就会识别失败变成 Unknown Device或者根本不出 COM 口三、从物理插入开始到 COM 口出现大概经历哪些步骤下面按顺序讲。第 1 步物理接入主机检测到设备存在把 USB 线插上后主机侧首先会感知“有一个 USB 设备接进来了。”为什么能感知因为 USB 设备端会在数据线上表现出“我在这”的电气特征。在板子上这和DPDMUSB_SLAVE板上的相关上拉控制电路有关。原理图能看到USB_SLAVE和DP存在关联链路这就是设备接入识别相关电路的一部分。这一阶段如果有问题常见现象是插上电脑完全没反应设备管理器没有任何刷新甚至供电灯都不对这通常先查USB 线供电D / D- 硬件设备是否真的在跑程序第 2 步主机复位设备准备开始问话电脑发现设备后不会立刻给你 COM 口。它会先做一个“初始化动作”把设备拉到统一起点然后开始问问题。你可以把它想成“先让你站好再开始查身份证。”设备此时必须正确响应 USB 基本协议。如果这一步都没过后面描述符都轮不到。第 3 步主机读取 Device Descriptor设备描述符这是第一份关键身份证。它会告诉主机一些非常基础的信息比如USB 版本厂商 IDVID产品 IDPID设备类别设备版本字符串索引等现阶段不用背字段值但要知道Device Descriptor 是主机认识你的第一步。如果这一步有问题常见现象设备显示为 Unknown USB Device设备描述符请求失败根本继续不下去第 4 步主机给设备分配地址刚插上时USB 设备并不是正式“有身份”的。主机读完第一轮基础信息后会给它分一个 USB 地址。这个地址就像“点名时给你编号”。后面主机再和你通信就按这个地址找你。如果这一步出问题也会导致枚举中断。第 5 步主机继续读取更完整的描述符这里就进入关键阶段了。主机会继续读Configuration DescriptorInterface DescriptorEndpoint DescriptorString Descriptor可以先这样理解它们1. Configuration Descriptor告诉主机我有一种怎样的工作配置里面总共有多少接口总长度是多少2. Interface Descriptor告诉主机我有哪些功能接口每个接口属于什么类别对于 CDC 来说通常会涉及通信控制接口数据接口3. Endpoint Descriptor告诉主机我的数据通道怎么分配哪些端点用来收哪些端点用来发哪些端点是中断/批量等类型4. String Descriptor告诉主机厂商名产品名序列号等字符串信息四、为什么读完这些描述符后电脑才可能出 COM 口因为主机必须先搞清楚“是不是 CDC 设备”只有当主机从描述符中确认这个设备的接口组织方式符合 CDC类别信息正确端点安排合理操作系统才会说“哦这是个虚拟串口设备我给它挂成 COM 口。”所以必须记住COM 口不是某个 GPIO 决定的而是“USB 枚举 CDC 描述符 驱动匹配”的结果。五、为什么有的设备被识别了但就是不出 COM 口这是新手非常容易混淆的点。“被电脑识别”不等于“一定有 COM 口”。可能出现几种情况情况 1设备被识别成别的 USB 类例如HIDMSC自定义类这种情况下设备可能完全正常但就是不会出 COM 口。因为它不是 CDC。情况 2描述符不完整或不符合 CDC 规范这时可能出现设备能被看见但驱动不匹配或者只显示异常设备没有虚拟串口情况 3驱动问题有些系统环境下即便设备本身枚举得差不多如果驱动没匹配好也可能没有 COM 口有感叹号无法打开情况 4枚举中途失败前面几步走了一半但后面某一步失败也可能表现成设备一闪而过反复重连设备管理器刷新但不稳定最终没有 COM 口六、把整个枚举过程类比成“入职登记”把 USB 设备想成“新员工”电脑想成“公司前台”。第一步你进门前台看到“有人来了”。第二步让你站好确认你是一个正常来访者。第三步看身份证读取 Device Descriptor。第四步给你工号给设备分配地址。第五步看你的岗位说明读取 Configuration / Interface / Endpoint Descriptor。第六步安排你进哪个部门如果看出来你是 CDC就把你安排成“串口设备”这个角色。第七步系统里给你开账号最终在 Windows 里变成一个COMx。所以COM 口 电脑完成一整套识别流程后的“岗位分配结果”不是一插上就天然存在。七、结合目标最应该关注哪几个“观察点”后面调试时不要一上来就盯代码。先盯现象。观察点 1插上后设备管理器有没有刷新如果完全没刷新先怀疑USB 线坏板子没供电板子程序没跑USB 硬件链路问题D / D- 没建立有效接入状态观察点 2有没有出现“未知设备”如果出现 Unknown Device说明主机感知到了设备接入但枚举没成功这时候重点查描述符时钟USB 初始化底层驱动观察点 3有没有出现某个 USB 设备但不是 COM 口这说明设备可能部分枚举成功了但没被识别为 CDC重点查CDC 类注册CDC 描述符类/接口/端点配置驱动匹配观察点 4有没有出现 COM 口如果已经出现 COM 口说明前面最困难的那部分其实已经过了USB 设备存在枚举基本成功CDC 类基本成立驱动基本匹配八、为什么 USB 时钟错误会严重影响枚举要提前建立意识。USB 比 UART 更挑时钟。因为 USB 设备和主机之间的数据时序要求更严格。如果 USB 时钟不稳定或不正确常见现象是枚举失败描述符读不完整设备反复断开重连有时认得出有时认不出COM 口时有时无所以以后遇到“奇怪的 USB 问题”时钟一定是重点怀疑对象之一。九、要知道“端点”是什么端点不是物理引脚。可以先把它理解成USB 设备内部的数据通道编号。对于 CDC 设备通常会有控制相关端点数据接收端点数据发送端点主机之所以能和你的“虚拟串口”通信不是靠 原理图上引脚而是靠这些 USB 端点在工作。你现在只要先知道“端点存在且很重要”即可。十、未来会遇到的故障按枚举阶段分类阶段 A物理接入失败现象插上没任何反应查USB 线电源板子程序是否运行D/D- 硬件链路阶段 B早期枚举失败现象设备管理器有反应但显示未知设备或报错查Device DescriptorUSB Core 初始化时钟中断阶段 C类识别失败现象设备被识别了但没有 COM 口查CDC 类注册Interface / Endpoint Descriptor驱动匹配阶段 D应用层失败现象有 COM 口串口助手能打开但发什么都没回查CDC 接收回调缓冲区发送接口忙状态处理十一、这一讲该记住的结论是COM 口不是插上就有是枚举成功后的结果。电脑先读描述符再判断你是不是 CDC。只有被识别成 CDCWindows 才会给你 COM 口。“设备被识别”不等于“一定有 COM 口”。调 USB 问题时要先判断卡在枚举哪一层。十二、当前阶段的理解题自己在脑子里答一遍1. 为什么 USB 设备插上后不一定有 COM 口因为主机要先完成枚举并确认它是 CDC 设备才会表现成 COM 口。2. 为什么描述符很关键因为主机靠它判断设备身份、功能接口和端点组织。3. 如果设备管理器出现 Unknown Device说明什么说明主机已经感知到设备但枚举过程中某一步失败了。4. 如果设备被识别了但没有 COM 口优先怀疑什么优先怀疑 CDC 类配置、描述符、接口和端点组织、驱动匹配。十三、下一讲该讲什么第3讲做 USB CDC 虚拟串口最小工程到底要具备哪些条件这一讲会讲工程必须有哪些基础文件时钟要满足什么中断要满足什么USB 初始化链最小应该有哪些步骤如何判断“现在这个工程具不具备出 COM 口的资格”

相关文章:

【嵌入式】第2讲:USB CDC 从“插上电脑”到“出现 COM 口”,枚举过程到底发生了什么

好,进入第 2 讲。 第2讲:USB CDC 从“插上电脑”到“出现 COM 口”,枚举过程到底发生了什么 后面调试时,最常见的问题不是“代码编译不过”,而是: 插上电脑没反应设备管理器里看不到东西有未知设备&…...

微服务通信:同步 vs 异步与MQ选型指南

微服务通信:同步 vs 异步与MQ选型指南 基于黑马程序员《SpringCloud微服务开发与实战》MQ篇整理。本文深度解析微服务间两种通信模式的核心差异,并提供主流消息队列(RabbitMQ、RocketMQ、Kafka)的技术选型决策框架。 一、同步调用…...

SDMatte模型推理加速:利用OpenCV和CUDA进行预处理优化

SDMatte模型推理加速:利用OpenCV和CUDA进行预处理优化 1. 为什么需要预处理加速 在图像处理的实际应用中,我们常常忽视一个关键环节:预处理。当把一张原始图片送入SDMatte这样的深度学习模型前,通常需要经过一系列转换操作——调…...

Wan2.2-I2V-A14B开源模型:符合ISO/IEC 23053 AI系统可解释性要求

Wan2.2-I2V-A14B开源模型:符合ISO/IEC 23053 AI系统可解释性要求 1. 镜像概述与核心价值 Wan2.2-I2V-A14B私有部署镜像是一款专为文生视频场景优化的AI模型运行环境。这个镜像最突出的特点是完全符合ISO/IEC 23053标准对AI系统可解释性的要求,让用户不…...

智能体设计模式详解 B# 附录G:编程代理

【全景】基于双向协同的能力融合设计 Agent设计模式 V1:基于双向协同的能力融合设计 39种设计模式分层清单 A#0 智能体设计模式全景(上):大模型如何“思考”?(认知视角导论) Agent Design Pattern Catalogue: A Collection of Architectural Patterns for Foundation Mo…...

vLLM+ERNIE-4.5-0.3B-PT部署全攻略:环境准备、服务启动、前端调用

vLLMERNIE-4.5-0.3B-PT部署全攻略:环境准备、服务启动、前端调用 1. 环境准备与模型部署 1.1 硬件与系统要求 在开始部署ERNIE-4.5-0.3B-PT模型前,需要确保你的系统满足以下最低配置要求: CPU:4核及以上,推荐支持A…...

Dankoe新作《使命与收益》读书笔记10|自我变现:如何将自我发展转化为值得付费的价值

大多数创业者的剧本都写好了:找个“有前景”的利基市场,学技能、做调研、磨产品,最后硬着头皮销售。 听起来很合理,对吧?(利基市场 Niche的音译大企业看不上、懒得做、吃不下的小众细分市场) …...

能源研究院转让选哪家

能源研究院转让选择建议选择适合的能源研究院转让机构需综合考虑资质、经验、服务范围及行业口碑。以下为关键筛选方向:专业资质与行业经验 优先选择具备国家级资质认证(如科技转移服务机构备案)的机构,尤其在新能源、储能技术等领…...

Hunyuan-MT-7B多场景实践:像素语言传送门在独立游戏开发、字幕生成、文档本地化中的三重应用

Hunyuan-MT-7B多场景实践:像素语言传送门在独立游戏开发、字幕生成、文档本地化中的三重应用 1. 像素语言传送门:当翻译遇见16-bit冒险 在独立游戏开发者的工作台上,一款名为"像素语言传送门"的工具正在改变传统翻译体验。这款基…...

Windows下OpenClaw安装避坑:千问3.5-9B接口配置详解

Windows下OpenClaw安装避坑:千问3.5-9B接口配置详解 1. 为什么选择WindowsOpenClaw组合 作为一个长期在Windows环境下工作的开发者,我一直在寻找能够提升日常效率的自动化工具。直到遇到OpenClaw,这个开源的AI智能体框架彻底改变了我的工作…...

Qwen-Image-2512-SDNQ开源大模型:SVR低秩微调技术落地解析

Qwen-Image-2512-SDNQ开源大模型:SVR低秩微调技术落地解析 1. 引言 你有没有遇到过这样的烦恼?想用AI生成一张图片,要么得自己折腾复杂的模型部署,要么得忍受在线服务漫长的排队和模糊的画质。特别是对于开发者来说,…...

国标参考文献高效排版解决方案:零门槛工具助你轻松应对学术写作

国标参考文献高效排版解决方案:零门槛工具助你轻松应对学术写作 【免费下载链接】gbt7714-bibtex-style GB/T 7714-2015 BibTeX Style 项目地址: https://gitcode.com/gh_mirrors/gb/gbt7714-bibtex-style 1. 解决国标排版痛点的3个核心优势 学术写作中&…...

PyTorch 2.8镜像行业落地:教育机构AI教学平台+视频课件自动生成实践

PyTorch 2.8镜像行业落地:教育机构AI教学平台视频课件自动生成实践 1. 教育行业AI转型的机遇与挑战 教育行业正经历数字化转型浪潮,传统教学方式面临三大核心痛点: 内容生产效率低:教师手工制作课件平均耗时3-5小时/课时个性化…...

如何安全导出浏览器Cookie?本地处理方案全解析

如何安全导出浏览器Cookie?本地处理方案全解析 【免费下载链接】Get-cookies.txt-LOCALLY Get cookies.txt, NEVER send information outside. 项目地址: https://gitcode.com/gh_mirrors/ge/Get-cookies.txt-LOCALLY 在数据驱动的开发环境中,浏览…...

【无标题】MySQL数据库基础实例教程单元2 学习笔记

2.1 关系数据库设计 2.1.1 数据的加工 数据设计本质上是对现实世界信息的逐步抽象和加工,过程分为三个阶段。首先是现实世界,包含客观存在的事物、业务需求和事物之间的联系。然后进入信息世界,把现实事物抽象为概念模型,方便理解…...

WebPlotDigitizer:计算机视觉辅助的图表数据提取工具深度解析

WebPlotDigitizer:计算机视觉辅助的图表数据提取工具深度解析 【免费下载链接】WebPlotDigitizer Computer vision assisted tool to extract numerical data from plot images. 项目地址: https://gitcode.com/gh_mirrors/we/WebPlotDigitizer 在科研和数据…...

DCM模式反激电源各参数逻辑关系

在DCM模式下,变压器本质上是一个“能量存储-释放”的中间体,初级存储的能量必须在每个周期完全释放给次级。1. 变压器初级电感量(Lp)与最大占空比(Dmax​)逻辑关系: 在输入电压(Vin&…...

3 鸿蒙分布式数据跨终端同步实操方案 | 鸿蒙开发筑基实战

鸿蒙分布式数据跨终端同步实操方案 | 鸿蒙开发筑基实战 作者:杨建宾(华夏之光永存) 摘要 本文讲解鸿蒙系统下跨终端数据同步的完整实操流程,从权限配置、分布式数据初始化,到数据读写、同步测试,全部使用通…...

Magisk模块开发实战指南:从基础架构到高级功能实现

Magisk模块开发实战指南:从基础架构到高级功能实现 【免费下载链接】Magisk The Magic Mask for Android 项目地址: https://gitcode.com/GitHub_Trending/ma/Magisk Magisk模块开发是Android系统定制领域的核心技术,它通过独特的挂载机制让开发者…...

手机相册端侧文本搜图方案调研

手机相册端侧文本搜图方案调研 调研日期:2026-04-02(UTC) 目标场景:手机相册中存在大量图片,需要支持基于自然语言的本地搜图;希望模型与系统架构可在骁龙平台端侧执行,并具备后续接入 tag/caption 与 rerank 的可扩展性。 一、结论摘要 已有现成开源例子,最接近目标场…...

1 (带目录)鸿蒙系统底层接口快速接入指南 | 鸿蒙开发筑基实战

鸿蒙系统底层接口快速接入指南 | 鸿蒙开发筑基实战 作者:杨建宾(华夏之光永存) 系列完整目录(鸿蒙生态开发实战进阶全集・轻量进阶版) 第一章:鸿蒙基础适配篇(本文) 1 鸿蒙系统底层接…...

Firmwork-Common:嵌入式跨平台基础库设计与实践

1. 项目概述Firmwork-Common 是 Firmwork 嵌入式固件生态体系中的全局基础库(Global Common Library),其核心定位并非提供特定外设驱动或协议栈,而是为整个 Firmwork 生态下的所有模块、中间件及应用层代码提供统一、稳定、可移植…...

5大核心模块构建学术排版系统:STIX Two字体全面应用指南

5大核心模块构建学术排版系统:STIX Two字体全面应用指南 【免费下载链接】stixfonts OpenType Unicode fonts for Scientific, Technical, and Mathematical texts 项目地址: https://gitcode.com/gh_mirrors/st/stixfonts 一、价值解析:为什么专…...

Adobe-GenP 3.0:创新Adobe CC通用补丁解决方案

Adobe-GenP 3.0:创新Adobe CC通用补丁解决方案 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP Adobe-GenP 3.0是一款基于AutoIt脚本开发的Adobe CC通用补…...

如何用思源宋体CN打造专业级中文字体解决方案?开源字体的技术优势与实战指南

如何用思源宋体CN打造专业级中文字体解决方案?开源字体的技术优势与实战指南 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 在数字化内容创作中,中文字体的选择…...

别再自己写提示词了!用DeepSeek-V2规划,让墨刀AI生成你的APP原型图(附完整prompt模板)

用DeepSeek-V2重构提示词策略:打造高精度AI原型设计工作流 当墨刀AI生成的页面总与预期相差甚远时,问题往往不在工具本身,而在于我们传递需求的方式。传统"一句话需求"的粗放指令模式,就像让一位建筑师仅凭"想要栋…...

WeKnora知识库迁移方案:从其他系统平滑过渡

WeKnora知识库迁移方案:从其他系统平滑过渡 1. 引言 知识库迁移听起来可能很复杂,但其实就像搬家一样,只要提前规划好,整个过程可以很顺利。无论你之前用的是Confluence、MediaWiki还是其他知识管理系统,迁移到WeKno…...

如何永久解锁加密文档?3步破解科学文库时间限制与功能封锁

如何永久解锁加密文档?3步破解科学文库时间限制与功能封锁 【免费下载链接】ScienceDecrypting 破解CAJViewer带有效期的文档,支持破解科学文库、标准全文数据库下载的文档。无损破解,保留文字和目录,解除有效期限制。 项目地址…...

3大核心技术深度解析:D3KeyHelper如何重新定义暗黑3游戏辅助体验

3大核心技术深度解析:D3KeyHelper如何重新定义暗黑3游戏辅助体验 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面,可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper D3KeyHelper是一款基于A…...

如何进行有效的友链seo优化_seo优化需要注意哪些要点

如何进行有效的友链SEO优化 在网络世界中,SEO(搜索引擎优化)是提升网站可见性和流量的关键手段之一。而在SEO优化的过程中,友链(友情链接)也是一种重要的手段。如何进行有效的友链SEO优化,是许…...