背景技术
在对通信速率要求较高时,串行外设接口(SPI,Serialperipheralinterface)常常被选用来作为系统级处理器间的通信方式。SPI作为一种高速的、全双工、同步的通信总线,其通信速率基本可以按照通信双方处理器的处理速度来设定。SPI采用主从工作方式,即在这种模式下通常有一个主设备和一个或多个从设备。其中,主设备控制数据传输,从设备配合主设备完成传输任务。从硬件资源上,SPI通常采用四线模式进行双向通信,在整个通信过程中信号线只能由主设备控制,从设备对通信过程没有控制作用。
但这种通信方式主要存在如下缺点:1.缺少组帧机制;2.通信过程中没有指定的数据流,缺少确认是否收到数据的应答机制;3.无任何校验,缺少控制传输差错的机制;4.缺少对数据流的控制;5.缺少对数据链路的维护机制,无建立、维持、释放的管理机制等。
为改善上述缺点,现有的研究有的通过增加一条握手信号线用于从设备通知主设备处理结束。或者,在不增加任何握手信号线的情况下利用SPI全双工的特点实现一定的协议来完成通信。即,从设备每次接收到主设备发过来的一个字节的数据后根据既定的协议进行解析处理,并返回一个字节的数据通知当前处理的状态。该返回的单字节数据被放于发送缓冲器中,待主设备发送下一个字节的数据的同时把上一个从设备返回的字节读回去。同时,从设备根据新接收的数据进行相应处理后把下一个要返回的数据放于发送缓冲器中,待主设备来读取,如此周而复始直至一帧数据发送结束。
上述方案中,对于增加握手信号线的情况,在某些情况下受到硬件资源的制约无法增加这样的信号线,因而其受硬件资源的限制较大。
而对于上述不增加任何握手信号线的情况,其通信能够成功的前提是:在主设备开始下一个字节的传输前,从设备已处理好上一个字节数据并准备好表示处理状态的返回数据。为了使得通信成功,目前的处理方式是:主设备只能在向从设备传输前后两个字节的数据时保持足够的时间间隔,以确保从设备有充足的时间进行数据处理并准备好要返回主设备的数据。但是往往主设备很难按照要求的合适的时间间隔传输数据,要么间隔时间过大,大大降低了通信速度,要么时间间隔太小无法满足要求的时间间隔。另一方面,当从设备负载变化时,要确定一个合理的时间间隔往往是比较困难的。
具体实施方式
在下面的描述中,阐述了许多具体细节以便使所属技术领域的技术人员更全面地了解本发明。但是,对于所属技术领域内的技术人员明显的是,本发明的实现可不具有这些具体细节中的一些。此外,应当理解的是,本发明并不限于所介绍的特定实施例。相反,可以考虑用下面的特征和要素的任意组合来实施本发明,而无论它们是否涉及不同的实施例。因此,下面的方面、特征、实施例和优点仅作说明之用而不应被看作是权利要求的要素或限定,除非在权利要求中明确提出。
如前述提及的,现有技术为了不增加任何握手信号线而提供的解决方案可能面临通信失败的问题。而为了使得通信成功,又不得不设置时间间隔,但显然并不能很好地解决问题。对此,本发明的发明人认为:造成通信失败的瓶颈在于从设备的处理能力无法满足“在主设备下一个字节数据传输前,准备好表示上一个字节数据处理状态的返回数据”的要求。而设置时间间隔的方式由于仍然依赖于从设备的处理能力,并不能很好地解决问题。而通过对现有这种解决方案的进一步分析后发现,只要主设备在每一次数据发送完时能够由从设备处获得有效数据,其就会继续向从设备发送数据,从而通信过程可以继续。因此,本发明的发明人提出:在从设备的处理能力无法改变的情况下,可以通过在一开始在从设备处预设一个有效数据作为响应主设备第一次数据发送的返回数据,使得主设备可以继续第二次数据发送,而利用主设备发送完第二次数据前的一段时间来处理第一次接收的数据并得到返回数据,依此类推,以此来使得通信过程持续。
参照图1所示,根据本发明基于SPI的通信方法的一种实施方式,其具体说明如下:
首先,均至少包括移位寄存器的主从设备各自进行初始化操作。例如,主设备的初始化可以包括准备起始数据。
接下来,主设备开始向从设备发送起始数据,在此期间,从设备将其移位寄存器中的初始数据返回给主设备。并且,从设备在接收到起始数据后先在其移位寄存器中准备好预设有效数据,然后开始对起始数据进行处理。可选地,从设备处理起始数据的操作和在其移位寄存器中准备预设有效数据的操作也可以是并行执行的。
而对于主设备,如上述的,当主设备发送完起始数据后,其已通过移位寄存器获得从设备返回的数据。主设备收到的该从设备返回数据是从设备移位寄存器中的初始数据,无任何实际的意义,主设备完全可以忽略。
当主设备准备好后,其会开始向从设备发送第二次数据。此时,从设备已经在其移位寄存器中准备好了预设有效数据。而利用主设备发送第二次数据的时间,从设备可以处理完起始数据。在此期间,从设备将其移位寄存器中的预设有效数据返回给主设备。并且,从设备在接收到第二次数据后立即在其移位寄存器中准备好对应处理起始数据状态的真实返回数据,并可以继续开始处理所获得的第二次数据。同样地,准备对应处理起始数据状态的真实返回数据和处理第二次数据也可以是并行执行的。
而对于主设备,如上述的,当主设备发送完第二次数据后,其已通过移位寄存器获得从设备返回的预设有效数据,则当主设备获得该有效数据后,则会开始准备第三次的数据发送。
当主设备准备好后,其会开始向从设备发送第三次数据。此时,从设备已经在其移位寄存器中准备好了对应处理起始数据状态的真实返回数据。而利用主设备发送第三次数据的时间,从设备可以处理完第二次数据。在此期间,从设备将其移位寄存器中的对应处理起始数据状态的真实返回数据返回给主设备。并且,从设备在接收到第三次数据后立即在其移位寄存器中准备好对应处理第二次数据状态的真实返回数据,并可以继续开始处理所获得的第三次数据。同样地,准备对应处理第二次数据状态的真实返回数据和处理第三次数据也可以是并行执行的。
依此类推,当主设备开始向从设备发送第N次数据时,从设备已经在其移位寄存器中准备好了对应处理第N-2次数据状态的真实返回数据。从设备利用这段时间可以处理完第N-1次数据。在此期间,从设备将其移位寄存器中的对应处理第N-2次数据状态的真实返回数据返回给主设备。并且,从设备在接收到第N次数据后立即在其移位寄存器中准备好对应处理第N-1次数据状态的真实返回数据,并可以继续开始处理所获得的第N次数据。
通过上述实施方式,使得从设备的可用处理时间在原来的两次数据发送的间隔(或者没有间隔)的基础上又增加了主设备发送一次数据的时间。因而,明显增加了从设备处理数据的宽裕度。而在通常情况下,从设备在这段时间内已足够处理完数据并准备好真实的返回数据。从而,在每一次主设备发送完本次数据时,从设备都能够准备好上一次数据的返回数据。并在主设备下次再发送数据时从设备将该返回数据传送给主设备。即,实质上用相对现有技术再滞后一个字节的代价(若以主设备每次发送一个字节数据为例)来提高整体的通信成功率和效率。因此,相对现有技术显然能在不增加握手信号线的前提下,更好地解决问题。
以下以一典型的SPI主从设备的结构为例,说明本发明通信方法如何在该结构中实现通信的过程。
参照图2所示,该典型的SPI主从设备的结构包括:处理器1及处理器2,其中处理器1作为SPI主设备,处理器2作为SPI从设备。处理器1及处理器2的硬件结构相同,均包括:16位(Bit)的串行发送缓冲器SPITXBUF、16位的移位寄存器SPIDAT及16位的串行输入缓冲器SPIRXBUF。
整个结构采用典型的四线模式进行双向通信,在整个通信过程中,时钟信号线由处理器1控制。处理器1和处理器2之间的数据传输通过各自的移位寄存器实现。即,当处理器1向处理器2发送数据时,会先通过软件在其串行发送缓冲器中设置好待发送数据,其后该待发送数据会经由处理器1的硬件从其串行发送缓冲器传输至其移位寄存器中。随后,经由各自的SPISIMO接口,在处理器1的控制下,处理器1的移位寄存器中的待发送数据会被传输至处理器2的移位寄存器中。然后,处理器2的硬件再将其移位寄存器中的数据传输至其输入缓冲器中,以完成本次发送数据的过程。相应地,当处理器2向处理器1发送数据时,会先通过软件在其串行发送缓冲器中设置好待发送数据,其后该待发送数据会经由处理器2的硬件从其串行发送缓冲器传输至其移位寄存器中。随后,经由各自的SPISOMI接口,在处理器1的控制下,处理器2的移位寄存器中的待发送数据会被传输至处理器1的移位寄存器中。然后,处理器1的硬件再将其移位寄存器中的数据传输至其输入缓冲器中,以完成本次发送数据的过程。
继续参照图3所示,无论是处理器1向处理器2发送数据,还是处理器2向处理器1发送数据,发送的数据小于16位时都采用左对齐,首先发送数据高位,而接收的数据小于16位时都采用右对齐,通过软件屏蔽无效的高位字节。
结合参照图2和图4所示,假设主从设备都已完成了初始化。主设备(处理器1)的串行发送缓冲器中已设置了起始数据的值为0xA5,则主设备的移位寄存器也将通过硬件自动获得起始数据0xA5。随后,经由各自的SPISIMO接口,起始数据0xA5被传输至从设备(处理器2)的移位寄存器中,即从设备的移位寄存器的值为0xA5。从设备的串行输入缓冲器也将通过硬件自动从移位寄存器中获得数据。而主设备如此前说明的,也将获得从设备返回的其移位寄存器中的初始数据(假设从设备移位寄存器中的初始数据为00)如图4上一图所示。
而对于从设备,其在输入缓冲器获得数据后,在开始处理起始数据之前或开始处理起始数据时,在其串行发送缓冲器中先行设置预设有效数据的值为0xFF(在图4上二图中以FF(1)表示),该值用于表示本次数据接收正确(虽然此时起始数据尚未处理完)。即,以预设有效数据来代替对起始数据处理后的真实返回数据,以节约准备真实返回数据的时间。则,从设备的移位寄存器将自动获得预设有效数据0xFF(在图4上二图中以FF(1)表示)。
在此情况下,即使主设备在发送完起始数据0xA5后立即准备发送第二个数据0xXX(已在主设备的串行发送缓冲器中设置了数据值,在图4上二图中以XX表示),由于从设备的移位寄存器中已有预设有效数据0xFF,主设备在发送完第二个数据0xXX后,将能够通过从设备的移位寄存器收到期望数据,如图4下一图所示,因此主从设备的通信能够继续进行。
另一方面,在主设备发送第二个数据0xXX期间,从设备在对起始数据0xA5处理完后,准备好了真实的返回数据0xFF。并在从设备接收到第二个数据0xXX后,立即在其串行发送缓冲器中设置真实的返回数据为0xFF(在图4下二图中以FF(2)表示,以区分于预设有效数据)。则,从设备的移位寄存器将自动获得该真实返回数据(在图4下二图中以FF(2)表示)。
在此情况下,主设备仍然可以立即准备发送第三个数据,而同时从设备进行对所收到的第二个数据0xXX的处理,由于从设备的移位寄存器中已有对应起始数据的真实返回数据0xFF,主设备在发送完第三个数据后,仍将能够通过从设备的移位寄存器收到期望数据,因此主从设备的通信仍能够继续进行。
依此类推,则主从设备间的全部通信过程可以就此完成。对于主设备,只要其发送完一个数据的时间大于从设备处理收到的数据的时间,即使两次发送数据之间无任何时间间隔,其和从设备间的通信仍然可以顺利进行。仅仅在于,主设备发送数据后收到的从设备对该数据处理的返回数据将滞后两个字节。但这个影响远小于原来设置时间间隔对整体通信效率的影响,因此相对现有技术反而能提高整体通信效率。
虽然本发明已以较佳实施例披露如上,但本发明并非限定于此。任何本领域技术人员,在不脱离本发明的精神和范围内所作的各种更动与修改,均应纳入本发明的保护范围内,因此本发明的保护范围应当以权利要求所限定的范围为准。