基于PDIUSBD12芯片的USB通信模块原理设计

分享到:
点击量: 215681

  1 引言

  usb是通用串行总线(universal serial bus)的英文缩写。usb总线接口作为外设的通用接口,硬件的结构相对简单,外围设备接口设计容易。usb接口把当前pc固有的串口、并口、ps2(键盘鼠标接口),甚至是scsi等连接外部设备的总线接口统一为单一的usb总线接口。因此在工业自动化领域开发usb接口应用技术具有资源共享的特殊意义。

  本文采用philips公司的pdiuSBD12芯片将usb接口传输技术应用到智能记录仪中,实现了对记录数据的**传输,具有速度快、干扰小、**性好等特点。

  2 usb通信接口模块设计

  2.1 usb接口

  usb总线和rs232类似,也是一种串行外围设备连接的总线形式。所不同的是,usb的传输速度是标准串口的数十倍,而且可以支持多达127个外设同时级联。首先,它的传输速度快,usb 1.1总线规范规定的*大传输速度为12mb/s,比一般的pc接口都快。而在usb2.0总线规范里,定义的*高传输速度已经达到了480mb/s,可以满足包括视频设备在内的多种外部设备传输的需要。其次,它支持热插拔,而且是真正的即插即用设备。无论在pc开机工作或不开机的情况下,都能支持热插拔,而不会对硬件产生任何损坏。再次,它可以支持双向、同步传输,能够保证某些需要连续数据流的设备的需要,譬如音频设备等,具有其它接口无法比拟的优势。usb接口已经成为事实上的pc标准外设接口。

  2.2 pdiusbdi2芯片

  pdiusbdi2是一款性价比很高的usb器件。它通常用作微控制器系统中实现与微控制器进行通信的高速通用并行接口。它还支持本地的dma传输。这种实现usb接口的标准组件使得设计者可以在各种不同类型微控制器中选择出*合适的微控制器。这种灵活性减小了开发的时间、风险以及费用(通过使用已有的结构和减少固件上的投资),从而用快捷的方法实现经济的usb外设的解决方案。pdiusb -di2完全符合usb1.1版的规范,它还符合大多数器件的分类规格:成像类、海量存储器件、通信器件、打印设备以及人机接口设备。同样地,pdiusbdi2理想地适用于许多外设,例如:打印机、扫描仪、外部的存储设备(zip驱动器)和数码相机等等。它使得当前使用scsi的系统可以立即降低成本。pdiusbdi2所具有的低挂起功耗连同lazyclock输出可以满足使用acpi、 onnow和usb电源管理的要求。低的操作功耗可以应用于使用总线供电的外设。此外它还集成了许多特性,包括softconnet、goodlink、可编程时钟输出、低频晶振和终止寄存器集合。所有这些特性都为系统显著节约了成本,同时使usb功能在外设上的应用变得容易。其内部结构图如图1所示。

  

 

  图1 pdiusbdi2内部结构图

  2.3 usb通信模块硬件电路及固件程序设计

  pdiusbdi2通过总线方式与单片机的接口电路,接口电路的原理如图2所示。

  

 

  图2 pdiusbdi2与单片机的接口电路图

  固件是固化在单片机中的程序代码,它与usb控制器一起完成枚举过程和主机通信。

  设备端的usb程序主要可分为两个大的步骤:usb设备的枚举和usb数据通信控制。如果要让一个usb主机或设备能够识别一个usb设备,必须经过枚举过程,主机使用总线枚举来识别和管理必要的设备状态变化。只有完成了枚举,usb设备才可以使用。

  在实际的开发过程中,使用了德国keil公司的keil c51编译器和perisoft 公司的bus hound 软件和微软的usb view。bus hound软件可以实时检测usb总线上的数据,从而有利于分析传输数据和枚举过程的正确性;usb view可以检测设备是否被成功枚举以及查看枚举后得到的各种描述符,用于显示系统中所有的usb总线和连接到每个usb总线上的usb设备。

  2.4 usb固件编程

  固件编程的目标就是使pdiusbdi2在usb上达到*大的传输速率。在本文中,使用了pdiusbd12的端点0、端点1和端点2,端点0采用控制传输的数据传输方式,端点1采用普通输入输出,端点2采用批量传输的数据传输方式。上、下位机通过usb口进行数据传输,上位机向单片机发送命令,下位机接到命令后将存在外部ram(at28c256)中的数据传到上位机中。在数据传送过程中,由于存在外界的干扰,为了使上下位可靠的通信,防止出现错误,在每次发送完数据后需要进行校验,在这里进行检验的方法如下:下位机数据发送完毕后,上位机将数据反发给下位机,下位机把刚发送的数据与上位机发下来的数据进行比较,如果相同,则表示数据接收正确,否则,数据接收错误,重发数据,直到数据发送正确。

  pdiusbd12的固件设计成完全的中断驱动,这就确保了*佳的传输速率和更好的软件结构,同时简化了编程和调试。固件采用模块化结构,分为主循环、协议层、中断服务程序、pdiusbd12 命令接口和硬件提取层等几个模块。

  (1) 标准设备请求:用于对标准的usb设备请求做出响应的实际过程如图。该图是通过由perisoft公司的bus hound软件可以看出,该软件是一种较好的捕捉总线数据的工具,可以根据捕捉到的数据分析usb设备的枚举过程数据的正确性,是一种很好的协议分析工具。其中,命令(description栏中对应的命令)执行的过程由上到下,见图3。

  

 

  图3

  (2) d12命令接口:命令接口模块是用于对pdiusbd12进行操作的子程序集。其中包括读写中断寄存器、数据缓冲区和状态字等。

  (3) 硬件提取层:是固件中的**层代码,用于实现硬件接口的映射。在本论文中,采用总线的方式对pdiusbd12进行访问。其中pdius -bd12的命令口地址为0003h,数据口地址为0002h。

  (4)中断服务程序:当pdiusbd -12向单片机发出中断请求后,中断服务程序处理由pdiusbd12产生的中断,并把数据从pdiusbd12的内部fifo取回到cpu存储器,并建立正确的事件标志,以通知主程序进行处理。在isr的入口,固件使用d12_r -eadinterruptregister()来决定中断源,然后将进入相应的子程序进行处理,在本设计中,通过单片机的/int1来响应usb中断。其流程如图4所示。usb通信中断服务子程序如下所示,首先设定中断标志位,然后通过读中断寄存器来判断是哪个端点发出的中断请求。执行完中断子程序后清中断标志位。

  

 

  图4 中断流程图

  (5) 主循环:主循环模块主要发送usb请求,处理usb总线事件和用户功能处理。在本设计中当usb完成枚举之后,通过端点2实现与上位机的数据交互。

  总线复位不要求在isr中进行特殊的处理。isr只需在eppflags中设置“bus_reset”标志位,然后退出即可。控制传输总是在setup阶段开始,之后为可选的data阶段。然后在status阶段结束。

  3 结束语

  usb协议部分软件的设计是在整个记录仪系统中起着参数传递的作用,因此是整个项目设计中极其关键的部分,只有这部分软件正确无误,usb设备才能正确的被主机所识别,也只有这样才能通过驱动程序和主机通信,才能进行一系列初始化工作。通过对本记录仪的调试及应用,证明基于usb接口技术的智能记录仪能够准确地记录数据,基本实现了数据传输功能。