如何检查USB器件工作与否
确定USB 芯片是否已经正常工作,是所有调试的基础,得到电路板之后,这是一个首
先要解决的问题。
判断USB 芯片是否已经工作,可以从两个方面来判断,一是将CLKOUT 设为12M(缺
省为4M),然后用示波器量CLKOUT 引脚,若确为12M 而不是4M,则说明USB 的地址
和数据都可以正确传送,各种信号线接法正确,USB 芯片可以正常工作,硬件基本没有问
题。
另一方面,如果使用SoftConnect,则在主程序中进行软连接后,如果GL_N 灯闪烁几
下,则PC 机上出现未知设备,则说明USB 进行软连接正常,也说明芯片已经工作了。
除了这两点之外,在整个调试标准设备请求阶段,都应该将中断寄存器的内容通过串
口发送出来,以便进行查看。另外就是还可以使用Bus Hound,观察USB 总线上的数据,
从而判断主机与设备之间的通信已经进行到哪一步了。
在主程序中,对USB 初始化过程为:
① 初始化MCU 的各种端口;
② 进行中断初始化,设置中断服务程序入口地址,将MCU 的中断方式设置为低电平
触发,因为D12 只要进入中断后INT_N 就一直为低。
③ 断开SoftConnect,延时1 秒后再次连接
④ 进入主程序循环,等待中断的到来,端点0 的中断处理程序会将数据放至缓冲区中,
主程序在前台判断是否有 Setup 包(通过一个变量,当中断服务程序检测到有Setup 包时,
设置该变量),然后执行相应的控制端点的传输。
主程序的这些工作完成以后,便可以根据前面提供的两种方法测试D12 芯片是否已经
工作了。 以下两点还应该引起注意:
PDIUSBD12 的中断输出引脚INT_N 只要中断寄存器不为0 就保持低电平,所以单片机
的对应中断应设置成电平触发;中断处理后要用读上次传输状态寄存器清除中断寄存器中对
应位(D0-D5)。
PDIUSBD12 对内部寄存器的读写没有边界限制,程序设计中一定不要读写超过端点深
度的数据。特别对于描述符请求,由于其长度大于Control IN 深度(64Bytes),要分几个数
据周期传输。
新闻热点
疑难解答