北京的网站设计,桂林微信网站设计,做中学网站,php做不了大型网站吗USB通信
1、USB是轮询总线#xff0c;USB主机发起所有数据交换。数据往返于USB设备中的端点。USB主机输出使用OUT端点#xff0c;USB主机输入使用IN端点。USB主机中没有端点#xff0c;数据存储于缓冲区中。从主机的FIFO到设备的端点#xff0c;中间是Pipes。全速USB传输中…USB通信
1、USB是轮询总线USB主机发起所有数据交换。数据往返于USB设备中的端点。USB主机输出使用OUT端点USB主机输入使用IN端点。USB主机中没有端点数据存储于缓冲区中。从主机的FIFO到设备的端点中间是Pipes。全速USB传输中固定的1帧时间为1ms在高速USB中有将一帧分为了8个微帧每个125us。
USB数据层次
USB数据层次从小到大分为域field包packet事务transaction传输transfer管道pipes。
1、域
域是USB数据的最小单位其实域就像我们CAN通信中一个CAN帧内的帧起始帧IDRTRIDE等等。一个USB数据包由7个域组成。分别位同步域、标识域、地址域、端点域、帧号域、数据域、校验域。数据发送低位在前高位在后。
同步域用于本地时钟域输入同步标志一个包的起始全/低速为8位高速为32位。标识域PID由4位表示符和4位表示符反码组成用于表明包的类型和格式有令牌包数据包握手包。地址域ADDR七位地址表示设备在主机上的地址。复位和通电后默认为0在枚举过程中由主机配置。端点域ENDP4位表示端点编号。端点0默认作为控制传输端点且双向控制。帧号域11位帧号从0开始递增到0x7FF后自动变为0。数据域0~1023字节不同传输类型中数据域的长度不同。校验域对令牌包CRC5和数据包CRC16中非PID域进行校验。
2、包
包是USB传输的基本单位。它分为四种类型令牌包、数据包、握手包和特殊包。
令牌包
令牌包又可分为输出OUT、输入IN、帧起始SOF、建立SETUP。令牌包结构如下表所示
域PIDADDRENDPCRC5长度bit8745
令牌包说明
包PID说明OUT0001B用来通知设备将要输出数据包IN1001B用来通知设备将要返回一个数据包SOF0101B每帧开始时发送EOP是每帧结束的标志SETUP1101B只用在控制传输中它跟输出令牌包作用一样也是通知设备将要输出一个数据包。SETUP包后只使用DATA0数据包。
数据包
数据包用来传输数据。数据包结构如下表所示
域PIDDATACRC16长度bit80~819216
低速设备允许的最大有效数据载荷为8字节全速设备的最大有效数据负载大小为1023字节告诉设备的最大有效数据载荷为1024
数据包说明
包PID说明DATA00011数据包偶书包DATA11011数据包奇数包DATA20111高速同步事务的专用数据包MDATA1111SPLIT事务专用数据包
握手包
握手包用来表示一个传输是否被对方确认。包结构如下表所示
域PID长度bit8
握手包说明
包PID说明ACK0010数据被正确接收NAK1010数据未正确接收、设备内存不够无法接收数据或设备无数据可发送STALL1110设备无法执行这个请求或者端点已经被挂起。NYET0110在高速设备OUT事务中使用表示设备本次数据接收成功但是没有足够的空间接收下次数据。主机下次输出数据时将先使用PING命令来探测设备是否有足够的空间
3、事务
每个事务都包含由三个包分别是令牌包数据包握手包。根据令牌包中PID的不同事务可以分为三种SETUP事务IN事务OUT事务。
SETUP事务
方向包组成主机到设备令牌包SYNCPIDSETUPADDRENDPCRC5主机到设备数据包SYNCPIDDATA08字节数据CRC16设备到主机握手包SYNCPIDACK/NAK/STALL
主机先发送一个SETUP令牌包给设备通知令牌包中的所包含的地址的设备准备接收数据寻址。主机发送8字节的DATA0数据包给设备SETUP事务必须使用DATA0。这8字节的内容就是标准的USB设备请求命令。设备接收指令后会返回一个握手包给主机。
IN事务
方向包组成主机到设备令牌包SYNCPIDINADDRENDPCRC5设备到主机数据包SYNCPIDDATA0/1(0~1023)字节数据CRC16主机到设备握手包SYNCPIDACK/NAK/STALL
主机先发送一个IN令牌包给设备通知令牌包中的所包含的地址的设备向主机发送数据寻址。设备如果正常则向主机发送数据如果数据需多次发送则交替使用DATA0和DATA1。如果设备异常则发送NAK或STALL提前结束IN事务。主机收到数据后发送一个握手包给设备。
OUT事务
方向包组成主机到设备令牌包SYNCPIDOUTADDRENDPCRC5主机到设备数据包SYNCPIDDATA0/1(0~1023)字节数据CRC16设备到主机握手包SYNCPIDACK/NAK/STALL
主机先发送一个OUT令牌包给设备通知令牌包中的所包含的地址的设备准备接收数据寻址。主机发送数据包给设备如果数据需多次发送则交替使用DATA0和DATA1。设备接收指令后会返回一个握手包给主机。
4、传输
传输时由事务构成的有四种类型中断传输、批量传输、同步传输、控制传输。传输的种类在端点描述符中确定。
中断传输
这里的中断并不是传统意义上的中断它是主机通过固定时间对中断端点进行查询轮询时间可以在端点描述符中设置Interval。它通常用于有一定实时性要求但是数据量不大且数据不需要一直通信的传输中就像我们的鼠标或键盘没有动作就不用传数据给主机。
低速全速高速最大数据包长度8byte64byte1024byte最大带宽占用90%90%80%轮询间隔10~255ms1~255ms2^(interval-1)*125us
需要注意的是主机对中断端点的轮询间隔并不一定是按照我们设置的来它的只会保证轮询的间隔小于我们设置的间隔。
对于低速和全速传输一帧中最多只有一次中断传输。对于高速传输在端点描述符中可以设置中断传输的额外通信次数最多可以额外传输2次也就是一微帧中总共传输2次。
中断传输包含了IN事务和OUT事务。如果传输的数据大于最大数据包长度那么会分多个事务进行传输直到传输的事务的数据长度小于最大数据包长度则认为时最后一包数据传输完成。在传输过程中会PID会按照DATA0-DATA1-DATA0…来翻转传输。发送端只有在收到ACK的时候才会翻转PID。
批量传输
批量传输的实时性不高相对来说它的传输优先级最低。只有当USB中有多余的带宽了批量传输才会开始但是当带宽比较紧张的时候批量传输会把带宽让给其他传输。其端点描述符中的Interval不起作用。批量传输一般用于数据传输量大但是对实时性要求不高的场合例如打印机。
低速全速高速最大数据包长度不支持8、16、32、64byte可选512byte
批量传输包含了IN事务和OUT事务但是比中断传输多了一个PING事务PING事务只在高速传输中存在。PING事务的用来查看端点的状态。在传输前先PING一下从机看设备是否准备好接收数据NYET表示没有准备好接收下一包数据ACK表示已经准备好接收数据。如果传输的数据大于最大数据包长度那么会分多个事务进行传输直到传输的事务的数据长度小于最大数据包长度则认为时最后一包数据传输完成。在传输过程中会PID会按照DATA0-DATA1-DATA0…来翻转传输。发送端只有在收到ACK的时候才会翻转PID。
同步传输
同步传输是一种实时的但是不可靠的传输不支持错误重发机制。同步传输有固定的时间间隔端点描述符中的Interval固定为1。对于全速传输一帧中最多只有一次中断传输个人理解是对某个端点的中断传输只有一次。对于高速传输在端点描述符中可以设置中断传输的额外通信次数最多可以额外传输2次也就是一微帧中总共传输2次。同步传输一般用于数据量大实时性要求高数据产生连续的场合例如音视频的传输。
低速全速高速最大数据包长度不支持1023byte1024byte最大带宽占用不支持80%90%轮询间隔不支持1~255ms2^(interval-1)*125us
同步传输包含了IN事务和OUT事务同步数据的IN和OUT事务没有包握手阶段数据包的PID都是DATA0。
控制传输
控制传输使用端点0进行双向传输一般用于设备配置枚举。控制传输一般在总线中没有进行同步与中断传输的时候如果需要进行控制传输才会启动。
低速全速高速最大数据包长度8byte8、16、32、64byte可选512byte
控制传输时可靠传输。分为三个过程
建立过程一个SETUP事务用来告诉设备我们主机的请求时什么数据为8个字节可以参考标准请求介绍。数据过程数据过程不是必须的数据过程用来读取或者设置请求内容0个或多个IN/OUT事务。状态过程一个IN/OUT 事务表明请求时否成功了。
标准请求代码表
bRequestValueGET_STATUS0CLEAR_FEATURE1SET_FEATURE3SET_ADDRESS5GET_DESCRIPTOR6SET_DESCRIPTOR7GET_CONFIGURATION8SET_CONFIGURATION9GET_INTERFACE10SET_INTERFACE11SYNCH_FRAME12SET_ENCRYPTION13 USB2.0以后GET_ENCRYPTION14SET_HANDSHAKE15GET_HANDSHAKE16SET_CONNECTION17SET_SECURITY_DATA18GET_SECURITY_DATA19SET_WUSB_DATA20LOOPBACKDATAWRITE21LOOPBACK_DATA_READ22SET_INTERFACE_DS23SET_SEL48SET_ISOCH_DELAY49
SETUP 8字节数据格式
OffsetFieldSizeDesc0bmRequestType1bit7: 0数据由主机到设备SET请求 1数据由设备到主机GET请求 bit[6:5]00标准请求01特定类请求10用户定义的请求命令11保留1bRequest1标准请求代码见标准请求表2wValue2根据请求的不同该含义会由变化4wIndex2根据请求的不同该含义会由变化6wLenght2指定第二阶段传输数据的长度0表示没有数据传输阶段
bmRequestType(1)bRequest(1)wValue(2)wIndex(2)wLength(2)数据过程0x00CLEAR_FEATURE(1)特性选择00没有数据0x01CLEAR_FEATURE(1)特性选择接口号0没有数据0x02CLEAR_FEATURE(1)特性选择端点号0没有数据0x80GET_CONFIGURATION(8)001配置制0x80GET_DESCRIPTOR(6)描述符类型高字节和描述符索引低字节0或语言ID(字符串描述符)描述符的长度描述符0x81GET_INTERFACE(10)0接口号1备用转换接口0x80GET_STATUS(0)002设备状态0x81GET_STATUS(0)0接口号2接口状态0x82GET_STATUS(0)0端点号2端点状态0x00SET_ADDRESS(5)设备地址00没有数据0x00SET_CONFIGURATION(9)配置值00没有数据0x00SET_DESCRIPTOR(7)描述符类型高字节和描述符索引低字节0或语言ID(字符串描述符)描述符的长度描述符0x00SET_FEATURE(3)特性选择00没有数据0x01SET_FEATURE(3)特性选择接口号0没有数据0x02SET_FEATURE(3)特性选择端点号0没有数据0x01SET_INTERFACE(11)备用接口号转换接口号接口号0没有数据0x82SYNCH_FRAME(12)0端点号2帧号
参考
USB 标准请求 - USB中文网 (usbzh.com)
USB初学 – 入门篇 USB基础知识速览 - STM32H7 - 硬汉嵌入式论坛 - Powered by Discuz! (armbbs.cn)