USB转多路UART - USB 基础
一、 前言
断断续续做了不少USB相关开发,但是没有系统去了解过,遇到问题就很被动了。做这个USB转UART的项目就是,于是专门花了一天的时间学习USB及CDC相关,到写这文章时估计也忘得差不多了,趁项目收尾阶段记录一下,方便后面翻阅。
本文内容(包括图片)绝大多数来源网络,侵删。参考链接:
USB官网
USB通用串行总线基础知识详述
USB端点和传输协议(数据包、事物)详解
二、 总线
USB历代接口
经过多年发展,USB速率越来越高,总线由最初4根线,半双工发展到多根线,全双工。本文是基于 USB 2.0 版本,记录最初最基础的知识,了解了这些基础,后面的版本就很容易了。
USB总线
USB全速(高速)接线图
信号名称 | 说明 |
---|---|
Vbus | 电源,DC 5V |
D+ | 叉分信号线,正 |
D- | 叉分信号线,负 |
GND | 电源地 |
由上面可知,USB 2.0 只有4根线,两根数据线是高速串行叉分线,半双工。电源线用来主机给从设备供电,最大500mA, 5V * 500mA = 2.5W, 功率不是很高。后来的快速充电技术要么提升了电压和电流,例如9V * 2A = 18W, 再后来USB接口增加了电源和数据线的数量,传输速率和供电功率都大大提升。
数据编解码和位填充
USB采用NRZI(非归零编码)对发送的数据包进行编码 。输入数据0, 编码成“电平翻转” ;输入数据1, 编码成“电平不变” ;(NRZI遇0翻转,遇1不变)。
USB NRZi编码格式
三、 USB总线系统中的设备
可以分为三种类型:
- 主机: 只能有一个,管理USB系统;
- 集线器(USB HUB): 用来扩展设备;
- 设备: 终端设备,如下图的鼠标键盘打印机;
USB设备拓扑
四、 端点(Endpoints)
在USB规范中,设备端点是唯一可寻址可通信的基本单元,端点是有通信方向的。物理上一个USB总线(4根线)连接一个设备终端,这个设备终端逻辑上可以有多个接口,每个接口可以有多个端点,从而在主机的系统上看该设备终端可能有多个设备。例如本项目,一个USB口扩展7个UART设备。
端点0: 每个终端设备肯定会有一个端点0,用于刚连接到主机时的初始化和枚举。想象一下,一个USB设备终端可能有10个8个端点,刚插到主机时,主机并不清楚,所以规定了一定要有一个端点0,主机最开始只与端点0通信,然后把其它的设备,接口,端点枚举出来。
端点类型
USB规范定义了四种端点类型:
- 控制端点: 收发控制信息,也可以传输数据。
- 中断端点: 用于传输少量的数据,实时时效性比较好,例如键盘鼠标。
- 批量端点: 用于传输大批量数据,实时时效性没要求,例如U盘文件传输。
-
等时端点: 连续,实时的传输,例如音频。
不同端点类型比较
五、 数据传输
USB通信包含一系列的帧,USB在2.0时代,分为低速设备(1.5Mbps),全速设备(12Mbps)和高速设设备(480Mbps).这些设备使用的帧的时间间隔是1±0.0005ms,而对于高速设备,又将每个帧分成了8个微帧,这样每个微帧的时间间隔变成了125±0.0625us。
每一帧包含一个起始帧(Start of Frame, SOF), 然后是若干个事务(Transaction)。每个事务由一系列数据包(packet)组成。每个数据包以同步标识(SYNC)开始,以结束标识(EOP)结束。有三种类型的包:令牌包,数据包,握手包。帧,事务,包关系如下图:
USB帧事务数据包关系图
包(package)
包是USB系统中信息传输的基本单元,所有数据都是经过打包后在总线上传输的。USB包由五部分组成,即同步字段(SYNC)、包标识符字段(PID)、数据字段、循环冗余校验字段(CRC)和包结尾字段(EOP),包的基本格式如下:
同步域(SYNC)
由8位/32位组成,作为每个数据包的前导,用来产生同步作用,使USB设备与总线的包传输率同步,它的数值固定为000000001。作用:
- 通知USB串行接口引擎数据要开始传输;
- 同步主机和设备之间的时钟。
标识符字段(PID)
包标识符PID是用来标识一个包的类型。PID共有8位,目前USB协议仅使用4位(PID0 - PID3),另外4位(PID4 - PID7)是PID0 - PID3的取反,用来校验PID。传输的顺序为PID0,PID1,PID2,PID3,...,PID7。
令牌包(token packet, PID1~0为01)、数据包(data packet, PID1~0为11)、握手包(handshake packet, PID1~0为10)、特殊包(special packet, PID1~0为00):
令牌类型.
特殊包是一些在特殊场合使用的包。总共有4种:PRE、ERR、SPLIT和PING。其中PRE、SPLIT和PING是令牌包,ERR是握手包。这里不打算展开讲。
帧传输过程
如下图,所有通信都由主机定时发起,帧头一定是SOF,然后包含多个事务,每个事务有多个包,每个包都是SYNC开头,EOP结束。要注意每个事务是有应答的,即一个帧里面数据传输的方向是不断切换的。下图中,主机先发一个SOF,然后发一个SETUP包,这个包带有DATA0,设备端收到后返回ACK。然后主机连续发了3个IN令牌包,前2个从设备端都回复NAK,表示无数据上传。第3个IN回复数据了,主机收到后回复了ACK。然后下一帧,主机发送SOF后,发了个OUT令牌包,跟着又发送了数据DATA0,从设备端回复ACK。
USB帧时间数据传输过程.
举一个实际的例子,全速USB传输每一个帧为1ms。首先会发送一个SOF包(帧起始包),此时USB主机检测到总线没有事务可以传输,则总线进入idel(空闲状态),这里的空闲时间996.917us,3us左右是EOP占用的时间。
5个idle后,有事务了,分析一下这次传输。同样的首先会发送一个SOF包(帧起始包),等了176.817us后,紧接着USB主机会发送一个SETUP令牌包,收到ACK后继续SETUP包和数据包,从设备端也返回了ACK包。下一个是IN的事务,不详细讲。两个事务传输完成后,主机检测到没有事务了,总线同样会进入空闲状态,这里空闲了478.767us。所有的时间开销加起来差不多1ms。然后后面又有几个没有事务的帧。
全速USB帧内容
实际开发中,当MCU做从设备时,一般MCU的软件架构都是在中断中响应主机端各种交互,例如可配置每个SOF都产生一个中断,或者收到SETUP包后产生中断,在中断中处理相应事务,软件不能做太耗时的处理,一般产生事件标志然后异步处理。数据IN是预先拷贝到指定的缓存(或者DMA缓存),当主机轮询时,硬件自动上传,没有数据就回复NAK。数据OUT也是硬件先接收到指定的缓存(或DMA缓存),回复ACK,接收完后产生中断,通知软件处理。
(END)
相关文章:
![](https://img-blog.csdnimg.cn/img_convert/13ef1d419310f981ead8d649cc63c69d.webp?x-oss-process=image/format,png)
USB转多路UART - USB 基础
一、 前言 断断续续做了不少USB相关开发,但是没有系统去了解过,遇到问题就很被动了。做这个USB转UART的项目就是,于是专门花了一天的时间学习USB及CDC相关,到写这文章时估计也忘得差不多了,趁项目收尾阶段记录一下&am…...
![](https://www.ngui.cc/images/no-images.jpg)
接近50个实用编程相关学习资源网站
Date: 2024.07.17 09:45:10 author: lijianzhan 编程语言以及编程相关工具等实用性官方文档网站 C语言文档:https://learn.microsoft.com/zh-cn/cpp/c-languageMicrosoft C、C和汇编程序文档:https://learn.microsoft.com/zh-cn/cppJAVA官方文档&#…...
![](https://www.ngui.cc/images/no-images.jpg)
在数据操作中使用SELECT子句
目录 一、INSERT 语句中使用 SELECT子句 二、UPDATE 语句中使用 SELECT子句 三、DELETE 语句中使用 SELECT子句 一、INSERT 语句中使用 SELECT子句 在 INSERT 语句中使用 SELECT子句,可以将一个或多个表或视图中的数据添加到另外一个表中。使用 SELECT 子句还可以…...
![](https://i-blog.csdnimg.cn/direct/0edf40d26e334b52ae917b7323db5f85.png)
Golang | Leetcode Golang题解之第274题H指数
题目: 题解: func hIndex(citations []int) int {// 答案最多只能到数组长度left,right:0,len(citations)var mid intfor left<right{// 1 防止死循环mid(leftright1)>>1cnt:0for _,v:range citations{if v>mid{cnt}}if cnt>mid{// 要找…...
![](https://i-blog.csdnimg.cn/direct/7de7c6663d544d57bb5d005ea10eb108.png)
区块链技术在智能家居中的创新应用探索
随着物联网技术的发展和智能家居市场的蓬勃发展,区块链技术作为一种去中心化的数据管理和安全保障技术,正在逐渐引入智能家居领域,并为其带来了新的创新应用。本文将探讨区块链技术在智能家居中的具体应用场景、优势以及未来发展方向。 智能家…...
![](https://img-blog.csdnimg.cn/img_convert/607027f9a3476b71bc355af5d5a8d3c4.png)
无需业务改造,一套数据库满足 OLTP 和 OLAP,GaiaDB 发布并行查询能力
在企业中通常存在两类数据处理场景,一类是在线事务处理场景(OLTP),例如交易系统,另一类是在线分析处理场景(OLAP),例如业务报表。 OLTP 数据库擅长处理数据的增、删、改,…...
![](https://www.ngui.cc/images/no-images.jpg)
PHP 表单验证:邮件和URL
PHP 表单验证:邮件和URL 在Web开发中,表单验证是一个至关重要的环节,它确保了用户输入的数据的有效性和安全性。特别是在处理邮件地址和URL时,准确的验证尤为重要。本文将详细介绍如何使用PHP来验证表单中的邮件地址和URL。 邮件…...
![](https://www.ngui.cc/images/no-images.jpg)
前端八股文 路由的懒加载
为什么会有 路由的懒加载 在现代单页应用(SPA)的开发中,路由懒加载是一种提升应用性能的关键技术。通过按需加载组件,而非在应用启动时一次性加载所有模块,可以显著减少初次加载时间和资源消耗。本文旨在深入探讨前端…...
![](https://i-blog.csdnimg.cn/direct/77c1bb8c71f14d049d176a8e0f108fcd.png)
HarmonyOS Web组件(二)
1. HarmonyOS Web组件 官方文档 1.1. 混合开发的背景和好处 混合开发(Hybrid Development)是一种结合原生应用和Web应用的开发模式,旨在同时利用两者的优势。随着移动应用需求的多样化和复杂化,单一的开发方式往往难以满足所有…...
![](https://www.ngui.cc/images/no-images.jpg)
HarmonyOS应用开发者高级认证,Next版本发布后最新题库 - 单选题序号2
基础认证题库请移步:HarmonyOS应用开发者基础认证题库 注:有读者反馈,题库的代码块比较多,打开文章时会卡死。所以笔者将题库拆分,单选题20个为一组,多选题10个为一组,题库目录如下,…...
![](https://img-blog.csdnimg.cn/img_convert/8d24a8e6bd4efd5096189472f3b14f5d.png)
基于python深度学习遥感影像地物分类与目标识别、分割实践技术应用
目录 专题一、深度学习发展与机器学习 专题二、深度卷积网络基本原理 专题三、TensorFlow与Keras介绍与入门 专题四、PyTorch介绍与入门 专题五、卷积神经网络实践与遥感图像场景分类 专题六、深度学习与遥感图像检测 专题七、遥感图像检测案例 专题八、深度学习与遥感…...
![](https://i-blog.csdnimg.cn/direct/ed87bd73d9bf4b6faa3d4d9b3b10566b.png)
叶再豪降龙精英课程总结
文章目录 1.思维认知1.1 稻盛和夫成功公式1.2 龙头主升模式1.3 龙头主升-两种路径1.4 股市新手的炒股思路1.5 龙头案例1.6 降龙心法 2.情绪周期2.1 情绪周期2.1 情绪演绎周期2.2 情绪的四个部分2.2.1 指数的情绪周期2.2.3 热点情绪周期2.2.4 热点情绪演绎周期2.2.5 大热点支线2…...
![](https://www.ngui.cc/images/no-images.jpg)
算法 - 查找算法(顺序、折半、红黑树、AVL树、B+树、散列)
查找 顺序查找 查找算法原理: 顺序查找是一种简单的查找方法,从数组的第一个元素开始,依次比较每个元素,直到找到目标元素或者数组结束为止。 实现步骤: 从数组的第一个元素开始。逐一比较数组中的元素与目标值。如…...
![](https://i-blog.csdnimg.cn/direct/c90be91e3f574ae0bec8265fa88fded4.png)
TCP与UDP网络编程
网络通信协议 java.net 包中提供了两种常见的网络协议的支持: UDP:用户数据报协议(User Datagram Protocol)TCP:传输控制协议(Transmission Control Protocol) TCP协议与UDP协议 TCP协议 TCP协议进行通信的两个应用进程:客户端、服务端 …...
![](https://i-blog.csdnimg.cn/direct/65e75321ab7e4874aeeec5201fdf4bc2.jpeg)
媲美Midjourney-v6,Kolors最新文生图模型部署
Kolors模型是由快手团队开发的大型文本到图像生成模型,专门用于将文本描述转换成高质量的图像。 Kolors模型支持中英文双语输入,生成效果与Midjourney-v6相媲美,能够处理长达256个字符的文本输入,具备生成中英文文字的能力。 Ko…...
![](https://i-blog.csdnimg.cn/direct/18736a810b29444fb383703e42164993.jpeg#pic_center)
深度学习程序环境配置
深度学习环境配置 因为之前轻薄本没有显卡跑不起来,所以换了台电脑重新跑程序,故记录一下配置环境的步骤及常见错误 本人数学系,计算机部分知识比较匮乏,计算机专业同学可以略过部分内容 深度学习环境配置 深度学习环境配置 CUD…...
![](https://i-blog.csdnimg.cn/direct/c410906f7a664a66937221b8aa5a299f.png)
【STM32 HAL库】全双工I2S+双缓冲DMA的使用
1、配置I2S 我们的有效数据是32位的,使用飞利浦格式。 2、配置DMA **这里需要注意:**i2s的DR寄存器是16位的,如果需要发送32位的数据,是需要写两次DR寄存器的,所以DMA的外设数据宽度设置16位,而不是32位。…...
![](https://i-blog.csdnimg.cn/direct/ab7bb63dd6624c42bc794bd7eaa74c6f.png)
【Spring Boot】网页五子棋项目中遇到的困难及解决方法
目录 一、HikariPool-1 - Starting异常二、Invalid bound statement (not found)异常三、The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary异常四、The server time zone value时区报错异常五、补充知识点…...
![](https://www.ngui.cc/images/no-images.jpg)
营销策划方案模板
这应该是目前最详细最完整的营销策划方案模板,营销公司内部都在使用的标准版本,你可以根据自己的营销内容直接填入这个模板,很快就能写好一份至少80分的营销策划方案。 如果暂时用不到也可以先收藏,以备不时之需。 废话不多说&a…...
![](https://i-blog.csdnimg.cn/direct/035cdbbacfbc47c28022c939c3a615f7.jpeg#pic_center)
Python入门基础教程(非常详细)
现在找工作真的越来越难了!今年更是难上加难 前几天在网上刷到这样一条热搜: #23岁找工作因年龄大被HR拒绝了# 是这个世界疯了还是我疯了? 合着只想要有20年以上工作经验的应届毕业生是吧 这好像就是现在的就业市场现状:“35岁…...
![](https://www.ngui.cc/images/no-images.jpg)
LeetCode 常见题型汇总
前30 22 生成括号 剪枝 51 N皇后 37 解数独 二分查找 69 求平方根 字典树 位运算 191 求1的个数 231 2的N次方 338 求0到N的比特位为1的个数 动态规划 并查集 LRU缓存 布隆过滤器...
![](https://i-blog.csdnimg.cn/direct/322145dc0c66457eaffbf188bac498ae.png)
el-select选择器修改背景颜色
<!--* FilePath: topSearch.vue* Author: 是十九呐* Date: 2024-07-18 09:46:03* LastEditTime: 2024-07-18 10:42:03 --> <template><div class"topSearch-container"><div class"search-item"><div class"item-name&quo…...
![](https://i-blog.csdnimg.cn/direct/d164defd158c46e5aa20d726eb6164f2.png)
Shell程序设计
各位看官,从今天开始,我们进入新的专栏Shell学习,Shell 是操作系统的命令行界面,它允许用户通过输入命令与操作系统交互。常见的 Shell 有 Bash 和 Zsh,它们可以执行用户输入的命令或运行脚本文件。Shell 广泛应用于系…...
![](https://img-blog.csdnimg.cn/img_convert/cc3dd097a3207b40f46513ad2b4cbfe9.jpeg)
PyQT6---环境搭建
1、虚拟环境搭建 创建虚拟环境 create -n pyqt6_39 python3.9 切换虚拟环境 conda activate pyqt6_39 2、安装pyqt6 安装pyqt6和pyqt6-tools pip install PyQt6 -i https://pypi.tuna.tsinghua.edu.cn/simplepip install pyqt6-tools -i https://pypi.tuna.tsinghua.edu.cn/…...
![](https://www.ngui.cc/images/no-images.jpg)
whisper-api语音识别语音翻译高性能兼容openai接口协议的开源项目
whisper-api 介绍 使用openai的开源项目winsper语音识别开源模型封装成openai chatgpt兼容接口 软件架构 使用uvicorn、fastapi、openai-whisper等开源库实现高性能接口 更多介绍 https://blog.csdn.net/weixin_40986713/article/details/138712293 使用说明 下载代码安装…...
![](https://www.ngui.cc/images/no-images.jpg)
面试题:Java中堆内存和栈内存的区别,缓存数据是把数据放到哪里
目录 堆内存(Heap)栈内存(Stack)String字符串的hashcode缓存 在Java中,堆内存(Heap)和栈内存(Stack)是两种不同类型的内存区域。它们各自扮演着不同的角色,并…...
![](https://www.ngui.cc/images/no-images.jpg)
【开源库学习】libodb库学习(一)
Hello World Example 在本章中,我们将使用传统的“Hello World”示例展示如何创建一个依赖于ODB进行对象持久化的简单C应用程序。特别是,我们将讨论如何声明持久类、生成数据库支持代码以及编译和运行我们的应用程序。我们还将学习如何使对象持久化&…...
![](https://img-blog.csdnimg.cn/img_convert/2fd06e39414e38ea94da3434b5b5bb29.png)
Java中SPI机制原理解析
使用SPI机制前后的代码变化 加载MySQL对JDBC的Driver接口实现 在未使用SPI机制之前,使用JDBC操作数据库的时候,一般会写如下的代码:// 通过这行代码手动加载MySql对Driver接口的实现类 Class.forName("com.mysql.jdbc.Driver") Dr…...
![](https://i-blog.csdnimg.cn/direct/cb448f4959b0404887fa052f67143c68.png)
数学建模~~~SPSS相关和回归分析
目录 1.双变量相关分析 1.1理论基础 1.2简单散点图的绘制介绍 1.3相关性分析 1.4分析相关性结果 2.简单线性回归分析 2.1简单概括 2.2分析过程 2.3结果分析 3.曲线回归分析 3.1问题介绍 3.2分析过程 3.3结果分析 1.双变量相关分析 1.1理论基础 双变量相关分析并不…...
![](https://i-blog.csdnimg.cn/direct/6a898318668044db812632795191e5f4.jpeg#pic_center)
【Android】常用基础布局
布局是一种可用于放置很多控件的容器,它可以按照一定的规律调整内部控件的位置,从而编写出精美的界面,布局内不单单可以放控件,也可以嵌套布局,这样可以完成一些复杂的界面,下面就来认识一些常用的布局吧。…...
![](/images/no-images.jpg)
实验室建设供应商网站/网页设计论文
代码如下,直接放到工具类中即可。类可以实现Onclicklistener,然后重写onClick方法,直接将该函数写在onClick方法中即可,这样对于所有的点击事件都将生效。 避免了快速双击出现的异常或难解的情况。 private static final int TIME…...
![](https://img-blog.csdnimg.cn/img_convert/bb8583511df17758f2e2a0e02e318f9d.png)
昆明网站设计公司哪家好/百度新版本更新下载
10月31日,广联达科技股份有限公司(以下简称“广联达”)主办的“BIM5D 4.0产品发布会”在广州隆重举办,基于BIM技术的项目精细化管理软件“广联达BIM5D 4.0”正式在南粤发布。来自广东建筑业界百余人参加了本次发布会。《中国建筑业企业BIM应用分析报告(2…...
![](/images/no-images.jpg)
可以做外国网站文章/电销系统软件排名
计算某个范围之内的所有质数/* --功能:计算某个范围之内的所有质数 --作者: --日期:20180927 --语言:t-sql for sql server 2012 sp4 */ DECLARE n INT 10000; --计算自然数的最大值 DECLARE d INT 2;--除数,检验n能够…...
![](/images/no-images.jpg)
宝安网站设计制作/seo平台是什么
Java获取系统环境信息 使用System.getProperty()方法获取JVM信息 public class TestSystemGetProperty {public static void main(String[] args) {System.out.println("java版本号:" System.getProperty("java.version"));System.out.println…...
![](/images/no-images.jpg)
班级网页模板html源码/seo的搜索排名影响因素有哪些
Android系统的壁纸是其核心模块之一,但是一直以来壁纸Android的壁纸又有其一直的BUG。例如使用单屏的图片作为壁纸,在手机重启后,会自动拉伸图片变为随桌面一起滑动的桌面。还有就是在这种情况下使用桌面,壁纸后面会有恼人的黑色&…...
![](https://img-blog.csdnimg.cn/20190701135136246.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01yc19jaGVucw==,size_16,color_FFFFFF,t_70)
网站建设的一般过程/站长之家网站排名
Java基础系列(基础):搞清楚Java异常机制! 前言 今天博主将为大家分享:Java基础系列(基础):搞清楚Java异常机制!不喜勿喷,如有异议欢迎讨论! 一:异…...