IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> USB协仪 -> 正文阅读

[嵌入式]USB协仪

1 插入检测

????????USB集线器的每个下游端口D+和D-都接了15k的下拉电阻。在usb设备端,全速和高速设备D+上接1.5k的上拉电阻。低速设备D-上接1.5k的上拉电阻。当设备端接入集线器时,集线器D+或D-上的电平被拉高,检测到设备接入。

2 描述符

一个usb设备只有一个设备描述符。

设备描述符时决定该设备有多种配置,每个配置对应一个配置描述符。

每个配置描述符又定义该配置有多少个接口,每个接口都有一个接口描述符。

每个接口描述符又定义方接口有多个端点,每个端点都有一个端点接口描述符。

3 枚举过程

  1. usb主机检测到usb设备接入后,会先对设备复位,复位后的设备地址为0。usb主机向0地址发送获取设备描述符请求。这一步主要是主机要得到设备端点0的最大包长度。
  2. 主机再次对设备复位,主机向地址为0的设备的端点0发送一个设置地址请求。
  3. 主机向新的设备地址请求设备描述符。
  4. 主机请求配置描述符。
  5. 其它描述符,比如字符串描述符,hid设备的报告描述符等是单独获取的。

4 包结构

????????所有包都有一个共同点:以同步域开始,紧跟着一个包标识符PID,中间内容根据包类型,最终以包结束符EOP结尾。

4.1 令牌包

????????令牌包用来启动一次usb传输。因为usb是主从结构的拓扑结构,所以所有的数据传都是主机发起的,设备只能被动接收数据。这就需要令牌包来通知那个设备进行响应。

  • OUT:输出令牌包用来通知设备将要输出一个数据包(输入和输出是针对主机的)。
  • IN:输入令牌包用来通知设备返回一个数据包。
  • SETUP:建立令牌包只用在控制传输中,作用和输出令牌包类似,两者区别在于SETUP后只能使用DATA0数据包,且只能发到设备的控制端点,而且设备必须要接收。
  • SOF:帧起始包在每帧开始时发送,以广播的形式发送。

SOF令牌包包结构如下,帧号为帧的计数,CRC只校验PID后的数据。

?OUT,IN,SETUP令牌包的结构如下,地址表示设备的地址,端点表示设备的端点。

?4.2?数据包

????????用来传输数据。在USB1.1中,只有DATA0和DATA1两种数据包。USB2.0中增加了DATA2和MDATA包,主机用在高速分裂事务和高速高带宽同步传输中。

????????DATA0和DATA1用于在握手包出错时纠错。当数据包成功发送或接收时,对方的数据包类型会切换,当检测到对方使用的数据包类型不对时,表示传输出现错误。

4.3 握手包

握手包表示一个传输是否被对方确认。握手包只有同步域,PID和EOP。是最简单的一种包。

握手包有ACK,NAK,STALL和NYET 4种。

ACK:表示正确接收数据。并有足够空间来容纳数据。主机和设备都可以用ACK来确认,而NAK,STALL,NYEL只有设备能够返回。?

NAK:表示没有数据需要返回,或数据正确接收但没有足够空间来容纳数据。当主机收到NAK时,知道设备还未准备好,玉机会在合适的时机重试传输。

STALL:表示设备无法执行这个请求,或者端点已经被挂起了,它表示一种错误的状态。设备返回STALL后。,需要主机进行干预才能解除这种状态。

NYET:只在usb2.0高速设备输出事务中使用,它表示设备本次数据成功接收,但没有足够空间接收下一次数据。主机在下一次输出数据时,将先使用PING命令包来试探设备是否有空间接收数据。

注意:返回NAK并不表示数据出错,只是说明设备暂时没有数据传输或暂时没有能力接收数据。当USB主机或设备检测到数据出错时(如CRC校验错误,PID错误,位填充错误等),将什么都不返回。这时等待接收握手包的一方就会收不握手包面超时。

4.4 特殊包

特殊包有PRE,ERR,SPLIT和PING 4种。其中PRE,SPLIT和PING是令牌包,ERR是握手包。ERR,SPLIT和PING是在USB2.0中新增的。

PRE:通知集线器打开其低速端口的一种前导包。PRE只使用在全速模式中。平时为了防止全速信号使用低速设备识动作,集线器是没有将全速信号传送给低速设备的。只有当收到PRE令牌包后,才打开其低速端口。

PING:只有在usb2.0高速环境中才会使用PING令牌包,它只被使用在批量传输和控制传输中。直接使用OUT令牌包发送数据时,设备可能没有空间接收数据,这样就浪费了带宽。在高速设备中增加了这个PING机制,试探设备是否而空间接收数据。

SPLIT:高速事务分裂令牌包,通知集线器将高速包转化为全速或低速数据包发送给其下面的端口。

ERR:ERR握手包是在分裂事务中表示错误时使用。

5 USB的4种传输类型

5.1 USB事务

?

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-01-24 11:03:47  更:2022-01-24 11:05:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/9 1:40:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码