中级会员
 
- 积分
- 273
- 金钱
- 273
- 注册时间
- 2015-3-23
- 在线时间
- 54 小时
|
有两个开发板,USB连接关系:
电脑->(板1 USB device ------板1 USB host) ->板2 USB device
开发板的usb host连接程序:USBH_Process(usbh_core.c),这个函数主要是usb host 与usb device建立连接的过程。
检测到USB设备插入 复位USB端口,开启输入,输出通道(设置通道特性,开启中断) 枚举(通过控制传输完成) 根据前面获得的参数,加载设备驱动
HOST_IDLE -> HOST_DEV_ATTACHED -> HOST_ENUMERATION -> HOST_USR_INPUT -> HOST_CLASS_REQUEST -> HOST_CLASS
这里主要将枚举过程:
第一个获取设备描述符(USBH_Get_DevDesc):
准备数据,将数据放置在phost结构体中,再将控制状态寄存器指向SETUP状态:phost->Control.state = CTRL_SETUP;
在控制状态寄存器中:
CTRL_SETUP:发送setup 包,将获取设备描述符指令发送出去。
CTRL_SETUP_WAIT:等待发送完成。
CTRL_DATA_IN:发送IN令牌
CTRL_DATA_IN_WAIT:等待发送完成,这时已经将设备描述符接收到缓存中。
CTRL_STATUS_OUT:发送OUT状态包,告诉USB设备已接收到设备描述符。
CTRL_STATUS_OUT_WAIT:等待发送完成,跳回枚举第一步,将设备描述符取出到应用层缓存。
其他枚举过程类似,不赘述。
|
|