新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于单片机的心电血压监测仪USB接口设计方案

基于单片机的心电血压监测仪USB接口设计方案

作者:时间:2012-11-06来源:网络收藏



  设备的通信主要实现数据的Bulk传输功能。在总线收发数据的通信协议基础上,还有特定的应用层通信协议。固件接收到用户通信命令后,解析控制命令并执行相应的例程。如传输数据命令0x10,固件接收0x10命令码后,从命令参数中获取待传输数据长度、的选择传输标志及其记录号等信息,根据记录号调用GetRecordData(),从Flash存储区中查找数据并存入BulkState的发送缓冲区,如果传输心电数据则还需通过Gettime()获得该段心电数据的采集时间。所有待发送数据准备就绪后开始传输,由于Bulk传输的最大缓冲区为64B,首先发送64B数据,然后在TX_EV例程中判断上位机是否接收成功,若成功则传输下一批块输入事务,否则需要重发,循环重复上述过程直到数据发送完毕。

  固件各模块例程

初始化

USB的初始化例程,包括USBN9603芯片的初始化操作和用户变量的初始化,之后开始设备枚举操作。在初始化阶段,固件需要严格按照顺序对USBN9603的寄存器进行操作。

  USB设备枚举过程

  将系统的USB连接线接入一个USB连接端口(集线器或主机根集线器),设备处于开机状态;在USB的D+和D-数据线和所接入的集线器端口或主机的根集线器之间有两个15KΩ的上拉电阻。此时,上拉电阻会使数据信号线上的电平上升,通知集线器有新设备接入;然后,集线器使用中断通道,报告给主机所发生的事件,确实有新设备接入时,主机向连接设备的集线器发送Set_Port_Feature要求,使集线器向端口发送USB硬件复位命令并持续10ms,然后识别设备的速度。此时,设备已经完成了初始化操作,在主机证明设备已经离开重置状态时,开始在端点0的默认通道上进行USB控制传输,进入枚举阶段。

  块传输标准例程

  固件的发送例程通过端点1实现到主机的块传输功能,其流程如图3所示。以上传心电数据为例,固件通过端点0接收主机的上传心电数据要求后,将待传送的数据存入writePtr缓冲区,同时,把待传输的数据、大小等信息存入bulkState。


图3 块传输发送模块例程


图3 块传输发送模块例程


  固件的接收例程通过端点2从主机接收数据,主机先发送一个OUT信令到端点2,SIE从收发器自动接收数据并存储到FIFO2,FIFO2会自动更新接收控制寄存器RXC的状态,数据接收的硬件操作完成后,USBN9603会把一个接收中断传送到S3C44B0X处理器,固件执行接收中断服务例程。

  USB通信协议的主机端实现

  WDM驱动程序包括设备功能驱动程序和总线驱动程序。其中,总线驱动程序由Windows提供,本文主机端软件包括以下3个层次:用户模式下的应用程序、实现USB通信的Win32API动态连接库以及核心模式下的WDM设备功能驱动程序。动态连接库封装了访问核心模式驱动程序的函数,并为用户应用程序提供了访问,用户应用程序只需调用即可实现特定数据的传输,而主机端软件的核心就是如何开发WDM设备功能驱动程序。

  在Windows2000平台安装Windows2000 DDK,使用Visual C++6.0作为开发工具,同时借助DriverWorks工具包和内核代码调试工具模块SoftICE,以及USB总线监测工具Bus Hound进行WDM驱动程序的开发。

  根据DriverWizard向导提示,选择设备类型为USB ;选择I/O请求包IRP的处理方式为IRP排队方式;创建设备为128位的全局唯一标识符(GUID)标识,使得在使用CreateFile()函数打开设备时,WDM能通过GUID识别和访问设备的驱动程序;配置控制、BulkIN和BulkOUT这3个端点分别传输命令和数据。配置3个IOCTL控制命令:MYUSB_IOCTL_ COMMAND是主机发送通信命令的控制命令,其IoctlCode为0x812;MYUSB_IOCTL_ BULK_READ和MYUSB_IOCTL_BULK_ WRITE分别发送Bulk数据传输的读写命令,其IoctlCode分别为0x814和0x815。所有设置完成后,生成.inf安装信息文件。在这些框架下,根据应用需求,即可编写与设备固件通信的主机设备驱动程序。

  当主机要求以Bulk方式读写并传送心电或血压数据时,会给出IOCTL_CODE为MYUSB_IOCTL_ BULK_READ的IOCTL IRP,处理例程为BulkReadWrite()。通过传递不同参数分别实现BULK方式的数据读写功能,首先需要从应用程序获得IRP传递的通道号、输入/输出缓冲区及其大小等参数,调用FindPipe()得到IRP要求的通道实例,在该通道上构造URB、调用SubmitUrb()发送URB,实现与底层USB类驱动程序的通信,完成Bulk数据传输功能。

  结语

  本文充分利用USB传输速度快、准确性好、使用方便等特点,将USB接口应用于家用心电、血压,完成ARM内核MCU与USB控制芯片接口的软硬件,通过心电图的传输实验,表明该系统具有高可靠性和准确性。

本文引用地址:http://www.eepw.com.cn/article/170715.htm

上一页 1 2 下一页

评论


相关推荐

技术专区

关闭