微控制器USB学习(二)

USB学习(二)

USB通讯协议

USB是一个主从关系的协议,由多个USB设备以及集线器,连接到一个USB主机上,最后形成一个星状网络。而实际上在这个网络中,从设备上,只能看到主机,是看不到别的从设备的,因此其实从设备与从设备之间,是不能直接通讯的。

从设备接入USB主机的时候,USB主机会给从设备分配一个唯一的地址,并且在通过USB总线传输数据的时候,会附带有相应的从设备地址,而从设备靠着这个地址,来决定这个数据是否属于自己的。一个USB主机,最多只能分配127个地址(1~127),并且最多只能连接5层集线器,在第5层的集线器中,只能连接USB设备,而不能连接Hub。

USB主机和USB设备之间的通讯,是通过管道(Pipe)进行的。这个管道可能有点难理解,其实是这样的,并不是真的一条管子,而是在USB主机这里,有一处数据缓冲区,而这个数据缓冲区,这个缓冲区是用来做数据收发的时候进行缓冲的,它直接指向的是对应的从设备,从设备是通过缓冲区指向的一个端点,也就是确定好的索引方向,来接收主机发送过来的信息。这样一来,USB设备地址、端点索引和端点方向,就可以直接组合成一个唯一的USB主机和USB设备通讯的通道了。

在USB协议上,管道传输的数据基本单位是一个包(Packet),这个包的组成是由多个逻辑0和1构成的。然后多个包又可以构成一个事务,多个事务可以构成一个传输。

USB协议中定义了三大类包:

  • 令牌包
  • 数据包
  • 握手包

这些包的的区分,是通过标识符(PID)进行区分的,PID的令牌包:

  • Setup包
  • IN包
  • OUT包
  • Ping包

同样的,数据包也有分类:

  • DATA0包
  • DATA1包

握手包:

  • ACK包
  • NAK包
  • STALL包

通过多个包的组,会相应的变成事务,如Setup事务等等。

这当然不是包子了、、、它是USB基本传输单元。从面所讲的,包的种类有很多,作用也不同,我们可以对包进行分析。

1)包的标识符

包的类型铜鼓长度为8为的包标识符指定的,其中包括4位的包类型位域和与其对应的4位校验位位域。

这里就举个例子:

包类型包名称PDI值
令牌包OUT4‘b0001
IN4’b1001
SOF4’b0101
SETUP4’b1101

2)包目标地址

USB设备接入USB主机之后,USB主机会给USB设备分配一个地址,但是在收到主机发送过来的地址之前,默认的地址是0,包目标设备的地址长度只有7位,这也是为啥一个USB主机最多只能管理127个USB设备的原因。

3)包目标端点

USB的设备和主机之间,在通讯上建立好一个个单独的管道,并且每一个都对应着一个端点。端点上是有方向区分的:

  • IN:1
  • OUT:0

4)数据数据

数据长度的范围是0-1024字节。

5)帧索引

帧索引的长度是11bit,该位域的初始值为0,由USB主机对其进行递增,达到2047时则重新从0开始计数。

6)循环冗余校验码

USB协议规定只有令牌包和数据包具有循环冗余校验码,其它的包没有。令牌包使用5为循环冗余校验码,数据包使用16位循环冗余检验码。

包格式

1)令牌包

syncsetupaddrendpcrc5eop
000000010xb4000x08233.330ns

2)数据包

syncdata0datacrc6eop
000000010xc38bytes0xbb29250.000ns

3)握手包

syncackeop
000000010x4b266.660ns
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值