设备模拟的实现方法和装置转让专利

申请号 : CN200910265981.1

文献号 : CN101763324B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 王海军

申请人 : 中兴通讯股份有限公司

摘要 :

本发明公开了一种设备模拟的实现方法和装置,该装置包括:功能层模块,用于将从设备的鉴别信息提供给与从设备连接的主设备,以及解析来自与主设备的命令;设备层模块,用于根据解析后的命令控制从设备的端点缓存器对主设备与从设备之间的传输的数据进行保存;总线接口层模块,用于通过通用输入输出接口实现与从设备与主设备之间的数据传输。通过本发明,能够在从设备不具有USB客户端控制器硬件的情况下,通过设备芯片的GPIO接口模拟USB的数据传输,使得主设备能够将插入的从设备识别为USB设备,考虑到从设备基带芯片的速率,能够将从设备模拟为低速USB设备并基于USB1.1协议实现主设备与从设备之间的数据传输。

权利要求 :

1.一种设备模拟的实现装置,设置于从设备,其特征在于,包括:

功能层模块,用于将所述从设备的鉴别信息提供给与所述从设备连接的主设备,以及解析来自于所述主设备的命令;

设备层模块,用于根据解析后的所述命令控制所述从设备的端点缓存器对所述主设备与所述从设备之间的传输的数据进行保存;

总线接口层模块,用于通过两个通用输入输出接口实现所述从设备与所述主设备之间的数据传输,其中,所述两个通用输入输出接口上的信号组成一对差分信号,并且所述从设备与所述主设备之间传输的数据由所述一对差分信号的电压表示。

2.根据权利要求1所述的实现装置,其特征在于,所述总线接口层模块包括:调压器,用于调节由所述从设备向所述主设备发送的差分信号的电压,使调节后的所述电压满足预定要求。

3.根据权利要求2所述的实现装置,其特征在于,所述预定要求是指:通用串行总线USB协议对电压的要求。

4.根据权利要求1所述的实现装置,其特征在于,所述总线接口层模块还用于对所述主设备发送至所述从设备的数据进行解码和校验,并根据校验结果向所述主设备返回正确应答消息或错误应答消息。

5.根据权利要求1所述的实现装置,其特征在于,所述总线接口层模块还用于在所述主设备向所述从设备发送数据的情况下,触发中断检测,并在中断检测过程中接收所述主设备向所述从设备发送的数据。

6.根据权利要求1所述的实现装置,其特征在于,所述设备层模块还用于维护所述端点缓存器的状态、所述从设备的状态以及所述主设备与所述从设备之间传输的数据。

7.一种设备模拟的实现方法,其特征在于,包括:

从设备将鉴别信息提供给与所述从设备连接的主设备,并解析来自于所述主设备的命令; 根据解析后的所述命令,所述从设备通过通用输入输出接口实现所述从设备与所述主设备之间的数据传输,其中,所述从设备控制所述从设备的端点缓存器对所述主设备与所述从设备之间的传输的数据进行保存;

所述通用输入输出接口的数量为两个,其中,所述两个通用输入输出接口上的信号组成一对差分信号,并且所述从设备与所述主设备之间传输的数据由所述一对差分信号的电压表示。

8.根据权利要求7所述的实现方法,其特征在于,在所述从设备向所述主设备传输数据的情况下,还包括:调节所述从设备向所述主设备发送的差分信号的电压,使调节后的所述电压满足预定要求,其中,所述预定要求是指通用串行总线USB协议对电压的要求。

说明书 :

设备模拟的实现方法和装置

技术领域

[0001] 本发明涉及通信领域,尤其涉及一种设备模拟的实现方法和装置。

背景技术

