一.硬件连接
首先,你需要配置你所用芯片的相关USB寄存器值,保证相关功能都已经打开,例如USB PHY 寄存器,USB 中断寄存器等。
Function连接到Host端首先会收到Host端Reset信号,Function进行复位,要进行多次的复位,接着Host会发送Get descriptor(Device)进行首次设备描述符的获取。
二.USB枚举
如果你想确认硬件连接是否正确,可以通过USB协议分析仪,看看Host端是否发送了Get descriptor(Device)命令。Host端发送命令后开始正式的枚举。第一条命令刚才已经提到,当你成功向Host回完你的设备描述符后,Host 会对你的Function进行设置地址,以后就会这个地址进行通信(开始时候默认地址0进行通信)。这里要注意的是,你需要判断Setuppack(定义的请求的命令格式,是一个结构体),Setuppack.wLength与你的报告描述符的长度,因为一般端点Maxpack是64,而设备描述符等需要传输的长度小于64字节,所以你发送的长度应该是两者的小值。长度回应不对会导致Host端没有回应ACK。获取第一次设备描述符获取完毕之后,你就要对Set address请求进行回复,之后会进行这样一个过程:Device->config->Device->config->set config 过程,这里也要注意命令需要回复的长度。