首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

USB设备开发实例 02

USB设备开发实例 02

要快捷、成功的开发一个USB设备,正确、合理的调试方法是必不可少的环节。调试基本分三步进行:首先对外部设备(单片机部分)借助PC调试软件(芯片生产商提供或从网上下载WINRT-USB、Kernel Driver等调试软件)将设备端的USB协议(主要有描述符请求、端口配置、地址设置以及基本数据交换)调通。然后,用调试好的USB设备接口来开发、调试PC软件,这一步相对比较容易。最后,加上USB设备端的其它用户程序,对整个完整的系统进行系统调试。

  下面从硬件、软件两方面具体介绍作者设计的一个便携式USB数据采集设备,重点介绍USB接口部分。该数据采集系统以AD公司的带8通道12位A/D、2路12位D/A的52内核单片机ADuC812作为系统控制器,采用Philips公司的PDIUSBD12作为USB接口芯片。USB接口电路原理图如图1所示。由于系统中需要断电后保存采集数据,扩展了两片28F040,因此在这里把PDIUSBD12与CPU的接口采用了总线复用方式,通过ALE信号把数据分离出来,并把低64K RAM空间全留给PDIUSBD12(ADuC812的RAM空间有1M,分页管理,每页64K,共256页,对应DPP寄存器值0~255,PDIUSBD12占第0页,即DPP=0),地址线A(P2.0)作为PDIUSBD12的指令/数据选择线,则地址000100H写指令、000000H读写数据;单片机的P3.5口线提供PDIUSBD12的复位信号,接非门是保证单片机复位时PDIUSBD12也复位。PDIUSBD12与单片机的数据交换采用中断方式(INT0),实际应用中如果系统中断资源不够(特别是系统改型设计时),也可以接成查询方式,只是注意查询间隔不要超过USB接口的最大等待时间(最大500mS)。PDIUSBD12的GOOD-LINK指示灯(LED)在USB通信时会闪烁,常亮或一直不亮说明USB接口有问题,调试时非常有用。PDIUSBD12采用PLL倍频产生系统时钟,只需外接低频晶体,PCB设计比较方便。

  单片机软件设计主要注意以下几点:* PDIUSBD12的中断输出引脚只要中断寄存器不为0就保持低电平,所以单片机的对应中断(INT0)应设置成电平触发;中断处理后要用读上次传输状态寄存器清除中断寄存器中对应位(D0-D5)。

  * PDIUSBD12靠软件控制USB端口的连接,程序在系统初始化处理完后软件设置连接到USB端口,然后开中断。

  * PDIUSBD12对内部寄存器的读写没有边界限制,程序设计中一定不要读写超过端点深度的数据。特别对于描述符请求,由于其长度大于Control IN 深度(16 Bytes),要分几个数据周期传输。

  *描述符一定要设置正确,并且注意USB协议中所有字数据均定义为低字节在前传输(LSB),例如Phlips的ID为471H,应在iDVendor中定义成71H、04H. * 在接收到Setup包后,一定要用ACK Setup指令来重新使能Control IN 和Control OUT端点。向IN端点写数据后,要用Validate Buffer指令使数据可以在下一个IN数据周期发送。从OUT端点读数据后,要用Clear Buffer指令来清空缓冲区,否则后面OUT周期传输的数据将被丢弃(返回NAK)。

  *协议的处理一定要按USB规范要求进行,对无效请求,用Set Endpoint Status指令将Control IN和Control OUT端点Stall即可。

  PC机软件作者用VC6.0开发,分USB接口通信程序和应用程序两部分,其开发以及系统调试过程与前文所述相同,此处不再赘述
返回列表