MCU与多个FPGA使用SPI进行实时全双工可靠通信的方法

阅读: 评论:0

著录项
  • CN202010675004.5
  • 20200714
  • CN111966623A
  • 20201120
  • 西安爱生无人机技术有限公司
  • 袁钟达;樊立明;杨翠翠;杨健;王剑飞;李晨曦;李泽辰;李海飞;李龙洲;黄迟;张立雄;王磊;刘洋
  • G06F13/42
  • G06F13/42

  • 陕西省西安市高新区科技五路10号
  • 陕西(61)
  • 西安智邦专利商标代理有限公司
  • 王少文
摘要
本发明公开了一种MCU与多个FPGA使用SPI进行实时全双工可靠通信的方法,以解决现有技术没有充分利用SPI全双工及总线的特性,无法实时可靠传输不定长数据,且MCU与FPGA的通信速度未得到有效提高的问题。本发明的MCU端作为主机通过SPI向多个FPGA端不断循环发送子数据,多个FPGA端作为从机在收到主机的使能信号后,也通过SPI向MCU端不断循环发送子数据。双方接收到子数据后根据第1字节判断数据性质,无效则直接丢弃,重发申请则重新发送子数据,有效则判断校验位是否正确,不正确则申请重发,正确则根据第2~3字节计算帧数据长度,并组成完整的一帧数据。
权利要求

1.一种MCU与多个FPGA使用SPI进行实时全双工可靠通信的方法,其特征在于:MCU端与多个FPGA端通过SPI同时进行步骤1和2;

步骤1、MCU端向多个FPGA端发送数据;

步骤1.1、MCU端判断是否需要发送帧数据;若是,则MCU端将帧数据按照传输协议的数据格式构建多个子数据;若否,则MCU端将任意数据按照传输协议的数据格式构建多个子数据;所述子数据的长度为M;所述传输协议的数据格式如下:第1字节为数据性质,第2~3字节为帧数据长度,第4~(M-1)字节为所发送数据,第M字节为校验位;所述数据性质包括有效数据、无效数据和重发申请;其中,M≥5;

步骤1.2、MCU端作为主机通过SPI向多个FPGA端不断循环发送子数据;

步骤1.3、每个FPGA端接收子数据,并根据第1字节判断数据性质;若数据性质为有效,执行步骤1.4;若数据性质为无效,结束;若数据性质为重发申请,则重新发送子数据;

步骤1.4、FPGA端判断第M字节是否正确;若是,执行步骤1.5;若否,向MCU端发送指令申请重发;

步骤1.5、FPGA端根据第2~3字节计算帧数据长度;

步骤1.6、FPGA端根据帧数据长度,将多个子数据中的第4~(M-1)字节依次组成完整的一帧数据,结束;

步骤2、多个FPGA端向MCU端发送数据;

步骤2.1、FPGA端判断是否需要发送帧数据;若是,则FPGA端将帧数据按照传输协议的数据格式构建多个子数据;若否,则FPGA端将任意数据按照传输协议的数据格式构建多个子数据;所述子数据的长度为M;所述传输协议的数据格式如下:第1字节为数据性质,第2~3字节为帧数据长度,第4~(M-1)字节为所发送数据,第M字节为校验位;所述数据性质包括有效数据、无效数据和重发申请;其中,M≥5;

步骤2.2、多个FPGA端作为从机通过SPI向MCU端不断循环发送子数据;

步骤2.3、MCU端接收子数据,并根据第1字节判断数据性质;若数据性质为有效,执行步骤2.4;若数据性质为无效,结束;若数据性质为重发申请,则重新发送子数据;

步骤2.4、MCU端判断第M字节是否正确;若是,执行步骤2.5;若否,向FPGA端发送指令申请重发;

步骤2.5、MCU端根据第2~3字节计算帧数据长度;

步骤2.6、MCU端根据帧数据长度,将多个子数据中的第4~(M-1)字节依次组成完整的一帧数据,结束。

2.根据权利要求1所述的MCU与多个FPGA使用SPI进行实时全双工可靠通信的方法,其特征在于:

所述步骤1.1中,MCU端有帧数据要发送时,子数据的第1字节数据性质为有效数据;MCU端没有帧数据要发送时,子数据的第1字节数据性质为无效数据;

所述步骤2.1中,FPGA端有帧数据要发送时,子数据的第1字节数据性质为有效数据;FPGA端没有帧数据要发送时,子数据的第1字节数据性质为无效数据。

