发明内容
鉴于现有技术的不足,本发明的目的是要提供一种串行总线桥接方法及串行总线系统。
为了实现上述目的,本发明所采用的技术方案如下:
一种串行总线桥接方法,应用于一可编程逻辑器件CPLD,其包括如下步骤:
A、当主控器访问串行外设接口主机设备时,所述CPLD检测串行外设接口主机设备的CS和CLK信号;
B、待检测到所述CS信号有效时,CPLD向主控器发送IRQ中断信号,以驱动所述主控器将待发送数据写入发送寄存器;
C、在每次检测到上升沿时,将待发送数据逐一发送至串行外设接口主机设备;
D、当待发送数据发送完毕后,向主控器发送IRQ中断信号,以驱动所述主控器将下一个待发送数据写入发送寄存器,并重复上述步骤C和步骤D直至检测到所述CS信号为无效。
所述串行总线桥接方法,其中,所述待检测到所述CS信号有效时具体为:待检测到所述CS信号的电平为低电平。
所述串行总线桥接方法,其中,所述步骤C、所述在每次检测到上升沿时,将待发送数据逐一发送至串行外设接口主机设备具体包括:
C1、检测CLK信号的上升沿;
C2、当第一次检测到CLK信号的上升沿时,将发送寄存器中的待发送数据按照MSB先发的方式发送一个bit;
C3、当第二次检测到CLK信号的上升沿时,将发送寄存器中的待发送数据按照MSB先发的方式发送一个bit,以此类推直至发送寄存器中的待发送数据发送完毕。
所述串行总线桥接方法,其中,所述步骤C、所述在每次检测到上升沿时,将待发送数据逐一发送至串行外设接口主机设备之后还包括:
D01、CPLD读取串行外设接口主机设备的MOSI的电平信号;
D02、在每次检测到下降沿时,接收串行外设接口发送的数据,并将所述接收到的数据保存至接收寄存器。
所述串行总线桥接方法,其中,所述D具体包括:
D1、当带发送数据发送完毕后,CPLD向主控器发送IRQ中断信号;
D2、驱动所述主控器将下一个待发送数据写入发送寄存器,并将写入寄存器内接收到的数据拷贝至内存中;
D3、重复上述步骤C-步骤D2直至检测到所述CS信号为无效。
所述串行总线桥接方法,其中,所述检测到所述CS信号为无效之后还包括:
向主控器发送传输完成的中断IRQ信号,驱动所述主控器接收传输,并停止对发送寄存器以及写入寄存器的操作。
所述串行总线桥接方法,其中,所述待发送数据的长度为8个bit。
所述串行总线桥接方法,其中,所述接收到数据的长度为8个bit,并且所述待发送数据和/或接收到数据携带协议信息以标识有效数据。
一种串行总线系统,其包括主控器、一可编程逻辑器件CPLD以及至少串行外设接口主机设备,其中,所述CPLD存储多条指令,所述指令适于由处理器加载并执行如上任一所述串行总线桥接方法。
所述串行总线系统,其中,所述主控制器通过串行总线与所述CPLD相连接,且所述CPLD为所述主控制器提供IRQ中断信号,所述CPLD通过MOSI数据线、MISO数据线、CLK时钟线以及CS片选线与所述串行外设接口主机设备相连接。
有益效果:与现有技术相比,本发明提供了一种串行总线桥接方法及串行总线系统,所述方法包括:当主控器访问串行外设接口主机设备时,所述CPLD检测串行外设接口主机设备的CS和CLK信号;待检测到所述CS信号有效时,CPLD向主控器发送IRQ中断信号,以驱动所述主控器将待发送数据写入发送寄存器;在每次检测到上升沿时,将待发送数据逐一发送至串行外设接口主机设备;当待发送数据发送完毕后,向主控器发送IRQ中断信号,以驱动所述主控器将下一个待发送数据写入发送寄存器,并重复上述步骤直至检测到所述CS信号为无效。本发明通过CPLD转接实现了主设备与主设备之间的通讯,并且传输效率高以及可靠性稳定。
具体实施方式
本发明提供一种串行总线桥接方法及串行总线系统,为使本发明的目的、技术方案及效果更加清楚、明确,以下参照附图并举实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。 应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。 应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。
下面结合附图,通过对实施例的描述,对发明内容作进一步说明。
请参照图1,图1为本发明提供的串行总线桥接方法的较佳实施例的流程图。所述方法应用于一可编程逻辑器件CPLD,其具体可以包括:
S100、当主控器访问串行外设接口主机设备时,所述CPLD检测串行外设接口主机设备的CS和CLK信号。
具体地,所述主控器可以为嵌入式主控CPU,所述串行外设接口主机设备可以主控器的外围芯片。所述主控器访问串行外设接口主机设备指的是所述主控器与串行外设接口主机设备之间进行SPI传输。在本实施例中,所述串行外设主设备为主机,所述主控器为从机。所述主控器与所述串行外设接口主机设备通过所述CPLD相连接;当所述主控器串行外设接口主机设备,主控器通过本地总线访问,并经过CPLD的转义后发送给至串行外设接口主机设备。
如图2所示,所述主控器通过本地串行总线与所述CPLD相连接,且所述CPLD为所述主控制器提供IRQ(Interrupt Request,中断请求)中断信号,所述CPLD通过MOSI(MasterOutput Slaver Input,主输出从输入)数据线、MISO(Master Input Slaver Output,主输入从输出)数据线、CLK时钟线以及CS(Chip select,片选)片选线与所述串行外设接口主机设备相连接。所述CLK时间线用于串行外设接口主机设备向CPLD发送时钟信号,所述CS片选线用于串行外设接口主机设备向CPLD发送CS片选信号,所述MISO数据线用于CPLD向串行外设接口主机设备发送数据;所述MOSI数据线用于串行外设接口主设备向CPLD发送数据。
所述CPLD采用66MHz的采样时间检测串行外设接口主设备的CS和CLK信号,并且所述采样时间的高电平读取被检测信号的电平。所述被检测信号包括CS信号和CLK信号。
S200、待检测到所述CS信号有效时,CPLD向主控器发送IRQ中断信号,驱动所述主控器将待发送数据写入发送寄存器。
具体地,所述CS信号有效指的是所述CS信号的电平变低,即所述CS信号的电平为低电平。例如,所述高电平为1,低电平为0。所述CS信号有效后,所述CPLD向主控器发送IRQ中断信号,通过所述IRQ中断信号驱动所述主控器将待发送数据写入发送寄存器。在本实施中,所述待发送数据为一个字节数据。所述中断信号驱动主控器将写在发送寄存器中的一个字节数据锁存起来以用于发送。
在本发明的一个实施例中,所述CPLD向主控器发送IRQ中断信号,所述主控器响应中断请求,在中断ISR程序中最先清除中断信号,再将一个字节的待发送数据写入发送寄存器并锁定。这样所述CPLD可以根据检测到的时钟信号将所述锁定的待发送数据转发至串行外设接口主设备。
S300、在每次检测到上升沿时,将待发送数据逐一发送至串行外设接口主机设备。
具体地,所述CLK信号的上述沿指的第一次检测到CLK信号为低电平,第二次检测到CLK信号为高电平;所述CLK信号的下降沿指的是第一检测到CLK信号为高电平,第二检测到CLK信号为低电平。值得说明的,所述第一次检测和第二检测指的是相连接的两次检测,所述第一次检测为前一次检测,所述第二次检测为当前检测。
示例性的,所述在每次检测到上升沿时,将待发送数据逐一发送至串行外设接口主机设备具体包括:
S301、检测CLK信号的上升沿;
S302、当第一次检测到CLK信号的上升沿时,将发送寄存器中的待发送数据按照MSB先发的方式发送一个bit;
S303、当第二次检测到CLK信号的上升沿时,将发送寄存器中的待发送数据按照MSB先发的方式发送一个bit,以此类推直至发送寄存器中的待发送数据发送完毕。
具体地,所述第一次检测到指的是当所述CS信号有效时,CLK信号第一次出现上升沿。所述第二次检测到指的是与第一次检测到相邻的上升沿。也就是说,每次检测到CLK信号出现上升沿时,均向将发送寄存器中的待发送数据的一个bit的数据发送至串行外设接口主设备。在本实施例中,所述一个字节(8bit)的带发送数据按照MSB先发的方式进行发送,也就是说,按照最高有效位先发的方式进行发送。在本实施例的变形实施例中,还可以采用其他方式进行发送,例如,采用LSB(最低有效位)先发的方式等。
在本发明的一个实施例中,所述CPLD将主控器的数据发送至串行外设接口主设备的同时,还接收串行外设接口主设备发送的数据,并将所述接收到的数据发送至主控设备。相应的,所述在每次检测到上升沿时,将待发送数据逐一发送至串行外设接口主机设备之后还包括:
S041、CPLD读取串行外设接口主机设备的MOSI的电平信号;
S042、在每次检测到下降沿时,接收串行外设接口发送的数据,并将所述接收到的数据保存至接收寄存器。
具体地,所述CPLD接收串行外设接口发送的数据与CPLD发送主控器的待发送数据的方式相同,并且每次均处理一个bit。也就是说,当CPLD将主控器写入发送寄存器内的一个bit数据发送至串行外设接口主设备的同时,接收串行外设接口主设备发送的一个bit数据,并将所述接收到的一个bit数据存入写入寄存器。当发送寄存器内的8bit数据全部发送至串行外设接口主设备时,写入寄存器内被写入8bit数据。在实际应用中,所述带发送数据和/或接收到数据中均可带有协议信息,所述协议信息以0xe7作为数据有效的标识。所述两个0xe7之间的数据都是有效数据,其它则无效,这样可以同时接收和发送不同长度的数据。
S400、当待发送数据发送完毕后,向主控器发送IRQ中断信号,以驱动所述主控器将下一个待发送数据写入发送寄存器,并重复上述步骤C和步骤D直至检测到所述CS信号为无效。
具体地,所述待发送数据发送完毕指的是发送寄存器内锁定的一个字节8bit数据发送完毕。此时,所述CPLD向主控器发送IRQ中断信号。相应的,所述主控CPU响应中断请求,在中断ISR程序中最先清除中断信号,并下一字节的待发送数据写入发送寄存器,同时将写入寄存器的8bit数据拷贝到内存中。所述CPLD再次将发送数据寄存器中的数据锁存起来,准备下一字节的发送。
示例性的,所述待发送数据发送完毕后,向主控器发送IRQ中断信号,以驱动所述主控器将下一个待发送数据写入发送寄存器,并重复上述步骤C和步骤S400直至检测到所述CS信号为无效具体包括:
S401、当带发送数据发送完毕后,CPLD向主控器发送IRQ中断信号;
S402、驱动所述主控器将下一个待发送数据写入发送寄存器,并将写入寄存器内接收到的数据拷贝至内存中;
S403、重复上述步骤S300-步骤S402直至检测到所述CS信号为无效。
具体地,驱动所述主控器将下一个带发送数据写入发送寄存器之前还可以判断是否存在下一个待发送数据,如果存在待发送数据则将下一个待发送数据写入发送寄存器,如果未存在待发送数据,则传输完毕。
在本发明的另一个实施例中,所述检测到所述CS信号为无效之后还包括:
S500、向主控器发送传输完成的中断IRQ信号,驱动所述主控器接收传输,并停止对发送寄存器以及写入寄存器的操作。
具体地,所述CPLD检测到了CS片选信号拉高变成无效,表示此次传输完成。此时,所述CPLD不再检测时钟信号,并且向主控器发送传输完成中断IRQ,主控器响应中断请求,清除中断信号,结束此次传输,并且不再向发送寄存器写入数据,也不在保存接收数据。
为了进一步说明本发明的串行总线桥接方法,下面结合串行外设接口主设备时序与IRQ的关系图具体说明数据发送与接收数据的过程。
如图3所示,在1的位置,CPLD检测到CS信号变低有效,驱动主控器向发送寄存器内写入一个字节数据并锁存起来;
在2的位置,CPLD检测到CLK信号由低变成高的上升沿,将发送寄存器中的数据按MSB先发的方式发送1bit,并在每检测到一个时钟上升沿时发送1bit直到8bit都发送完毕;同时在发送的过程中,读取MOSI的电平高低以及接收8bit数据,并将接收到8bit数据保存至写入寄存器;
在3的位置,CPLD向主控CPU发送字节传输完成中断,IRQ信号变低;主控CPU响应中断请求,在中断ISR程序中最先清除中断信号,并写入下一个8bit的待发送数据到发送寄存器,并且从写入寄存器中将8bit数值拷贝到内存中;
在4的位置,重复3位置的操作步骤;
在5的位置,CPLD检测到了CS片选信号拉高变成无效,CPLD不再检测时钟信号,并且向主控CPU发送传输完成中断IRQ;主控CPU响应中断请求,清除中断信号,结束此次传输。
值得说明的,当要传输2个以上的字节,仅需重复3位置的操作即可。对于传输数据的长度,这里不做具体限制。
本发明还提供了一种串行总线系统,如图2所示,其包括主控器、一可编程逻辑器件CPLD以及至少串行外设接口主机设备,所述主控制器通过串行总线与所述CPLD相连接,且所述CPLD为所述主控制器提供IRQ中断信号,所述CPLD通过MOSI数据线、MISO数据线、CLK时钟线以及CS片选线与所述串行外设接口主机设备相连接。所述CPLD存储多条指令,所述指令适于由处理器加载并执行如上任一所述串行总线桥接方法。
上述串行总线系统的各个模块在上述方法中已经详细说明,在这里就不再一一陈述。
在本发明所提供的实施例中,应该理解到,所揭露的系统和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。