USB通信程序设计 第9页
图4.6 数据提交函数程序流程图
4.1.3 标准设备请求处理——D12SETUP.C
4.1.3.1 获取状态 GET STATUS(00H)
GET STATUS请求要求接收方返回一个相应的状态,设备返回16位的状态描述。图4.7为GET STATUS的工作流程图。
4.1.3.1.1 获取设备的状态
当GET STATUS的索引为设备时,主机获取设备的状态。如果请求是对器件,MCU必须向主机返回器件状态。
4.1.3.1.2 获取接口的状态
因为接口状态的16位字节全部保留,所以返回0x0000即可。
4.1.3.1.3 获取端点的状态
一个端点有输入和输出两个端点号。这里使用了索引BIT7来标识要求返回的端点的方向,BIT7=1为返回输入端点的状态;BIT7=0为返回输出端点的状态。
图4.7 GET STATUS的工作流程图
4.1.3.2 清除特性 CLEAR FEATURE(01H)
CLEAR FEATURE用来清除或禁止设备的一个特定的特性。当接收到CLEAR FEATURE的请求后,设备就执行相应的操作,并返回一个空的数据表示执行完毕。图4.8为CLEAR FEATURE的工作流程图。
4.1.3.3 设置特性 SET FEATURE(03H)
SET FEATURE用来设置或允许一个特性。SET FEATURE和CLEAR FEATURE是两个相反的动作。同样,当接收到SET FEATURE的请求后,设备就执行相应的操作,并返回一个空的数据表示执行完毕。图4.9为SET FEATURE的工作流程图。
4.1.3.4 设置地址 SET ADDRESS(05H)
在USB设备枚举的时候,主机会分配一个新的地址给设备,以取代默认地址(默认地址为0)。当设备接收到这一设备请求的时候,要做的事情就是把设备的当前地址改为分配的地址,以让设备对新的地址作出响应。注意此设置地址请求不含数据阶段,MCU需要向主机写一个零长度的数据包作为应答阶段。
图4.8 CLEAR FEATURE的工作流程图
图4.9 SET FEATURE的工作流程图
图4.10 SET ADDRESS的工作流程图
4.1.3.5 获取描述符 GET DESCRIPTOR(06H)
GET DESCRIPTOR是主机用来获取USB设备相对应的描述符的一个请求。在这里,设备请求值的高8位为要求获取的描述符的类型,设备按照请求类型返回相应的描述符。下图为GET DESCRIPTOR的工作流程图:
图4.11 SET DESCRIPTOR的工作流程图
4.1.3.6 获取配置信息GET CONFIGURATION(08H)
GET CONFIGURATION用于获取当前的配置信息。如果设备已经配置,则返回信息为当前的配置值(一个字节);否则返回为0,表示还没有配置。图4.12为GET CONFIGURATION的工作流程图。
4.1.3.7 设置配置SET CONFIGURATION(09H)
SET CONFIGURATION是用来选择设备的工作配置。SET CONFIGURATION中的值只能是0或与配置描述符中bConfiguration Value相同的值。一旦SET CONFIGURATION有效,MCU还需要向主机发送零数据包作为应答阶段。图4.13为SET CONFIGURATION的工作流程图。
4.1.3.8 获取接口信息 GET INTERFACE(0AH)
GET INTERFACE用于返回当前的接口号。返回信息为一个字节。
4.1.3.9 设置接口 SET INTERFACE(0BH)
SET INTERFACE用于设备支持多接口的时候,主机用来选择一个接口。如果选择正确,设备发送一个空的数据表示执行完毕。