3.根据权利要求2所述的MCU与多个FPGA使用SPI进行实时全双工可靠通信的方法,其特征在于:

所述步骤1.1中,有效数据为0xAA,无效数据为0xAB,重发申请为0xAC;

所述步骤2.1中,有效数据为0xAD,无效数据为0xAE,重发申请为0xAF。

4.根据权利要求3所述的MCU与多个FPGA使用SPI进行实时全双工可靠通信的方法,其特征在于:

所述步骤1.1中,M=140;

所述步骤2.1中,M=140。

5.根据权利要求4所述的MCU与多个FPGA使用SPI进行实时全双工可靠通信的方法,其特征在于:

所述步骤1.2中,MCU端使用DMA循环发送子数据。

6.根据权利要求1至5任一所述的MCU与多个FPGA使用SPI进行实时全双工可靠通信的方法,其特征在于:

所述FPGA端根据MCU端的片选高低使能接收子数据,具体步骤如下:

当MCU端的片选为低电平时,FPGA端在时钟的第一个上升沿接收子数据,在时钟的第一个下降沿将子数据存入移位寄存器中。

7.根据权利要求6所述的MCU与多个FPGA使用SPI进行实时全双工可靠通信的方法,其特征在于:

所述SPI主频为84MHz。

说明书
技术领域

本发明涉及一种MCU与多个FPGA使用SPI进行实时全双工可靠通信的方法。

在通信领域,使用FPGA联合其他架构的芯片处理数据是常见场景,而SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的、全双工、同步的通信总线,其占用引脚数较少,数据传输速率较高,逻辑相对超高速接口来说较为简单,因此,可用于MCU与FPGA进行全双工通信。

目前,MCU与多个FPGA间使用SPI主要是进行寄存器的读写及数据的连续读取,并没有充分利用其全双工及总线的特性,无法实时可靠传输不定长数据,且MCU与FPGA的通信速度未得到有效提高,具体从以下三方面进行说明:

(1)实时全双工

SPI通信受限于主从关系,在主机发送数据的时候,主机同时读取数据,在主机不发送数据的时候,从机无法发送数据,在主机与多个从机相连时无法有效实时双工通信。

(2)可靠传输不定长数据

主机发送数据的同时读取从机发送的数据,在不知道从机发送数据长度的情况下无法准确接收全部数据,且SPI没有检错机制,无法进行可靠传输。

(3)MCU与FPGA的通信速度

MCU通过SPI向FPGA发送数据,根据SPI的模式及协议的不同,FPGA接收数据的速度不同,只有合适的模式及协议才能有效提高通信速度。

本发明的目的是解决现有技术中存在的MCU与多个FPGA间使用SPI主要是进行寄存器的读写及数据的连续读取,并没有充分利用其全双工及总线的特性,无法实时可靠传输不定长数据,且MCU与FPGA的通信速度未得到有效提高的问题,而提供了一种MCU与多个FPGA使用SPI进行实时全双工可靠通信的方法。

为达到上述目的,本发明所采用的技术方案为:

一种MCU与多个FPGA使用SPI进行实时全双工可靠通信的方法,其特殊之处在于:MCU端与多个FPGA端通过SPI同时进行步骤1和2;

步骤1、MCU端向多个FPGA端发送数据;

步骤1.1、MCU端判断是否需要发送帧数据;若是,则MCU端将帧数据按照传输协议的数据格式构建多个子数据;若否,则MCU端将任意数据按照传输协议的数据格式构建多个子数据;所述子数据的长度为M;所述传输协议的数据格式如下:第1字节为数据性质,第2~3字节为帧数据长度,第4~(M-1)字节为所发送数据,第M字节为校验位;所述数据性质包括有效数据、无效数据和重发申请;其中,M≥5;

步骤1.2、MCU端作为主机通过SPI向多个FPGA端不断循环发送子数据;

步骤1.3、每个FPGA端接收子数据,并根据第1字节判断数据性质;若数据性质为有效,执行步骤1.4;若数据性质为无效,结束;若数据性质为重发申请,则重新发送子数据;

步骤1.4、FPGA端判断第M字节是否正确;若是,执行步骤1.5;若否,向MCU端发送指令申请重发;

步骤1.5、FPGA端根据第2~3字节计算帧数据长度;

步骤1.6、FPGA端根据帧数据长度,将多个子数据中的第4~(M-1)字节依次组成完整的一帧数据,结束;

