图10 配置描述符集合流程图
4.2.5 设置配置请求及返回
从串口调试显示可以看出,主机又发送了设置配置请求,此请求属于设备枚举的过程之一,其是一个要求无线鼠标设备输出相应配置的请求。由于在本设计中只有一个计算机外部设备即鼠标,其只有一个配置,因此配置值可以忽略,直接通过微控制器发送指令使能相应端点,主机收到使能指令后,再向设备返回0长度状态数据包。编写使能端点的函数,修改设置配置请求中断处理,通过串口调试窗口可以看出,主机发送了输出类请求,该请求要求设备在没有事件发生时,不得从终端端点返回数据,对USB无线鼠标来说,其不发生任何动作,编写类输出请求代码,修改类输出请求中断处理函数,编译调试,通过串口调试窗口可以看到主机发送了一个获取报告描述符的请求。设置配置请求流程图如图11所示[12-14]。
图11 设置配置请求流程图
4.2.6 报告描述符的实现及返回
报告描述符是用来描述一个报告的结构以及报告中的数据是用来做什么的。在无线鼠标这个设计中,报告描述符里面的信息就是按键的各个动作,报告里面包含要传输的数据信息,数量为整数字节。输入报告是通过中断输入端点返回的,输出报告可以通过输出端点0发送或者中断输出端点发送。通过报告描述符,主机就可以分析报告里面数据的意义,通过数据分析操作系统就可以知道鼠标的动作信息,报告描述符请求是发送到接口的其是由条目组成的。编写鼠标报告描述符代码,通过USB协议中对报告描述符的定义可知,返回的输入报告有4个字节,在中断输入端点1中返回鼠标数据。在获取描述符的处理中,增加对获取报告描述符请求的处理代码。通过调试可以发现,设备成功的返回了报告描述符,这样枚举过程就算完成了。在设置非0配置后,数据可以写到端点1中返回。发送数据之前,检查端点1是否处于忙状态,只有在空闲状态时才可以发送数据。将端点1输入中断处理函数和总线复位处理函数做相应修改,在主函数中增加判断是否返回报告的程序代码,最后编写发送报告的函数,根据按键的情况返回报告的函数。这样,一个实现鼠标基本功能的模块就完成了。报告描述符流程图如图12所示[15]。
图12 报告描述符流程图
5. 仿真调试及实物制作
硬件电路原理图设计及PCB绘制完成,程序编写完成,在制作实物之前利用PROTEUS进行仿真调试。在调试之前,必须为PROTEUS安装虚拟USB设备。安装完成后新建一个工程调用仿真元件库中的元件绘制仿真原理图。仿真原理图的各元件的连接关系为:USB接口芯片数据端口为8位并行数据口与MCU的P0口链接,P0口在外部接上拉电阻,该电阻的值为1千欧姆。并行数据引脚用于向芯片写入数据或者命令,读出数据或者状态。由于在这里只有一个USB设备,地址选通线、片选线、挂起线都接地,地址线A0用于指明数据地址和命令地址,只有两种状态,所以只需要一根地址线,即第28引脚接到微控制器的P3.4引脚,使用其输入输出功能。14引脚为该接口的中断请求信号,所以要将其接到控制器的外部中断源上,在此选择外部中断0。第25、26引脚是数据线,采用差分串行传输,它们接至USB数据端口,即下图的J1的2、3引脚。27引脚是芯片输出的3.3伏的稳压电源,将其通过电容接至地。微控制器为最小系统的配置,其与接口芯片的链接为:P0口与PDIUSBD12 的数据口相连接,中断源0、P3.6、P3.7分别与PDIUSBD12的中断请求引脚和读写控制引脚链接。八位按键接到微控制器的P1口,发光二极管通过限流电阻接到微控制器的P2口,采用共阳极的方式。在电路板焊接完成后,按键和LED用于检验和测试电路板设计的合理性和电路连接是否存在问题。在USB鼠标程序调试过程中,LED用于指示调试的中间状态变量,按键用于指示鼠标的各种按键动作。将写好的程序下载到虚拟的微控制器里开始仿真调试,根据中间结果修改错误和不完善的地方,最终完成程序的调试,USB接口模块的仿真截图如图13 所示[16]。 通用串行总线及外设开发+电路图+流程图(7):http://www.youerw.com/tongxin/lunwen_1525.html