[0002] 随着社会信息化的不断发展,嵌入式设备的应用越来越普及。在这种趋势下,不同设备间的信息通讯功能将称为实现这种设备间信息化的关键因素。
[0003] 目前,通用串行总线(Universal Serial Bus,简称为USB)具有即插即用、数据传输速率高等多种优点,并且已经成为计算机与各种具有USB芯片的数字设备的首选通信方式。
[0004] 但是,考虑到成本问题,目前很多电气设备的芯片不带有USB客户端控制器的功能,也就导致这些设备即使插入USB插槽也不能被识别,对于如何使不带有USB客户端控制器的设备被识别为USB设备从而基于USB协议进行数据传输的问题,目前尚未提出有效的解决方案。

发明内容

[0005] 针对相关技术中无法使不带有USB客户端控制器的设备基于USB协议进行数据传输的问题,本发明提出一种设备模拟的实现方法和装置,能够将不带有USB客户端控制器的设备模拟为USB设备并基于USB协议进行数据传输。
[0006] 本发明的技术方案是这样实现的:
[0007] 根据本发明的一个方面,提供了一种设备模拟的实现装置,设置于从设备。
[0008] 根据本发明的设备模拟的实现装置包括:功能层模块,用于将从设备的鉴别信息提供给与从设备连接的主设备,以及解析来自与主设备的命令;设备层模块,用于根据解析后的命令控制从设备的端点缓存器对主设备与从设备之间的传输的数据进行保存;总线接口层模块,用于通过通用输入输出接口实现与从设备与主设备之间的数据传输。
[0009] 其中,总线接口层模块,通过两个通用输入输出接口实现主设备与从设备之间的数据传输,其中,两个通用输入输出接口上的信号组成一对差分信号,并且从设备与主设备之间传输的数据由一对差分信号的电压表示。
[0010] 并且,总线接口层模块包括:调压器,用于调节由从设备向主设备发送的差分信号的电压,使调节后的电压满足预定要求。
[0011] 具体地,上述预定要求是指:通用串行总线USB协议对电压的要求。
[0012] 此外,总线接口层模块还用于对主设备发送至从设备的数据进行解码和校验,并根据校验结果向主设备返回正确应答消息或错误应答消息。
[0013] 并且,总线接口层模块还用于在主设备向从设备发送数据的情况下,触发中断检测,并在中断检测过程中接收主设备向从设备发送的数据。
[0014] 此外,设备层模块还用于维护端点缓存器的状态、从设备的状态以及主设备与从设备之间传输的数据。
[0015] 根据本发明的另一方面,提供了一种设备模拟的实现方法。
[0016] 该方法包括:从设备将鉴别信息提供给与从设备连接的主设备,并解析来自与主设备的命令;根据解析后的命令,从设备通过通用输入输出接口实现与从设备与主设备之间的数据传输,其中,从设备控制从设备的端点缓存器对主设备与从设备之间的传输的数据进行保存。
[0017] 其中,通用输入输出接口的数量为两个,其中,两个通用输入输出接口上的信号组成一对差分信号,并且从设备与主设备之间传输的数据由一对差分信号的电压表示。
[0018] 并且,在从设备向主设备传输数据的情况下,还包括:调节从设备向主设备发送的差分信号的电压,使调节后的电压满足预定要求,其中,预定要求是指通用串行总线USB协议对电压的要求。
[0019] 借助于本发明,能够在设备不具有USB client端控制器硬件的情况下,通过设备芯片的GPIO接口模拟USB,使得主设备(即,该设备所插入的主机,该主机可以包括计算机等)能够将插入的设备(即,从设备)识别为USB设备,并实现主设备与从设备之间的数据传输功能。

附图说明

[0020] 图1是根据本发明实施例的设备模拟的实现装置的框图;
[0021] 图2是根据本发明实施例的设备模拟的实现装置传输的差分信号的电压曲线图;
[0022] 图3是设备模拟的实现装置中通过调压器和电阻对DM和DP线的电压进行调节的示意图;
[0023] 图4是根据本发明实施例的设备模拟的实现装置基于USB协议实现数据传输的消息流程图;
[0024] 图5是根据本发明实施例的设备模拟的实现装置的总线接口模块进行数据发送和接收的流程图;
[0025] 图6是根据本发明实施例的设备模拟的实现方法的流程图。