步骤2、多个FPGA端向MCU端发送数据;

步骤2.1、FPGA端判断是否需要发送帧数据;若是,则FPGA端将帧数据按照传输协议的数据格式构建多个子数据;若否,则FPGA端将任意数据按照传输协议的数据格式构建多个子数据;所述子数据的长度为M;所述传输协议的数据格式如下:第1字节为数据性质,第2~3字节为帧数据长度,第4~(M-1)字节为所发送数据,第M字节为校验位;所述数据性质包括有效数据、无效数据和重发申请;其中,M≥5;

步骤2.2、多个FPGA端作为从机通过SPI向MCU端不断循环发送子数据;

步骤2.3、MCU端接收子数据,并根据第1字节判断数据性质;若数据性质为有效,执行步骤2.4;若数据性质为无效,结束;若数据性质为重发申请,则重新发送子数据;

步骤2.4、MCU端判断第M字节是否正确;若是,执行步骤2.5;若否,向FPGA端发送指令申请重发;

步骤2.5、MCU端根据第2~3字节计算帧数据长度;

步骤2.6、MCU端根据帧数据长度,将多个子数据中的第4~(M-1)字节依次组成完整的一帧数据,结束。

进一步地,所述步骤1.1中,MCU端有帧数据要发送时,子数据的第1字节数据性质为有效数据;MCU端没有帧数据要发送时,子数据的第1字节数据性质为无效数据;

所述步骤2.1中,FPGA端有帧数据要发送时,子数据的第1字节数据性质为有效数据;FPGA端没有帧数据要发送时,子数据的第1字节数据性质为无效数据。

进一步地,所述步骤1.1中,有效数据为0xAA,无效数据为0xAB,重发申请为0xAC;

所述步骤2.1中,有效数据为0xAD,无效数据为0xAE,重发申请为0xAF。

进一步地,所述步骤1.1中,M=140;

所述步骤2.1中,M=140。

进一步地,所述步骤1.2中,MCU端使用DMA循环发送子数据。

进一步地,所述FPGA端根据MCU端的片选高低使能接收子数据,具体步骤如下:

当MCU端的片选为低电平时,FPGA端在时钟的第一个上升沿接收子数据,在时钟的第一个下降沿将子数据存入移位寄存器中。

进一步地,所述SPI主频为84MHz。

本发明相比现有技术的有益效果是:

(1)本发明提供的MCU与多个FPGA使用SPI进行实时全双工可靠通信的方法,通过MCU端不断循环向多个FPGA端发送子数据,使得FPGA端也能够实时发送子数据,从而达到MCU与多个FPGA间通过SPI进行实时全双工通信的目的;通过按照一定的数据格式构建子数据,可确定子数据的数据性质、数据正误、帧数据长度,从而提高传输不定长数据的可靠性;

(2)MCU端使用DMA循环发送子数据,既不会大量占用资源,又可以提高传输实时性;

(3)MCU端使能SPI模式为时钟空闲时低电平,第一个边沿开始采样,该模式可有效提升FPGA接收数据的速度。

图1是本发明MCU与多个FPGA使用SPI进行实时全双工可靠通信的方法中MCU与多个FPGA连接示意图;

图2是本发明方法中MCU端向多个FPGA端发送数据的流程图;

图3是本发明方法中FPGA端向MCU端发送数据的流程图;

图4是本发明方法中FPGA端接收子数据的时序图。

下面结合附图和具体实施方式对本发明进行详细说明。

本发明提供的一种MCU与多个FPGA使用SPI进行实时全双工可靠通信的方法,MCU与多个FPGA相连,如图1所示,MCU为主机,FPGA为从机,MCU与多个FPGA间使用SPI进行通信。

SPI的时钟相位(CPHA)和时钟极性(CPOL)分别可以为0或1,对应的4种组合构成了SPI的4种模式(mode),分别为:

Mode 0:CPOL=0,CPHA=0;

Mode 1:CPOL=0,CPHA=1;

Mode 2:CPOL=1,CPHA=0;

Mode 3:CPOL=1,CPHA=1。

时钟极性CPOL,即SPI空闲时,时钟信号SCLK的电平(1:空闲时高电平;0:空闲时低电平);

时钟相位CPHA,即SPI在SCLK第几个边沿开始采样(0:第一个边沿开始;1:第二个边沿开始)。

