本文要点评论USB通讯协议及其接口芯片的操控办法,针对临床需求,规划完结了具有心电、血压智能监测和USB高速数据传输功用的小型化设备,供给心电、血压数据电子病历查询、打印和网络传输等功用,关于进步家庭健康保健水平具有很重要的含义。
监测仪的USB接口电路规划
体系主操控芯片选用32位高性能嵌入式ARM微处理器S3C44B0X,USB专用操控芯片选用USBN9603。USBN9603内置7个FIFO端口,包含1个双向的操控端口,3个发送端口和3个接纳端口,各有64字节。
USB操控器与S3C44B0X的接口电路如图1所示。将USB操控器规划为Bank2,行将nGCS2存储体挑选线作为USBN9603的片选线,则该芯片的片选地址为0x4000000。本文选用并行数据接口,两个芯片的低8位数据线D0~D7相衔接,并行传输通讯数据。将MODE0和MODE1引脚都接地,装备USBN9603为非复用方法,因为此作业形式需求地址线A0作为存取USBN9603片内寄存器DATA_IN、DATA_OUT和ADDR寄存器的挑选线,需衔接32位地址总线中的A18到USB操控器的A0。对USBN9603进行读写操作时,分为两个总线周期:首要,将地址线A0置高,即设置总线地址为0x4040000,将待拜访寄存器的地址从数据线D[0:7]写入,这样,就在第一个总线周期将地址送到芯片;然后,在第二个周期,将A0置低,即设置总线地址为0x4000000,读写D[0:7]即可完结对寄存器的读写操作。整个USB通讯进程首要是处理包含接纳、发送数据等各种中止事情,将USBN9603的INT引脚衔接到S3C44B0X的外部中止EINT0引脚,设置USB中止为向量中止恳求形式。因为未运用DMA方法,需将DACK置高,DMA恳求线DRQ悬空。USB电缆有4条导线,D+和D-是USB差分信号线,别的两个别离是5V电源线和地线。USBN9603支撑低速和全速的USB通讯,在D+信号线上衔接1.5KΩ上拉电阻,使其作业在全速形式。
监测仪的USB接口固件完结
USB通讯进程的操作是从主机开端的,依照约好的时序先宣布一个令牌包,包含操作类型、方向、外设地址及端点号等信息,然后在令牌中指定数据发送者宣布一个数据包或许指出没有数据传输。而USB外设要以一个承认包作出呼应,表明传输成功。
本文选用主从式USB通讯结构,上位机经过发送各种事前约好好的协议指令,来完结对心电、血压数据的收集及对体系设备的初始化设置,首要包含以下几种数据:心电数据以段为单位,每段包含32KB心电数据及6B的收集时刻信息,每次传输若干段,数据量大,对传输牢靠性要求也高;血压数据包含舒张压和收缩压及其收集时刻,共10B,因为血压监测比较频频,每次会传输一段时刻内的血压监测数据,数据量也比较大;下载升级版的固件等文件信息。这3种数据的数据流量都比较大,并且牢靠性要求都较高,3种数据均选用块传输通道类型,别的,每个USB传输都必有操控传输通道。因而,需求运用3个通道,即操控通道、BulkIN通道和BulkOUT通道。
USB固件数据结构
本文触及USB设备装备枚举阶段上位机在操控传输中要求设备传输的4类描述符,依照层次依次为:设备描述符、装备描述符、接口描述符和端点描述符,其间,较高阶描述符会告诉主机任何其它低阶的描述符信息。
设备描述符是在设备衔接时主机第一个读取的描述符,每个设备只能有一个设备描述符,包含整个设备的信息以及设备支撑的装备号码,共18个字段。每个USB设备有一个或多个装备描述符,包含设备的电源办理以及设备装备所支撑的接口号码,当设备收到获取装备描述符的要求后,传送该装备描述符及其一切接口、端点和其它隶属描述符给主机,本文设置一个装备,其描述符共8个字段。接口包含一组端点,本文设置一个接口,其描述符有9个字段,为上位机供给了设备运用端点的数目及其类型等信息。每个接口描述符有零个或多个端点描述符,包含主机与端点通讯所需的信息,端点0作为操控端点来通讯,端点1和端点2别离为块传输形式,其描述符包含了端点号、传输方向、端点传输类型、数据包最大传输字节等信息。
USB固件通讯流程
USB固件结构流程在进入通讯模块后,固件首要调用初始化例程,装备USB接口设备,并使其进入操作状况,然后启用中止,USB通讯的首要功用是在中止服务中完结的,主程序只是在循环等候是否有退出的按键,当检测到中止信号时,就会进入中止服务子程序,依据寄存器MAEV的值,判别中止类型,并进入相应的处理进程。
设备的USB通讯首要完结心电和血压数据的Bulk传输功用。在USB总线收发数据的通讯协议基础上,监测仪还有特定的使用层通讯协议。固件接纳到用户通讯指令后,解析操控指令并履行相应的例程。如传输心电和血压数据指令0x10,固件接纳0x10指令码后,从指令参数中获取待传输数据长度、心电或血压的挑选传输标志及其记载号等信息,依据记载号调用GetRecordData(),从Flash存储区中查找数据并存入BulkState的发送缓冲区,假如传输心电数据则还需经过GetTIme()取得该段心电数据的收集时刻。一切待发送数据准备就绪后开端传输,因为Bulk传输的最大缓冲区为64B,首要发送64B数据,然后在TX_EV例程中判别上位机是否接纳成功,若成功则传输下一批块输入业务,不然需求重发,循环重复上述进程直到数据发送结束。
USB固件各模块例程
初始化
USB接口的初始化例程,包含USBN9603芯片的初始化操作和用户变量的初始化,之后开端设备枚举操作。在初始化阶段,固件需求严厉依照次序对USBN9603的寄存器进行操作。
USB设备枚举进程
将体系的USB衔接线接入一个USB衔接端口(集线器或主机根集线器),设备处于开机状况;在USB的D+和D-数据线和所接入的集线器端口或主机的根集线器之间有两个15KΩ的上拉电阻。此刻,上拉电阻会使数据信号线上的电平上升,告诉集线器有新设备接入;然后,集线器运用中止通道,报告给主机所产生的事情,的确有新设备接入时,主机向衔接设备的集线器发送Set_Port_Feature要求,使集线器向端口发送USB硬件复位指令并继续10ms,然后辨认设备的速度。此刻,设备现已完结了初始化操作,在主机证明设备现已脱离重置状况时,开端在端点0的默许通道上进行USB操控传输,进入枚举阶段。
块传输规范例程
固件的发送例程经过端点1完结到主机的块传输功用,其流程如图3所示。以上传心电数据为例,固件经过端点0接纳主机的上传心电数据要求后,将待传送的数据存入writePtr缓冲区,一起,把待传输的数据、巨细等信息存入bulkState
固件的接纳例程经过端点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数据传输功用。
.