首页 > 其他分享 >usb2.0协议复习--Apple的学习笔记

usb2.0协议复习--Apple的学习笔记

时间:2023-10-26 21:01:55浏览次数:35  
标签:Apple -- host 传输 管道 端点 USB usb2.0 usb

一,前言

10多年前买过一本圈圈教你usb,然后自己移植了代码到自己焊接的单片机最小系统,当时连原理图都是我自己画的,现在原理图软件已经不知道怎么用了,所以usb协议基本也忘记了。居然配置了usb host那么简单,这样感觉都没有学习过什么,我还是希望要雁过留痕。所以下载了wireshark usb抓包玩了下,百度也看了别人的usb D+和D-的抓包。但是还是需要以了解协议为主。

二,学习笔记

现在都是typec或usb3.0,但是我依然选择学习usb2.0协议,因为我今天的目的只是要大概了解而已,所以学习最简单的,最重要的内容即可,这也就是当初我学习Linux0.11源码的目的是一样的。

1.usb采用轮询广播传输机制,具体组成的包括令牌包,数据包,握手包及特殊包。主要通过PID字段

2.管道是数据传输模型,有2种,包括无格式的流管道和带格式的信息管道。任何usb设备一旦上电就存在默认的一条信息管道,usb host通过该管道来进行枚举,获取设备的描述,配置,状态,并对设备进行配置。枚举就是一系列的请求。

3.传输类型分4种,包括控制(仅控制传输是有格式的),中断,批量和同步。 数据在 USB 总线上的传输以包为单位,包只能在帧内传输。高速 USB 总线的帧周期为125uS,全速以及低速 USB 总线的帧周期为 1mS。帧的起始由一个特定的包( SOF 包)表示,帧尾为 EOF。 EOF 不是一个包,而是一种电平状态, EOF 期间不允许有数据传输不同的传输类型主机安排传输任务、可占用 USB 带宽的限制以及最大包长度有一定的差异。

3.1 控制传输分3个阶段(Setup阶段定义了此次传输的请求类型,数据阶段,状态阶段) 控制传输对于最大包长度有固定的要求。对于高速设备该值为64字节,低速设备该值为8字节,全速设备可以是8或16或32或64。 控制传输中如果一个端点收到/发送了一个长度小于最大包长度的包,即意味着数据传输结束。

3.2 中断传输 中断传输是单项传输,若有数据传输或可以接收数据则返回数据或发送数据,否则返回 NAK,表示尚未准备好。 中断端点的轮询间隔由在端点描述符中定义。所谓单向传输,并不是说该传输只支持一个方向的传输,而是指在某个端点上该传输,仅支持一个方向,或输出,或输入,这是对应端点来说的方向,不是说的host对象,因为一个host的管道传输可以有多个端点组成。如果需要在两个方向上进行某种单向传输,需要占用两个端点,分别配置成不同的方向,可以拥有相同的端点编号。

3.3 批量传输 低速USB设备不支持批量传输,高速批量端点的最大包长度为 512,全速批量端点的最大包长度可以为8、16、32、64。关于传输方式的优先级由host来控制,此传输方式是优先级最低的。高速批量端点必须包括PING操作,用来汇报当前端点状态是否已准备好。

3.4 同步传输 同步传输最大1024字节,是一种实时的、不可靠的传输,不支持错误重发机制。因为它没有握手机制,但是它优先级最高,所以实时性好(但是这个的有什么应用场景,网上搜索了下是实时性较高的比如视频和音频数据传输,想想也有道理)

3.5 usb host和hub间有一种分离传输 主要用来解决不同速度的usb的传输问题,拆分包数据。这样就可以在中间插入其他高速传输,从而提高总线的利用率。

4.usb设备支持接收到主机请求包括3种,11种标准请求,类请求,厂商请求。

5.usb hub主要功能为重发,转发和HUB控制器。重发是上行和下行间的协议控制器开关,负责重生及转发。hub控制器主要是和host沟通,进行hub和下行port的管理。

6.USB HOST在USB体系中负责设备连接/移除的检测、 HOST 和设备之间控制流和数据流的管理、传输状态的收集、总线电源的供给。

7.端点可以理解为buffer,buffer通过管道来传输数据,usb通常需要多个管道来完成数据交换,因为同一管道只支持一种类型的数据传输。用在一起来对设备进行控制的若干管道称为设备的接口,这就是端点、管道和接口的关系。