本实施例中,MCU端使能SPI模式选用Mode 0,即时钟空闲时低电平,在时钟第一个上升沿发送和读取子数据,以便于FPGA端发送和读取子数据。

MCU端与多个FPGA端通过SPI同时进行步骤1和2。

步骤1、MCU端向多个FPGA端发送数据,流程如图2所示。

步骤1.1、MCU端判断是否需要发送帧数据;若是,则MCU端将帧数据按照传输协议的数据格式构建多个子数据;若否,则MCU端将任意数据按照传输协议的数据格式构建多个子数据;所述子数据的长度为M;所述传输协议的数据格式如下:第1字节为数据性质,第2~3字节为帧数据长度,第4~(M-1)字节为所发送数据,第M字节为校验位;所述数据性质包括有效数据、无效数据和重发申请;其中,M≥5。

本实施例中,MCU端发送子数据的长度M=140,数据格式如下表所示:

MCU端有帧数据要发送时,子数据的第1字节数据性质为有效数据,具体为0xAA;MCU端没有帧数据要发送时,子数据的第1字节数据性质为无效数据,具体为0xAB;MCU端需要FPGA端重新发送时,子数据的第1字节数据性质为重发申请,具体为0xAC。

步骤1.2、MCU端作为主机通过SPI向多个FPGA端不断循环发送子数据。

MCU端使用DMA循环发送子数据,DMA(Direct Memory Access,直接存储器存取),用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输,可以提高传输实时性。MCU端设置SPI主频为84MHz,每次发送140字节,每次发送时间为140*8*1000/84000000=0.013ms。这样当有一个FPGA端有子数据要发送时,延迟为0.013ms,当有多达10个FPGA端有子数据要发送时,最大延迟为0.013ms*10=0.13ms,可以达到实时性。

步骤1.3、每个FPGA端接收子数据,其接收子数据的时序如图4所示。FPGA端作为从机,根据主机的片选高低使能运行,当MCU端的片选为低电平时,FPGA端在时钟的第一个上升沿接收子数据,在时钟的第一个下降沿将子数据存入移位寄存器中。这样在主机发送子数据后,只有半个周期的延迟从机就能对子数据进行数据处理,半个周期的时间为1/84MHz/2=6ns。

FPGA端根据第1字节判断数据性质;若数据性质为有效,执行步骤1.4;若数据性质为无效,则直接丢弃,结束;若数据性质为重发申请,则重新发送子数据。

步骤1.4、FPGA端判断第M字节是否正确;若是,执行步骤1.5;若否,向MCU端发送指令申请重发。

步骤1.5、FPGA端根据第2~3字节计算帧数据长度。

步骤1.6、FPGA端根据帧数据长度,将多个子数据中的第4~139字节依次组成完整的一帧数据,结束。

步骤2、多个FPGA端向MCU端发送数据,流程如图3所示。

步骤2.1、FPGA端判断是否需要发送帧数据;若是,则FPGA端将帧数据按照传输协议的数据格式构建多个子数据;若否,则FPGA端将任意数据按照传输协议的数据格式构建多个子数据;所述子数据的长度为M;所述传输协议的数据格式如下:第1字节为数据性质,第2~3字节为帧数据长度,第4~(M-1)字节为所发送数据,第M字节为校验位;所述数据性质包括有效数据、无效数据和重发申请;其中,M≥5。

本实施例中,FPGA端发送子数据的长度M=140,数据格式如下表所示:

FPGA端有帧数据要发送时,子数据的第1字节数据性质为有效数据,具体为0xAD;FPGA端没有帧数据要发送时,子数据的第1字节数据性质为无效数据,具体为0xAE;FPGA端需要MCU端重新发送时,子数据的第1字节数据性质为重发申请,具体为0xAF。

步骤2.2、多个FPGA端作为从机通过SPI向MCU端不断循环发送子数据。

步骤2.3、MCU端接收子数据,并根据第1字节判断数据性质;若数据性质为有效,执行步骤2.4;若数据性质为无效,则直接丢弃,结束;若数据性质为重发申请,则重新发送子数据。

步骤2.4、MCU端判断第M字节是否正确;若是,执行步骤2.5;若否,向FPGA端发送指令申请重发。

步骤2.5、MCU端根据第2~3字节计算帧数据长度。

步骤2.6、MCU端根据帧数据长度,将多个子数据中的第4~(M-1)字节依次组成完整的一帧数据,结束。

本文发布于:2023-04-14 03:28:09,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/4/86264.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图