首页 / 一种基于SPI接口的可靠数据传输方法

一种基于SPI接口的可靠数据传输方法实质审查 发明

技术领域

[0001] 本发明涉及数据通信技术领域,特别涉及一种基于SPI接口的可靠性数据传输方法。

相关背景技术

[0002] SPI(Serial Peripheral Interface,串行外设接口)是一种高速的、全双工、同步的通信总线,用于MCU与各种外围设备以串行方式进行通信。SPI接口采用主从模式,利用标准四线制连接主控端和从控端。
[0003] 相关技术中,由主控端主动发起数据发送和数据接收,且只有当主控端向从控端发送数据后才会接收从控端发送的数据。如果从控端没有数据需要发送给主控端,则主控端接收数据时无法确定数据是否有效,造成数据传输的不可靠。

具体实施方式

[0021] 为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0022] 请参考图1,本发明实施例提供的一种基于SPI接口的可靠性数据传输方法,所述SPI接口包括主控端和从控端,所述从控端设置有从控发送队列,从控端当存在所需向主控端发送的从控数据时,将从控数据写入至所述从控发送队列中;所述方法还包括:
[0023] 步骤100,主控端周期性按照发送数据帧格式向从控端发送主控数据;
[0024] 步骤102,从控端针对主控端每次发送的主控数据向主控端进行数据反馈,通过结合主控端发送的主控数据以及所述从控发送队列中是否存在从控数据,确定向主控端进行数据反馈时是否反馈有效数据;其中,从控端是按照接收数据帧格式向主控端进行数据反馈的。
[0025] 本发明实施例中,主控端无论是否有有效数据进行发送,均会周期性的向从控端发送主控数据,且是按照发送数据帧格式进行数据发送的,保证了从控端能够即时进行数据收发,该发送数据帧格式能够使得从控端确认主控端是否发送了有效数据,另外,从控端设置有从控发送队列,只要从控端有需要向主控端发送的从控数据时,则先将从控数据写入到从控发送队列中,等待主控端下一周期向从控端发送主控数据时,根据主控数据和从控发送队列中是否存在从控数据确定是否向主控端反馈有效数据。可见,本方案,通过设计发送数据帧格式和接收数据帧格式,使得从端端能够确定主控数据是否有效以及是否进行数据反馈,且主控端也能够确定反馈数据中是否存在有效数据,保证了数据传输的可靠性。
[0026] 请参考图2,SPI接口的主控端master位于处理器系统中,从控端slave位于外部设备中,处理器系统和外部设备之间通过SPI接口连接。主空端和从控端之间采用4标准线连接,分别为mosi、miso、clk和gate线。主控端按照周期T进行周期性查询,假设周期T为n纳秒,n为正整数,每延时n纳秒进行一次数据查询,每查询一次,则向从控端发送一次主控数据,若接收到有效数据则用于处理器系统的数据处理。从控端除了包括从控发送队列,还可以包括从控接收队列,每接收到主控端发送的主控数据,若主控数据有效,则将主控数据写入从控接收队列中,若存在向主控端发送的从控数据则将从控数据写入从控发送队列中,从控接收队列中的主控数据可以用于外部设备的数据处理。
[0027] 为了提高数据传输可靠性,本发明实施例设计了发送数据帧格式和接收数据帧格式,下面对发送数据帧格式和接收数据帧格式进行说明。
[0028] 由于标准SPI接口的数据接收和发送是在时钟控制下同步进行,因此主控端从第1个时钟起既可以掌握收发数据的信息,而从控端接收到X位数据后才能掌握X位信息,进而根据X位信息才能确定从控端是否发送数据、发送什么数据。基于此,本发明实施例中,根据SPI接口上述特点,所述发送数据帧格式和所述接收数据帧格式是非对称的;所述接收数据帧格式要求的数据帧长度相对于发送数据帧格式要求的数据帧长度短设定位数,该设定位数是从所述接收数据帧格式的起始位开始空出的,用于从控端利用空出的该设定位数实现主控数据的信息判别和数据处理。
[0029] 比如,接收数据帧格式中的前X位为未定义位,X位为命令位和填充位的长度之和,接收数据帧格式中空出的X位用于对发送的主控数据进行信息判别和数据处理。其中,X为正整数。以命令位占用2bit、填充位占用2bit为例,那么X位4bit,对于主控端而言,接收数据帧相对于发送数据帧短4位,其中,接收数据帧空出的前2位是从控端进行判别信息位,空出的后2位用于从控端进行判断处理的时钟周期。这样保证了从控端在协议层面具有有效的命令接收和处理时间和空间,又通过从控接收队列和从控发送队列的支撑,不仅使从控端能够主动向主控端发送主控数据、而且能够实时响应主控端的命令。
[0030] 请参考图3,为发送数据帧格式和接收数据帧格式的对比示意图。其中,所述发送数据帧格式从起始位开始至少依次包括如下数据帧:命令位、填充位和发送数据位;该命令位和填充位共占用位数为所述设定位数;图3中,该设定位数为4bits,命令位和填充位分别占用2bits。
[0031] 所述接收数据帧格式从起始位开始空出所述设定位数后,至少依次包括如下数据帧:接收标识位和接收数据位。
[0032] 其中,发送数据帧格式中的命令位用于指示本次发送的主控数据是否有效以及本次是否接收从控端的反馈数据;填充位用于为从控端提供解析等待时间;发送数据位用于填充所需发送的主控数据;接收标识位用于指示本次的反馈数据是否为有效数据;接收数据位用于填充所需反馈的从控数据。
[0033] 那么,所述主控端周期性按照发送数据帧格式向从控端发送主控数据,具体可以包括:
[0034] 主控端通过周期性查询SPI接口,以确定本次向从控端发送的主控数据中各数据帧的内容;其中,
[0035] 当确定需要向从控端发送数据但不需要接收数据时,则本次向从控端发送的主控数据中,命令位用于指示只发送不接收且发送数据有效,将所需发送的数据填充至发送数据位中;
[0036] 当确定不需要向从控端发送数据需要接收数据时,则本次向从控端发送的主控数据中,命令位用于指示只接收且发送数据无效;
[0037] 当确定需要向从控端发送数据且需要接收数据时,则本次向从控端发送的主控数据中,命令位用于指示同时收发且发送数据有效,将所需发送的数据填充至发送数据位中;
[0038] 相应地,所述通过结合主控端发送的主控数据以及所述从控发送队列中是否存在从控数据,确定向主控端进行数据反馈时是否反馈有效数据,具体可以包括:
[0039] 从控端在接收到主控端发送的主控数据中命令位用于指示只发送不接收且发送数据有效时,则从主控数据的发送数据位上解析出数据,反馈数据中的接收标识位用于指示本次反馈的数据为无效数据;
[0040] 从控端在接收到主控端发送的主控数据中命令位用于指示只接收且发送数据无效时,则确定从控发送队列中是否存在从控数据,若存在,则从从控发送队列中取出从控数据填充至反馈数据的接收数据位中,且反馈数据中的接收标识位用于指示本次反馈的数据为有效数据;若不存在,则反馈数据中的接收标识位用于指示本次反馈的数据为无效数据;
[0041] 从控端在接收到主控端发送的主控数据中命令位用于指示同时收发且发送数据有效时,则从主控数据中的发送数据位上解析出数据,并确定从控发送队列中是否存在从控数据,若存在,则从从控发送队列中取出从控数据填充至反馈数据的接收数据位中,且反馈数据中的接收标识位用于指示本次反馈的数据为有效数据;若不存在,则反馈数据中的接收标识位用于指示本次反馈的数据为无效数据。
[0042] 进一步地,发送数据帧格式除上述数据帧以外,本发明一个实施例,发送数据帧格式还可以包括:主控地址位和主控校验位。一个实现方式中,主控地址位可以位于填充位和发送数据位之间,主控校验位可以位于发送数据位之后。
[0043] 其中,主控地址位用于指示该主控数据的目的地址。当SPI接口为多个从控端时,通过将目标从控端的地址写入主控地址位,当多个从控端接收到主控端发送的主控数据时,利用该主控数据中的主控地址位确定该主控数据是否为发送给自身的。主控校验位用于从控端对主控数据进行校验。
[0044] 同理,发送数据帧格式除上述数据帧以外,本发明一个实施例,接收数据帧格式还可以包括:从控地址位和从控校验位。一个实现方式中,从控地址位可以位于接收标识之前,从控校验位可以位于接收数据位之后。
[0045] 其中,从控地址位用于指示该反馈数据的目的地址。当SPI接口为多个主控端时,通过将目标主控端的地址写入从控地址位,当多个主控端接收到从控端的反馈数据时,利用该反馈数据中的从控地址位确定该反馈数据是否为发送给自身的。从控校验位用于主控端对反馈数据进行校验。
[0046] 本发明实施例中,由于8bit为一个字节,为了使得数据处理更方便,主控数据和反馈数据的总长度可以为8的整数倍。
[0047] 一个实施例中,发送数据帧格式中,命令位占用数据帧长度中的2bits,填充位占用数据帧长度中的2bits,主控地址位占用数据帧长度的3bits,发送数据位占用Mbits,M为正整数,主控校验位可以为8kbits,k为正整数。
[0048] 相应地,接收数据帧格式中,从起始位空出4bits之后,从控地址位占用数据帧长度的3bits,接收标识位占用数据帧长度的1bit,接收数据位占用Mbits,M为正整数,从控校验位可以为8kbits,k为正整数。
[0049] 为了使得主控数据和反馈数据的总长度均为8的整数倍,发送数据帧格式还可以包括未定义位,未定义位用于对数据长度进行补充,未定义位占用数据帧长度的1bit;接收数据帧格式还可以包括未定义位,接收数据帧格式中的未定义位用于将起始位空出设定位数,即该未定义位占用数据帧长度的4bits。
[0050] 以上述实施例中各位占用bit为例,对发送数据帧格式中的命令位的设置进行说明。
[0051] 命令位为01时,用于指示只发送不接收且发送数据有效;
[0052] 命令位为10时,用于指示只接收且发送数据无效;
[0053] 命令位为11时,用于指示同时收发且发送数据有效;
[0054] 命令位为00时,表示未定义该字段,发送数据无效。
[0055] 可见,主控端无论是否有数据需要发送,均会通过周期性查询SPI接口,以确定当前是否有数据发送以及是否有数据接收,无论是否有需求,均会向从控端发送主控数据。当既无数据发送也无数据接收时,则可以将命令位设置为00进行主控数据发送。
[0056] 需要说明的是,无论是否有数据发送,主控端向从控端发送的主控数据总长度均为L。
[0057] 以上述实施例中各位占用bit为例,对接收数据帧格式中的接收标识位的设置进行说明。
[0058] 接收标识位为1时,用于指示本次的反馈数据为有效数据;
[0059] 接收标识位为0时,用于指示本次的反馈数据为无效数据。
[0060] 可见,从控端只要有所需向主控端发送的从控数据时,则将从控数据写入从控发送队列中,当接收到主控端发送的主控数据时,当主控数据的命令位指示可以接收反馈数据时,则将从控发送队列中的从控数据作为有效数据填入反馈数据中,并指示接收标识位为有效数据,否则,不将从控发送队列中的从控数据填入反馈数据中。由此从控端能够根据实际情况进行数据反馈,保证了主从之间数据传输的有效性。
[0061] 需要说明的是,反馈数据中无论是否填入有有效数据发送,从控端向主控端反馈的数据总长度均为L。
[0062] 本发明一个实施例中,为了保证提高数据传输后能够被及时处理,且不混乱,在从控端还设置有从控接收队列,在所述从主控端发送的主控数据中的发送数据位上解析出数据之后,还可以包括:将解析出的数据写入至从控接收队列中。由此当从控接收队列中存在数据时,则可以按照数据放入从控接收队列的先后顺序,依次对数据进行处理。
[0063] 本发明一个实施例中,为了避免队列数据溢出,所述从控发送队列和所述从控接收队列的长度均为N,且N满足如下关系:
[0064]
[0065] 其中,L为主控数据和反馈数据的总长度,T为主控端查询SPI接口的周期,S为主控端的发送速率。
[0066] 本发明实施例中,周期性查询的延时时间n纳秒可以按照实时性要求设置时间粒度,如此可以保证从控端收发数据的实时性。
[0067] 本发明实施例提供了一种基于SPI接口的可靠性数据传输装置,所述SPI接口包括主控端和从控端,所述从控端设置有从控发送队列,从控端当存在所需向主控端发送的从控数据时,将从控数据写入至所述从控发送队列中;所述装置包括:
[0068] 位于主控端的第一处理单元,用于主控端周期性按照发送数据帧格式向从控端发送主控数据;
[0069] 位于从控端的第二处理单元,用于从控端针对主控端每次发送的主控数据向主控端进行数据反馈,通过结合主控端发送的主控数据以及所述从控发送队列中是否存在从控数据,确定向主控端进行数据反馈时是否反馈有效数据;其中,从控端是按照接收数据帧格式向主控端进行数据反馈的。
[0070] 本发明一个实施例中,所述发送数据帧格式和所述接收数据帧格式是非对称的;
[0071] 所述接收数据帧格式要求的数据帧长度相对于发送数据帧格式要求的数据帧长度短设定位数,该设定位数是从所述接收数据帧格式的起始位开始空出的,用于从控端利用空出的该设定位数实现主控数据的信息判别和数据处理。
[0072] 本发明一个实施例中,所述发送数据帧格式从起始位开始至少依次包括如下数据帧:命令位、填充位和发送数据位;该命令位和填充位共占用位数为所述设定位数;
[0073] 所述接收数据帧格式从起始位开始空出所述设定位数后,至少依次包括如下数据帧:接收标识位和接收数据位;
[0074] 所述主控端周期性按照发送数据帧格式向从控端发送主控数据时,具体包括:
[0075] 主控端通过周期性查询SPI接口,以确定本次向从控端发送的主控数据中各数据帧的内容;其中,
[0076] 当确定需要向从控端发送数据但不需要接收数据时,则本次向从控端发送的主控数据中,命令位用于指示只发送不接收且发送数据有效,将所需发送的数据填充至发送数据位中;
[0077] 当确定不需要向从控端发送数据需要接收数据时,则本次向从控端发送的主控数据中,命令位用于指示只接收且发送数据无效;
[0078] 当确定需要向从控端发送数据且需要接收数据时,则本次向从控端发送的主控数据中,命令位用于指示同时收发且发送数据有效,将所需发送的数据填充至发送数据位中;
[0079] 所述通过结合主控端发送的主控数据以及所述从控发送队列中是否存在从控数据,确定向主控端进行数据反馈时是否反馈有效数据时,具体包括:
[0080] 从控端在接收到主控端发送的主控数据中命令位用于指示只发送不接收且发送数据有效时,则从主控数据的发送数据位上解析出数据,反馈数据中的接收标识位用于指示本次反馈的数据为无效数据;
[0081] 从控端在接收到主控端发送的主控数据中命令位用于指示只接收且发送数据无效时,则确定从控发送队列中是否存在从控数据,若存在,则从从控发送队列中取出从控数据填充至反馈数据的接收数据位中,且反馈数据中的接收标识位用于指示本次反馈的数据为有效数据;若不存在,则反馈数据中的接收标识位用于指示本次反馈的数据为无效数据;
[0082] 从控端在接收到主控端发送的主控数据中命令位用于指示同时收发且发送数据有效时,则从主控数据中的发送数据位上解析出数据,并确定从控发送队列中是否存在从控数据,若存在,则从从控发送队列中取出从控数据填充至反馈数据的接收数据位中,且反馈数据中的接收标识位用于指示本次反馈的数据为有效数据;若不存在,则反馈数据中的接收标识位用于指示本次反馈的数据为无效数据。
[0083] 本发明一个实施例中,在从控端还设置有从控接收队列,位于从控端的第二处理单元还用于在所述从主控数据中的数据位上解析出数据之后,将解析出的数据写入至从控接收队列中。
[0084] 本发明一个实施例中,所述从控发送队列和所述从控接收队列的长度均为N,且N满足如下关系:
[0085]
[0086] 其中,L为主控数据和反馈数据的总长度,T为主控端查询SPI接口的周期,S为主控端和从控端的通信速率。
[0087] 本发明一个实施例中,主控数据和反馈数据的总长度为8的整数倍。
[0088] 需要说明的是:上述实施例提供的基于SPI接口的可靠性数据传输装置,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的基于SPI接口的可靠性数据传输装置与基于SPI接口的可靠性数据传输方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
[0089] 本申请的实施例还提供了一种计算机设备,请参考图4,该计算机设备包括处理器和存储器,该存储器中存储有至少一条指令、至少一段程序、代码集或指令集,至少一条指令、至少一段程序、代码集或指令集由处理器加载并执行以实现上述各方法实施例提供的基于SPI接口的可靠性数据传输方法。
[0090] 本申请的实施例还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有至少一条指令、至少一段程序、代码集或指令集,至少一条指令、至少一段程序、代码集或指令集由处理器加载并执行,以实现上述各方法实施例提供的基于SPI接口的可靠性数据传输方法。
[0091] 本申请的实施例还提供了一种计算机程序产品,该计算机程序产品包括计算机程序,计算机设备的处理器从计算机可读存储介质读取该计算机程序,处理器执行该计算机程序,使得该计算机设备执行上述实施例中任一所述的基于SPI接口的可靠性数据传输方法。
[0092] 为了描述的方便,描述以上系统或装置时以功能分为各种模块或单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
[0093] 通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。
[0094] 最后,还需要说明的是,在本文中,诸如第一、第二、第三和第四等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0095] 以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。

当前第1页 第1页 第2页 第3页