CN111966623A - Mcu与多个fpga使用spi进行实时全双工可靠通信的方法 - Google Patents
Mcu与多个fpga使用spi进行实时全双工可靠通信的方法 Download PDFInfo
- Publication number
- CN111966623A CN111966623A CN202010675004.5A CN202010675004A CN111966623A CN 111966623 A CN111966623 A CN 111966623A CN 202010675004 A CN202010675004 A CN 202010675004A CN 111966623 A CN111966623 A CN 111966623A
- Authority
- CN
- China
- Prior art keywords
- data
- mcu
- subdata
- fpga
- byte
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4282—Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Communication Control (AREA)
Abstract
本发明公开了一种MCU与多个FPGA使用SPI进行实时全双工可靠通信的方法,以解决现有技术没有充分利用SPI全双工及总线的特性,无法实时可靠传输不定长数据,且MCU与FPGA的通信速度未得到有效提高的问题。本发明的MCU端作为主机通过SPI向多个FPGA端不断循环发送子数据,多个FPGA端作为从机在收到主机的使能信号后,也通过SPI向MCU端不断循环发送子数据。双方接收到子数据后根据第1字节判断数据性质,无效则直接丢弃,重发申请则重新发送子数据,有效则判断校验位是否正确,不正确则申请重发,正确则根据第2~3字节计算帧数据长度,并组成完整的一帧数据。
Description
技术领域
本发明涉及一种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)字节依次组成完整的一帧数据,结束。
Claims (7)
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。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010675004.5A CN111966623A (zh) | 2020-07-14 | 2020-07-14 | Mcu与多个fpga使用spi进行实时全双工可靠通信的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010675004.5A CN111966623A (zh) | 2020-07-14 | 2020-07-14 | Mcu与多个fpga使用spi进行实时全双工可靠通信的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111966623A true CN111966623A (zh) | 2020-11-20 |
Family
ID=73361584
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010675004.5A Pending CN111966623A (zh) | 2020-07-14 | 2020-07-14 | Mcu与多个fpga使用spi进行实时全双工可靠通信的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111966623A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115941102A (zh) * | 2022-10-31 | 2023-04-07 | 三峡智控科技有限公司 | 一种采用spi连接mcu和fpga的控制器间同步通信的方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102819512A (zh) * | 2012-06-28 | 2012-12-12 | 惠州市德赛西威汽车电子有限公司 | 一种基于spi的全双工通信装置及其方法 |
CN103744825A (zh) * | 2013-12-31 | 2014-04-23 | 北京中宇新泰科技发展有限公司 | 一种扩展兼容spi接口双向实时通讯方法 |
CN104714908A (zh) * | 2013-12-13 | 2015-06-17 | 上海华虹集成电路有限责任公司 | 支持主从模式的spi接口 |
EP3026569A1 (en) * | 2014-11-28 | 2016-06-01 | Gemalto Sa | A communication system with a frame based communication interface |
US20160350240A1 (en) * | 2015-05-29 | 2016-12-01 | Analog Devices Global | Serial peripheral interface host port |
CN110955625A (zh) * | 2019-11-22 | 2020-04-03 | 上海麦腾物联网技术有限公司 | 一种基于spi的全双工实时通信的方法及装置 |
-
2020
- 2020-07-14 CN CN202010675004.5A patent/CN111966623A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102819512A (zh) * | 2012-06-28 | 2012-12-12 | 惠州市德赛西威汽车电子有限公司 | 一种基于spi的全双工通信装置及其方法 |
CN104714908A (zh) * | 2013-12-13 | 2015-06-17 | 上海华虹集成电路有限责任公司 | 支持主从模式的spi接口 |
CN103744825A (zh) * | 2013-12-31 | 2014-04-23 | 北京中宇新泰科技发展有限公司 | 一种扩展兼容spi接口双向实时通讯方法 |
EP3026569A1 (en) * | 2014-11-28 | 2016-06-01 | Gemalto Sa | A communication system with a frame based communication interface |
US20160350240A1 (en) * | 2015-05-29 | 2016-12-01 | Analog Devices Global | Serial peripheral interface host port |
CN110955625A (zh) * | 2019-11-22 | 2020-04-03 | 上海麦腾物联网技术有限公司 | 一种基于spi的全双工实时通信的方法及装置 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115941102A (zh) * | 2022-10-31 | 2023-04-07 | 三峡智控科技有限公司 | 一种采用spi连接mcu和fpga的控制器间同步通信的方法 |
CN115941102B (zh) * | 2022-10-31 | 2023-09-15 | 三峡智控科技有限公司 | 一种采用spi连接mcu和fpga的控制器间同步通信的方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106951388B (zh) | 一种基于PCIe的DMA数据传输方法及*** | |
US7418524B2 (en) | Universal serial bus (USB) extension | |
US7328399B2 (en) | Synchronous serial data communication bus | |
US6157972A (en) | Apparatus and method for processing packetized information over a serial bus | |
KR101812835B1 (ko) | 직렬 인터페이스 | |
CN103714029B (zh) | 新型二线同步通信协议及应用 | |
US7243173B2 (en) | Low protocol, high speed serial transfer for intra-board or inter-board data communication | |
CN107832250B (zh) | 一种基于spi的主从通讯时序方法 | |
CN106502932B (zh) | 基于分层结构的片间互联接口及其写操作和读操作的方法 | |
US8006008B2 (en) | Apparatus and method for data processing having an on-chip or off-chip interconnect between two or more devices | |
US20110145469A1 (en) | Apparatus for processing peripheral component interconnect express protocol | |
CN114297124B (zh) | 一种基于fpga的srio高速总线的通讯*** | |
CN112395230A (zh) | 一种基于可编程逻辑器件的uart接口扩展电路 | |
CN108462620B (zh) | 一种吉比特级SpaceWire总线*** | |
CN111966623A (zh) | Mcu与多个fpga使用spi进行实时全双工可靠通信的方法 | |
CN113792003A (zh) | 单总线通信单元、***及方法 | |
JP2986798B2 (ja) | データ伝送制御方法およびデータ通信装置 | |
CN111045817B (zh) | 一种PCIe传输管理方法、***和装置 | |
CN113220607A (zh) | 一种基于fifo的数据处理方法 | |
CN116185936A (zh) | 一种spi通信数据收发异常检测控制***及检测方法 | |
TW202310594A (zh) | 用於互連協定的錯誤處理的方法、控制器以及儲存裝置 | |
TW202306365A (zh) | 用於互連協定的訊框接收的資料處理的方法以及儲存裝置 | |
CN105553801A (zh) | 一种低延迟1394物理层转发电路 | |
JP2011071579A (ja) | PCIExpress通信システム | |
CN101446887B (zh) | 一种原语处理方法、装置和*** |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20201120 |