8.一个usb设备可以有多个端点,端点和管道相连,也就是和管道有一样的属性。

9.事务传输的流程 包是 USB 总线是数据传输的最小单位,不能被打断或干扰,否则会引发错误。若干个数据包组成一次事务传输,一次事务传输也不能打断,属于一次事务传输的几个包必须连续,不能跨帧完成。一次传输由一次到多次事务传输构成,可以跨帧完成。 9.1 批量传输事务流程 USB 允许连续 3 次以下的传输错误,会重试该传输,若成功则将错误次数计数器清零,否则累加该计数器。超过三次后,HOST认为该端点功能错误(STALL),放弃该端点的传输任务。对于批量传输,传输过程中数据包的PID按照DATA0-DATA1-DATA0交替的方式翻转,若不翻转,会视作重传。

9.2 控制传输事务流程 最后是状态阶段,通过一次方向与前一次相反的控制事务传输来表明传输的成功与否。也就是之前都是IN,最后变成out就是状态阶段如果成功会返回一个长度为0的数据包,否则返回NAK或STALL。

9.3 中断传输事务流程 也是用PID翻转来得知重传。

9.4 同步传输事务流程 没有ACK的阶段。

三,抓包

usb2.0协议复习--Apple的学习笔记_usb协议

四,小结

这么看下,主要内容又想起来了,抓包内容也能看懂了,但是后面还有Hub相关我就先忽略了。

标签:Apple,--,host,传输,管道,端点,USB,usb2.0,usb
From: https://blog.51cto.com/AppleCai/8042886

相关文章

  • 【BiLSTM-Adaboost预测】基于双向长短期记忆网络的Adaboost时间序列预测研究(matlab代
     ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • 设计模式—创建型模式之单例模式
    设计模式—创建型模式之单例模式介绍单例模式说明:一个单一的类,负责创建自己的对象,同时确保系统中只有单个对象被创建。单例模式特点:某个类只能有一个实例;(构造器私有)它必须自行创建这个实例;(自己编写实例化逻辑)它必须自行向整个系统提供这个实例;(对外提供实例化方法)单例模式......
  • 【软考高项】- 项目成本管理
    ......
  • 2-2 CC2530的通用IO及相关寄存器
    I/O端口相关寄存器为了便于记忆和使用,每个特殊功能寄存器都会起一个名字,在程序设计时,引入头文件“ioCC2530.h”,才能直接使用寄存器的名称与通用I/O端口相关的常用寄存器有下面4个:PxSEL:端口功能选择,设置端口使用I/O还是外设功能端口,0为设置通用I/O,1为设置外设功能PxDIR:......
  • 【软考高项】-项目范围管理
    ......
  • gitee 上传提示文件过大的暴力解决方法
    因为经常遇到上传文件过大,每次都是重新拉在复制过去,今天无聊就想彻底解决一下这个问题。 Gitee的免费版本只能上传单个文件小于100M利用红色框的命令行查找出是哪个文件,下面红色文字是我查找的文件,然后执行下面命令行,即可上传成功。gitfilter-branch--force--index-filte......
  • The 2021 ICPC Asia Macau Regional Contest
    \(C.LaserTrap\)根据题意不难判断出需要极角排序,然后对于每个点寻找更小的一个\(180\)度的点数。即使听说是用双指针实现查找依旧没什么思路。后来看了别人的实现方法发现确实比较简单,甚至只需要维护极角就可以了。constlongdoublepi=acosl(-1);voidsolve(){int......
  • [LOJ6698] 一键挖矿
    一键挖矿弱化版(?):CF562F将矩阵扩展一个单位(长宽均加1),把当前存在的格子染色。可以发现当且仅当恰好存在4个有1个格子被染色,不存在有3个格子被染色的2x2矩阵时满足题意。枚举右端点r,设g(l)表示选择[l,r]时有多少个上述矩阵。可以发现g(r)=4,且对于x\(\in\)[l,r],......
  • 10月26日守护进程
    目录守护进程守护进程什么是守护进程呢?它的本质上也是一个子进程,但是它的子进程的区别点就在于,主进程的代码执行完毕守护进程就会直接结束掉,也就是说一般情况下是看不到守护进程的。基本的代码"""守护进程守护--》伴随本质上也是一个子进程主进程的代码执行完毕守护进程......
  • 试题3
    在通行图中,箭头所指的方向代表调用谁的方法,通信图的突破点在通信图,对象名:类名    ......