具体实施方式

[0026] 在相关技术中,不带有USB客户端控制器的设备将不能够被识别为USB设备,针对该问题,本发明考虑到USB通讯要求使用一对差分数据线,作为双向传输的媒介,并且USB1.1协议对USB设备的电气特性有具体的要求,因此,本发明提出采用两个同组通用输入输出(General Purpose Input/Output,简称为GPIO)口传输差分信号,并且当GPIO作为输入时可以获得当前的电压数值作为数据,这样,就能够使家用仪器、电力系统的巡检设备等各种设备能够被识别为USB设备,并采用USB协议实现数据通信,有助于统一设备之间的通信方式。
[0027] 下面将详细描述本发明的实施例。
[0028] 根据本发明的实施例,提供了一种设备模拟的实现装置,该装置可以设置于从设备。
[0029] 如图1所示,根据本发明实施例的设备模拟的实现装置包括:总线接口层模块(还可称为USB BUS Interface Layer)1,用于通过GPIO接口实现从设备连接的主设备与从设备之间的数据传输(包括接收来自主设备的USB总线数据以及向主设备发送USB总线数据);设备层模块(还可称为USB DeviceLayer)2,用于控制从设备的端点缓存器(端点buffer)对主设备与从设备之间的传输的数据进行保存,其中,端点缓存器用于在设备层模块的控制下保存由主设备发送至从设备的数据、以及从设备将要发送至主设备的数据,该模块主要可以支持Bulk和Control两种传输模式;功能层模块(还可称为USBFunction Layer)3,用于对从设备进行枚举,以及解析并执行来自主设备的命令,并且能够实现数据传输协议。
[0030] 通过本发明的上述装置,能够在从设备不具有USB客户端控制器硬件的情况下,通过设备芯片的GPIO接口模拟USB的数据传输,使得主设备(即,该从设备所插入的主机,该主机可以包括计算机等)能够将插入的设备(即,从设备)识别为USB设备,考虑到从设备基带芯片的速率,能够将从设备模拟为低速USB设备并基于USB1.1协议实现主设备与从设备之间的数据传输。
[0031] 其中,总线接口层模块具体可以通过两个GPIO接口实现主设备与从设备之间的数据传输,其中,两个GPIO接口上的信号组成一对差分信号,并且从设备与主设备之间传输的数据的内容由这一对差分信号的电压表示。
[0032] 根据本发明的装置能够使用GPIO接口中断功能来触发从设备接收主设备发送过来的信号,对于GPIO输入功能,可以读取电平信号的高低来识别为0或者1信号;而对于GPIO输出功能,可以读取发送的端点缓存器的内容并转化为高低电平信号传递给主设备端。
[0033] 由于本发明采用GPIO信号的上拉或下拉来实现信号的输出,而USB协议对于信号上升沿下降沿以及电平信号的稳定时间都有严格的时间要求,因此需要调节GPIO扣的电压GPIO的电平的高低转换,考虑到设备芯片基带主频,本发明可以模拟低速USB设备,例如,可以实现USB1.1协议的1.5M/S的传输协议。
[0034] USB协议1.1要求USB电压需要满足图2所示的曲线,即,电压最高值应当达到4.6V,最低值为-1.0V,最高值的持续时间最小应当为60ns,上升沿和下降沿的持续时间应当为4-20ns,一个周期的长度为166.7ns,频率为6MHz。GPIO接口的最高输出电压为3.3V,为了使根据本实施例的USB模拟装置的电压能够满足图2所示的电压要求,在进行USB模拟时,总线接口模块可以采用具有中断检测、输入输出功能的两个同组的GPIO来检测或者输出差分信号,可以采用电阻或调压设备来改变GPIO接口的电压曲线,使电压满足图2所示的要求,并且,这2个GPIO接口可以作为DP和DM,并且可以基于DM和DP识别所模拟的USB设备,例如,在DM上拉时,根据USB协议将从设备识别为低速设备。例如,如图3所示,从设备的基带芯片(baseband)通过DM、DP、以及总线VBUS与个人计算机(即,图3中所示的PC On-The-Go)连接,增加低压降稳定器(Low Drop-Out regulator,简称为LDO)作为调压设备,从而提高输出的电平值,并且可以另加增加两个独立的GPIO(图3中所示的GPIOCTL1和GPIOCTL2)来控制两个LDO的开关,并且LDO与电源管理(Power Management,简称为PM)连接,并且,总线接口模块能够触发中断检测,并在中断检测过程中接收主设备向从设备发送的数据。
[0035] 并且,如图1所示,总线接口层模块1还用于从端点缓存器中读取主设备发送至从设备的数据,并对该数据进行解码和冗余循环校验(CyclicRedundancy Check,简称为CRC),并根据解码后得到的进程标识(PID)向主设备返回正确应答消息(ACK)或错误应答消息(NAK),并对从设备发送给主设备的数据进行编码,此外,该模块还能够对数据收发出错时进行处理。
[0036] 设备层模块2可以用于进行端点缓存器等各个端点的状态、从设备的状态、以及主设备与从设备之间传输的数据的维护。具体地,该设备层模块2可以根据总线数据维护设备的状态(Resume Reset Suspend)、维护两种类型的中断(设备、IN OUT中断)(Enable、判断中断Endpoint)、维护分组(Packet)数据(Frame Count、Current Endpoint、Endpoint FIFO)、以及根据总线数据维护端点的状态(sendstall sentstall FlushFIFO Inpktrdy Mode FIFOFULLFIFONOTEMPTY),该模块可以与总线接口层模块1交互中断要求(InterruptRequest)维护全局变量数值。
[0037] 并且,在根据本实施例的装置中,端点缓存(即,端点Buffer)可以包括EP0、EPIN、和EPOUT三个部分,其中,EP0可用于实现设备的鉴别,EPIN用于实现接收数据,EPOUT用于实现待发送数据的存储,这样,通过接收和发送Buffer的数据,就能够实现USB Bus Layer数据的接收和待发送数据的存储。
[0038] 功 能 层 模 块3 还 能 够 实 现 设 备 枚 举 的 应 用 程 序 编 程 接 口(ApplicationProgramming Interface,简称为API)以及设备读写扇区的API,功能层模块3可以与设备层模块2进行Cmd、API交互。
[0039] 图4是根据本实施例的装置的实现USB数据传输的消息流程图。
[0040] 其中,总线接口层模块中可以单独配置终端服务程序(Interrupt ServiceRoutine,简称为ISR),用于实现终端检测。
[0041] 如图4所示,ISR能够进行USB中断,接收数据并将数据保存到发送/接收缓存区中,之后,可以激活高级ISR(HISR);响应于事件的激活,设备层模块可以查看数据,并读取发送/接收缓存区中的数据,对数据进行内部处理后保存到端点缓存区中,设备层模块向功能层模块发送消息,功能层模块读取端点缓存区中的数据并进行接收处理,之后将接收的数据保存在端点缓存区中,并向设备层模块发送消息;设备层模块将数据填入发送/接收缓存区中传输给ISR进行数据发送,并且将通知消息发送给功能层模块,由功能层模块进行发送结束处理。
[0042] 除了可以采用硬件方式实现上述模块之外,对应于USB协议规范提出的实现框架,可以采用汇编语言编写中断服务程序来实现总线接口层模块的功能。对于设备层模块和功能层模块,可以分别通过线程实现其功能。
[0043] 图5示出了根据本实施例的装置进行数据接收和发送的处理流程图。
[0044] 如图5所示,首先,需要建立三个接收和发送为13个字节的缓存区,设置GPIO为低电平中断,并且可以通过scatter文件设置总线接口模块的汇编代码运行在从设备基带芯片的内部RAM上。
[0045] 低速设备在控制传输时,最大的Payload为8Byte,所以一帧最多的Bit为PID+data+CRC16=8+64+bitstiff+16=88+bitstiff,所以在该层申请(12+1)byte的三个Buffer,存储接收或者发送的数据。1个字节保留8个位的同步信号。
[0046] 在进入中断服务程序,USB总线中断触发,设置ARM指令关闭IRQ、FIQ中断(即,避免中断检测重复执行)。设置GPIO为输入方式,读取电平数据。
[0047] 检测同步信号(Sync)0x000001,如果是Reset信号,则由HISR通知设备层模块;如果是发送给从设备的USB帧,则进行CRC校验、NRZI解码、去除Bitstuff,进行USB帧的解析,包括获取帧类型、数据长度、数据内容。
[0048] 如果是Setup或者Out Token包,则表示该包为主设备发送的数据,其后必然跟随由数据包;之后,对于DATA0/DATA1,查询当前是否有空的Buffer可以存储,如果没有的话,则返回NAK握手信号,如果有,则保留此帧,同时发送HISR给设备层模块。
[0049] 如果USB帧解析后得到的是IN Token包,则表示此时主设备端在请求数据,之后查询发送缓存区是否有空间,如果有,则添加Bitstuff,进行CRC16编码,并进行NRZI编码发送出去;如果没有,则表示从设备的USB客户端侧没有将数据准备好,返回NAK握手信号。
[0050] 如果从设备准备好,可以发送数据,则判断当前是否存在可以发送的数据,如果不存在,则返回NAK握手信号;如果存在,则读取发送包数据,NRZI编码,添加同步信号后进行发送。
[0051] 在返回NAK或发送数据之后,可以使能ARM中断,并且设置GPIO为中断检测引脚。
[0052] 在上述处理中,对该装置需要满足以下时序要求:在传输一帧数据过程中的每位之间的时序要求;在传输时的两帧信号之间的时序要求;从设备对于主设备信号的回馈,比如ACK、NAK的时序要求;对于Reset信号,Suspend信号的采样时序要求。
[0053] 因为本实施例实现的是低速设备1.5M/s,要求每1/1.5M间隔发送一个bit,如果用C语言的等待函数,因为等待时间是按照编译成为汇编代码后的所占据的机器指令周期,然后乘上CPU的1/时钟频率。所以无法精确实现1bit/1.5M,考虑使用ARM汇编语言来接收和发送数据,NOP指令来匹配这样的时钟要求,并且在此过程中,需要关闭所有中断,保证此过程不被外部事务打断,来实现严格的时序要求。
[0054] 在上述处理中,对于中断响应时间需要满足以下要求:所有的数据接收、NRZI编码、Bitstuff解码、端点正确性判断,以及发送握手信号,以及当需要发送数据时都在中断里实现,对于GPIO的中断相应时间有很高的要求,一帧数据前面是同步信号,在因为中断相应时间丢失掉2、3bit后,可以判断出是否为同步信号,假如丢失掉5、6bit后,就无法判断,导致丢失掉正常的数据,因而直接在ARM的中断服务程序中添加服务程序来处理USB数据校验、接收、发送等。所以IRQ的中断反应时间是很关键的一个条件,通常FIQ的响应时间为1.1-1.2us,根据USB低速设备的速度,此时应该是SYNC包的第二位,所以可以读取到SYNC的后几位;
[0055] 对于CPU的运行状态,在运行期间需要禁止CPU进入Sleep,同时也可以禁止动态调频(DCM)的功能,这样可以确保CPU工作在一个特定的频率下。
[0056] 对于任务的执行区域,如果代码在NOR中,取值的时间会比较长,通常是指令运行速度的4-5倍,如果放在内部SRAM中执行的话,可以保证取指的过程不会影响到指令的执行速度,因此汇编代码的执行放在Baseband内部的Ram中。需要注意此代码不能过长,否则很容易超出基带芯片的内部RAM大小。
[0057] 在图5所示的处理中,描述了总线接口层模块的处理,对于设备层模块所实现的处理,首先建立三个端点EP0、EPIN、EPOUT。EP0数据存贮的Buffer为12个字节,EPIN/EPOUT数据存贮的Buffer为16K。
[0058] 在接收到中断HISR发送的消息后,关闭系统动态调频功能;对于接收的USB信号作进一步处理,如果是Reset信号,那么复位设备状态,各端点的数据Buffer以及数据发送接收相应的变量;如果是数据包,将汇编接收的Buffer,进一步解析,提取数据复制到端点的m_dev_rx_buff[16k],释放对应的汇编Buffer,准备接收下一帧数据;如果是数据包,接收到的数据长度为0,出错,不予处理;如果接收到功能层模块的消息,准备发送数据,则对于数据包作进一步处理,包括添加DATA0/DATA1的PID信息;七、打开系统动态调频功能[0059] 对于功能层模块所实现的处理,需要根据Token包的类型,假如在枚举阶段,根据USB协议,功能层模块需要填充端点Buffer,发送消息给设备层模块;假如在文件传输阶段,则调用相应得文件系统函数,存储到Flash或者发送数据到的相应得端点Buffer,发送消息给设备层模块。
[0060] 在开发中可以使用数据存储访问在RAM文件系统的方式代替读取存贮速度都较低的Nor Flash或者Nand Flash,另外需要注意的是在发送数据到Host端时,因为低速的数据包最大的Payload为8个字节,所以需要分多次来传输,并且要打包处理,需要首先回复大量的NAK,告诉Host端仍在正常工作,但目前来不及发送数据,这样会消耗掉BB端的大量处理器资源。同理,在接收Host端的数据时,芯片要频繁切换到中断模式接收数据,也需要消耗掉大量的处理器资源。
[0061] 根据本实施例的装置在Bulk only Transfer时,最大的Payload为8个Byte,所以传输一次数据包占有的Bit为:
[0062] Sync+PID+data+CRC16+EOP+IDLE=8+8+64+bitstiff+16+2+1=99+bitstiff,所以,该装置进行模拟时理论上能达到的最大数据传输率为:
[0063] (1.5M*64/(99+bitstiff))/8*70%效率损耗=8500Byte/S=83KByte/s[0064] 优选地,对于效率损耗包括操作系统调度,其他相对于USB task而言更高优先级的task占用的系统资源等。
[0065] 本发明还提供了一种设备模拟的实现方法。
[0066] 如图6所示,根据本发明的设备模拟的实现方法包括:步骤S601,从设备将鉴别信息提供给与从设备连接的主设备,并解析来自与主设备的命令;步骤S603,根据解析后的命令,从设备通过通用输入输出接口实现与从设备与主设备之间的数据传输,其中,从设备控制从设备的端点缓存器对主设备与从设备之间的传输的数据进行保存。
[0067] 其中,通用输入输出接口的数量为两个,其中,两个通用输入输出接口上的信号组成一对差分信号,并且从设备与主设备之间传输的数据由一对差分信号的电压表示。
[0068] 并且,在从设备向主设备传输数据的情况下,还包括:调节从设备向主设备发送的差分信号的电压,使调节后的电压满足预定要求,其中,预定要求是指通用串行总线USB协议对电压的要求。
[0069] 综上所述,借助于本发明的上述技术方案,能够在从设备不具有USB客户端控制器硬件的情况下,通过设备芯片的GPIO接口模拟USB的数据传输,使得主设备(即,该从设备所插入的主机,该主机可以包括计算机等)能够将插入的设备(即,从设备)识别为USB设备,考虑到从设备基带芯片的速率,能够将从设备模拟为低速USB设备并基于USB 1.1协议实现主设备与从设备之间的数据传输。
[0070] 以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。