USB学习笔记

前言

          最近学习了USB2.0的一些知识,这里就当笔记,回顾记录一下,参考的资料是B站的刘凯老师STM32 培训教程和龙虎老师的USB应用精粹分析,如果有哪些错误的理解,也希望大佬们指点一二,谢谢!

USB逻辑上分为三层:

1.信号层     2.协议层      3.数据传输层

他还有两个东西就是接口和端点:

接口:我认为就是功能,如果一个设备有键盘又有U盘的功能,那么他就有两个接口

端点:USB通信的基本单元

1.信号层

信号层有两个东西

一个是设备速度的检测

高速的时候D+上接一个上拉电阻 1.5k

低速的时候D-上接一个上拉电阻  1.5k

另外一个就是信号的编码 反向不归零编码方式 NRZI

并对D+和D-线所处的不同状态定义成J和K状态

数据状态     D+  D-

低速J状态   0      1

低速K状态   1      0

无论是K还是J就是跳变的时候就代表0  不跳变 延续下去的那个就是1

协议层

包是USB系统中信息传输的基本单位,所有的数据都是经过打包后在总线上传输的 一个包一个包 抓包都这么说的

(这里我要补充一下后面会有事务的概念  一般是由令牌包 数据包 握手包组成 )

包一般是由6部分组成

1.同步字段(SYNC)

2.包标识符(PID) 包号

3.地址字段(ADDR) 

4.数据字段(DATA,包括帧号)一些数据比较大 可能会拆分成好几个数据 他们通过帧号到时候就可以整合起来

5.检验字段(CRC)

6.包结束(EOP)

总共有七种包 常用是以下四种包 以上六种字段具体包含取决于包的类型 但是PID字段是所有包都必须具备的

1.令牌包   输出(OUT) 由包标识符(PID) 地址(ADDR)端点(ENDP)检验字段(CRC)

                      (1)PID包标识字段PID的定义格式如下图,包标识字段(PID)长度为8bit,                                 由低4bit的类型字段和高4bit的校验字段组成。校验字段是类型字段的反码。                            例如,PID[3:0] = 0001B时,完整的PID字段则应该是:1110_0001B,表示令牌OUT

                       (2)在总线枚举完成后,主机会给设备分配一个唯一的地址,存放在                                                                  USB_DADDR 寄存器[6:0]中,由于地址字段的长度为7位,而地址0是默认地址,不能给USB设备,所以实际可供分配的地址数量只有127个

                       (3)端点字段 代表端点的集合 长度为4 代表共有16个

                 输入  (IN)   

                 帧起始 (SOF)

                 建立(SETUP)

2.数据包    在低速或全速模式下,数据包分为了DATA0(偶数据包)与DATA1(奇数据包)两种类型  他是由PID决定的  

f132b28f48d4478488e4f0bdfcbb0f08.png

2.握手包 

 与功能设备相关的握手包有ACK,NAK,STALL,NYET这四种(ERR握手包仅仅存在于主机与集线器之间)

数据包损坏表示是否通过CRC校验

接收方停止特征 表示 管道所处的状态激活还是停止(前面的就是表示设备端点能正常通信,后面的就是设备端点处于停止状态)

时序位匹配 表示发出的数据包是否以正确的次序发出 (就是有些事务要求数据包必须是DATA0,有些又必须DATA0与DATA1循环切换 也叫时序位切换)

可接收数据 表示 设备已经准备好接收数据 

注意: NAK  STALL NYET只有设备才可以返回,因为请求都是主机发送的   ,NYET握手包只有在高速设备输出事务中使用,表示设备的本次事务成功接收,但没有足够的缓冲区来接收下一次数据,主机在下一次输出数据的时候,先使用PING令牌包来询问一下是否有足够的接收缓冲区,防止带宽浪费

总结:端点有问题 就是STALL握手包   接受了数据就是ACK握手包  接收不了就是NAK握手包

 

6f5047b357064b2f9835ca807c5e85e7.png

8549632976964a4f9cb881294a524bce.png

4.专用包 

8a0777936e2b4c16b311cf946c19a028.png

 

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值