之前运用ST官方的库以及网络的材料,完结了运用USB HID类进行STM32和PC机的通讯。我们其他原因并没有深化的剖析,尽管完结了功用,可是关于USB设备的枚举,以及详细的通讯方法都没有明晰的概念,所以现在回头从头学习USB相关常识。首要参考材料是《圈圈教你玩USB》、USB枚举进程图解,ST官方的USB HID例程。
一,USB数据包
1.USB数据包分类
USB总线上的数据传输以包为根本的单位。USB协议规则了四种包:令牌包、数据包、握手包、特别包。不同的包经过包中的8位PID域委任。
- 令牌包
令牌包用于发动一次USB传输,USB的数据传输有必要由主机建议。令牌包有四种:
输出令牌包(OUT):用来告诉设备酿制输出一个数据包。 数据方向 主机–>设备
输入令牌包(IN):用来告诉设备酿制回来一个数据包。数据方向 设备–>主机
树立令牌包(SETUP):告诉设备酿制输出一个数据包,相似OUT包。不过SETUP包只能往端点0发包,只用在操控传输中。
帧开始包(SOF):用于帧计数,USB全速设备每毫秒发生一帧,USB高速设备每125μS发生一帧。
OUT , IN, SETUP包的结构:同步域+8位PID+7位地址+4位端点号+5位CRC校验+包结束符EOP
- 数据包
数据包用来传输数据,分红DATA0. DATA1 。数据格局如下
同步域+8位PID+N个字节的数据+CRC16校验+包结束符EOP
- 握手包
握手包用来一共一个传输是否被对方结语,有ACK,NAK,STALL,NYET。
ACK:一共正确的接纳数据并且有满足的空间包容数据。主机和设备都能够运用ACK来结语,NAK,STALL,NYET只能够用于设备回来,主机不能运用。
NAK:一共没有数据需求回来,或许数据正确接纳可是没有空间包容。当主机收到NAK后,知道设备还未准备好,主机会在适宜的时分从头进行数据传输。
STALL:一共设备无法碑文该恳求,或许端点现已被挂起。
NYET:USB高速设备顶用。
握手包的格局:同步域+8位PID+包结束符EOP
2. 数据包的处理
在传输进程中,详细的处理细节由USB接口的芯片处理完结。
当USB接口芯片正确接纳到数据时,假如有空间保存,则它将数据保存并回来ACK,一起,设置一个标志一共现已正确接纳到数据;假如没有空间保存数据,则主动回来NAK。
收到输入恳求时,假如有数据需求发送,则发送数据,并等候接纳ACK。只要到数据成功发送出去(即接纳到ACK标志后),它才设置标志,一共数据已成功发送;假如无数据需求发送,则它主动回来NAK。
一般只需依据芯片供给的一些标志,准备要发送的数据到端点,或许从端点读取接纳到的数据即可。
二 ,USB业务
尽管USB界说了数据在总线上传输的根本单位是包,为了传输数据,有必要依照必定的联系把这些不同的包安排成业务才干传输数据。业务一般由两个或许三个包组成:令牌包、数据包和握手包。
令牌包用来发动一个业务,总是由主机发送;数据包用来传送数据,能够从主机到设备,也能够由设备到主机,方向由令牌包来指定;握手包用来指定数据传输成果。
三,USB传输类型
USB规则了4种传输类型:批量传输、等时传输、中止传输、操控传输。其间前三个传输一次数据都是一个业务;操控传输包括三个进程,树立进程和状况进程分别是一个业务,数据进程则或许包括多个业务。