1、接入USB设备怎么知道有USB设备接入了?
我们的USB设备有D+或者D-引脚,都有1.5K欧姆上拉电阻接到VCC,而集线器(HUB)接口的D+和D-相反,是接下拉电阻接到GND。所以没有设备接入时候,Hub的D+,D-就是低电平,这样就表示没有设备接入,但是如果有设备接入,那么构成通路,并且HUB的D+或者D-引脚的电压刚好是VCC的一半,此时为高电平,通过对这个电平的勘测就知道有设备接入。
2、描述符了:设备描述符、配置描述符、接口描述符、端点描述符、字符串描述符。端点构成接口,接口构成配置,配置构成设备,这些概念:http://book.51cto.com/art/200803/66926.htm
3、传输模式:控制传输、批量传输、中断传输、同步传输。
4、USB 的包格式:
同步域:8位0000 0001(全速和低速设备),用于本地时钟和输入同步,具体如何做到还没了解。
包标识符PID:说明包的类型;
EOP结束标识符,表示包的结束;
还有其他域,具体见文章http://blog.youkuaiyun.com/lp310018931/article/details/9666657
5、USB包的种类和功能:
第一种令牌包:有OUT、IN、SOF、SETUP包。头两个很简单,表示接下来有数据要输入或者输出,SOF是表示帧的起始包,最后一个很常见,表示要开始控制传输了。所谓的输入输出是基于主机控制器角度而言。
令牌包都是主机发给设备的,设备一需要接收到令牌包就知道主机控制器有请求了
OUT/IN/SETUP包:
同步域+包标志PID+地址+端点号+CRC5+EOP
SOF包:
同步域+包标志PID+11位帧号+CRC5+EOP
第二种数据包:包括DATA0,DATA1,DATA2,MDATA包
格式:
同步域+包标志PID+数据+CRC16校验+EOP
在数据包中,我们看到有DATA0和DATA1,这实际上形成了一种数据纠错机制。 在数据包(注意是数据包)发送成功或者接收成功时,数据包类型切换。如果检测到包类型没有切换,说明刚刚的握手包没有发送成功。
第三种握手包:ACK、NAK、STALL、NYET包,第一个确认包,第二个不确认包,第三个挂起包,第四个未准备包。
格式:同步域+包标志+EOP
ACK包一看就是成功握