发明内容
本申请实施例提供了一种循环冗余校验计算方法、装置、电子设备及存储介质,可以解决CRC计算的方式复杂,耗费的资源较多,且计算的效率较低,导致数据传输延迟较高的问题。所述技术方案如下:
获取至少两个数据包;
确定至少两个数据包中的静态数据和动态数据;
根据第一CRC值对各数据包中的动态数据进行CRC计算,获得第二CRC值,并将第二CRC值作为各数据包的目标CRC计算结果;
其中,第一CRC值是预先根据预设的初始值对静态数据进行CRC计算得到的。
在一个可能的实现方式中,确定至少两个数据包中的静态数据和动态数据,包括:
若确定至少两个数据包中存在数据相同的同一位数,则将同一位数的数据作为静态数据,将各数据包中除同一位数以外的其他位数的数据作为各数据包的动态数据。
在另一个可能的实现方式中,方法还包括:
若确定至少两个数据包中不存在数据相同的同一位数,则根据预设的第一初始值对至少两个数据包中的数据进行CRC计算,获得各数据包的目标CRC计算结果。
根据本申请实施例的另一个方面,提供了一种数据传输***,包括发送端和接收端,其中:
发送端,用于生成至少两个数据包,并将至少两个数据包以及相应数据包的第一目标CRC计算结果发送至接收端;
接收端,用于接收发送端发送的至少两个数据包以及相应数据包的第一目标CRC计算结果,基于至少两个数据包获得各数据包的第二目标CRC计算结果,并验证各数据包的第一目标CRC计算结果与第二目标CRC计算结果是否一致。
在一个可能的实现方式中,发送端包括生成模块、第一CRC模块以及发送模块,其中:
生成模块,用于生成至少两个数据包;
第一CRC模块,用于根据如权利要求1-3任一项的循环冗余校验计算方法对至少两个数据包进行CRC计算,获得各数据包的第一目标CRC计算结果;
发送模块,用于将至少两个数据包以及相应数据包的第一目标CRC计算结果发送至接收端。
在另一个可能的实现方式中,接收端包括接收模块、第二CRC模块以及校验模块,其中:
接收模块,用于接收发送端发送的至少两个数据包以及相应数据包的第一目标CRC计算结果;
第二CRC模块,用于根据如权利要求1-3任一项的循环冗余校验计算方法对至少两个数据包进行CRC计算,获得各数据包的第二目标CRC计算结果;
校验模块,用于验证各数据包的第一目标CRC计算结果与第二目标CRC计算结果是否一致。
根据本申请实施例的再一个方面,提供了一种循环冗余校验CRC计算装置,该装置包括:
获取模块,用于获取至少两个数据包;
确定模块,用于确定至少两个数据包中的静态数据和动态数据;
计算模块,用于根据第一CRC值对各数据包中的动态数据进行CRC计算,获得第二CRC值,并将第二CRC值作为各数据包的目标CRC计算结果;
其中,第一CRC值是预先根据预设的初始值对静态数据进行CRC计算得到的。
在一个可能的实现方式中,确定模块,包括:
数据分类模块,用于若确定至少两个数据包中存在数据相同的同一位数,则将同一位数的数据作为静态数据,将各数据包中除同一位数以外的其他位数的数据作为各数据包的动态数据。
在另一个可能的实现方式中,确定模块还包括:
数据包计算模块,用于若确定至少两个数据包中不存在数据相同的同一位数,则根据预设的第一初始值对至少两个数据包中的数据进行CRC计算,获得各数据包的目标CRC计算结果。
根据本申请实施例的再一个方面,提供了一种电子设备,该电子设备包括存储器、处理器及存储在存储器上的计算机程序,处理器执行计算机程序以实现上述的循环冗余校验计算方法的步骤。
根据本申请实施例的再一个方面,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述的循环冗余校验CRC计算方法的步骤。
本申请实施例提供的技术方案带来的有益效果是:
本申请实施例通过将获取至少两个数据包,确定至少两个数据包中的静态数据以及动态数据,先对静态数据进行CRC计算,获得第一CRC值,再根据第一CRC值对各数据包的动态数据进行CRC计算,节省了每个数据包的CRC计算时间,提供了CRC计算的效率。
具体实施方式
下面结合本申请中的附图描述本申请的实施例。应理解,下面结合附图所阐述的实施方式,是用于解释本申请实施例的技术方案的示例性描述,对本申请实施例的技术方案不构成限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本申请实施例所使用的术语“包括”以及“包含”是指相应特征可以实现为所呈现的特征、信息、数据、步骤、操作、元件和/或组件,但不排除实现为本技术领域所支持其他特征、信息、数据、步骤、操作、元件、组件和/或它们的组合等。应该理解,当我们称一个元件被“连接”或“耦接”到另一元件时,该一个元件可以直接连接或耦接到另一元件,也可以指该一个元件和另一元件通过中间元件建立连接关系。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的术语“和/或”指示该术语所限定的项目中的至少一个,例如“A和/或B”可以实现为“A”,或者实现为“B”,或者实现为“A和B”。
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
首先对本申请涉及的几个名词进行介绍和解释:
循环冗余校验(Cyclic Redundancy Check,CRC)是一种根据网络数据包或计算机等数据产生简短固定位数校验码的一种信道编码技术,主要是用来检测或校验数据传输或保存后可能出现的错误,利用除法和余数的原理生成校验码。
BT(Bluetooth,蓝牙)和BLE(Bluetooth Low Energy,低功耗蓝牙),BT是指蓝牙协议在4.0以下的蓝牙模块,一般用于数据量比较大的传输,如语音、音乐等较大数据量传输;BLE是指蓝牙协议4.0或更高的蓝牙模块,其特点是成本和功耗的降低,应用于实时性要求比较高的产品中,如智能类家具、传感设备的数据发送等。
2.4G私有协议传输芯片,在2.4G这个频段存在如wifi、蓝牙等标准协议,在wifi和蓝牙无法覆盖的领域,2.4G私有协议传输芯片弥补了标准协议覆盖不到的场景,是应用十分广泛的芯片,具有低延时、组网简单、高速度、远距离等特点。
在BE/BLE、2.4G私有协议传输芯片的无线数据传输过程中,对传输的数据包进行CRC计算时,分别采用的CRC的运算逻辑都是不同的,例如不同的数据传输方式中数据包的位数不同,所选取的多项式、初始均不同,需要消耗较多的人力物力来分别实现各个数据传输中的CRC计算,并且在CRC计算过程中,针对传输的每一个数据包都需要进行相应的CRC计算,CRC计算的效率较低,导致数据传输的延迟较高。
本申请提供的循环冗余校验计算方法、装置、电子设备及存储介质,旨在解决现有技术的如上技术问题。
下面通过对几个示例性实施方式的描述,对本申请实施例的技术方案以及本申请的技术方案产生的技术效果进行说明。需要指出的是,下述实施方式之间可以相互参考、借鉴或结合,对于不同实施方式中相同的术语、相似的特征以及相似的实施步骤等,不再重复描述。
本申请实施例中提供了一种循环冗余校验CRC计算方法,如图1所示,该方法包括:
S101、获取至少两个数据包。
数据包,在包交换网络里,单个消息被划分为多个数据块,这些数据块称为包,一般也称数据包,数据包可以沿着不同的路径在一个或多个网络中传输,并且在目的地重新组合。数据包在实际传输过程中是以比特流的形式在物理链路层中进行传播。
本申请实施例中获取数据包的方式可以在数据包的发送端,也即发送端发送数据包时从发送端的内部数据库中获取得到数据包,也可以是其他方式,本申请实施例不作具体限定。
如本申请实施例中获取到的至少两个数据包例如可以是BLE的数据传输中的数据包,如图2所示,图2为本申请实施例示例性提供的一种BLE数据包的结构示意图,包括1或2个字节的导频、4个字节的终端地址、2-258字节的PDU(Protocol Data Unit,协议数据单元)、3个字节的CRC校验码、以及16到160微秒的恒定单音扩展,其中画斜线的部分,即2-258个字节的PDU为进行CRC计算的部分。
如本申请实施例中获取到的至少两个数据包也可以是2.4G私有协议传输芯片的数据传输中的数据包,如图3所示,图3为本申请实施例示例性提供的一种2.4G私有协议数据包的结构示意图,包括1个字节的导频、4个字节的地址、9个字节的包控制字段、0-32字节的有效载荷以及1-2个字节的CRC校验码,其中画斜线部分,即地址、包控制字段以及有效载荷为进行CRC计算的部分。
S102、确定至少两个数据包中的静态数据和动态数据。
应当理解的是,本申请实施例中静态数据是指多个数据包中相同的数据,动态数据是指多个数据包中不同的数据。数据包中所包含的数据一般包括发送端和接收段的地址,以及数据包中所携带的发送端发送给接收端的数据。
具体地,如获取到的数据包是同一发送端发送给同一接收端的,那么可以确定获取到的数据包中包含的发送端和接收端的地址为静态数据,数据包所携带的不同的数据为动态数据,应当注意的是,获取到的至少两个数据包不是同一发送端发送给同一接收段的,相同的数据也就并不是发送端和接收端的地址,本申请实施例中将各数据包中相同的数据作为动态数据,不同的数据作为动态数据,本申请实施例不具体限定数据的内容。
S103、根据第一CRC值对各数据包中的动态数据进行CRC计算,获得第二CRC值,并将第二CRC值作为各数据包的目标CRC计算结果;
其中,第一CRC值是预先根据预设的初始值对静态数据进行CRC计算得到的。
CRC的思想原理是在发送端中将待发送的数据后附加校验码,校验码是根据发送端和接收端预先共同选定的某个特定的数与待发送的数据相除得到的余数确定,在接收端中将接收到的数据除以预先选定的特定的数,余数为0则表示传输过程中数据没有发生变化,数据传输正确;余数不为0则表示传输过程中数据发生变化,数据传输出现错误。
CRC计算指的即是上述过程的具体计算过程,本申请实施例中不作具体限定,在实际应用中可以将数据包的数据流按位依次输入移位寄存器中,获得的寄存器值即是该数据包的CRC值,例如本申请实施例中使用线性反馈移位寄存器(linear feedback shiftregister,LFSR),将获取到的数据包的数据流输入LFSR中,得到LFSR输出的寄存器值即是该数据包的CRC值。
在本申请实施例中预先根据预设的第一初始值对静态数据进行CRC计算,即是将静态数据输入LFSR进行计算,获得LFSR输出的CRC值即是第一CRC值,第一初始值即是该移位寄存器的复位值。
应当理解的是,静态数据是获取到的至少一个数据包中相同的数据,那么可以预先对各数据包的静态数据进行一次CRC计算,获得第一CRC值,根据第一CRC值再对各数据包的动态数据再进行CRC计算,获得第二CRC值,将第二CRC值作为各数据包的目标CRC计算结果。
在获得静态数据对应的第一CRC值后,将第一CRC值作为动态数据进行CRC计算的初始值,对各数据包的动态数据进行CRC计算,即是将各数据包的动态数据再输入LFSR中,获得LFSR输出的第二CRC值,作为各数据包的目标CRC计算结果。
例如获取到的至少一个数据包的静态数据为0×8E89BED6,将其输入到上述LSFR中,获得LSFR输出的第一CRC值为0×1B63CA,在计算各数据包的动态数据时,将0×1B63CA作为初始值,分别对各数据包的动态数据再进行CRC计算,获得各数据包的第二CRC值。
本申请实施例通过将获取至少一个数据包,确定至少一个数据包中的静态数据以及动态数据,先对静态数据进行一次CRC计算,获得第一CRC值,再根据第一CRC值对各数据包的动态数据进行CRC计算,节省了每个数据包的CRC计算时间,提供了CRC计算的效率。
本申请实施例中提供了一种可能的实现方式,确定至少两个数据包中的静态数据和动态数据,包括:
若确定至少两个数据包中存在数据相同的同一位数,则将同一位数的数据作为静态数据,将各数据包中除同一位数以外的其他位数的数据作为各数据包的动态数据。
应当理解的是,对于两个数据包而言,静态数据是指两个数据包中相同的数据,两个数据包中相同的数据不仅数据本身是相同的,这些数据对应的位数也是相同的。
数据包中的数据是一串二进制的比特流,例如获取到的数据包的数据包括AAAABBBB,AAAACCCC,AAAADDDD其中各数据包的前四位均为AAAA,即可以确定AAAA为静态数据,除前四位以外的其他位数的数据为动态数据,即可以确定BBBB、CCCC以及DDDD为动态数据。
本申请实施例中提供了一种可能的实现方式,循环冗余校验计算方法还包括:
若确定至少两个数据包中不存在数据相同的同一位数,则根据预设的第一初始值对至少两个数据包中的数据进行CRC计算,获得各数据包的目标CRC计算结果。
应当理解的是,本申请实施例中获取到的至少一个数据包中可能并不存在数据相同的同一位数,即各个数据包中的数据是均不相同的,例如对于BLE中数据包进行CRC计算时,各数据包中并不携带发送端和接收端的地址,只携带需要发送的数据。
若确定获取到的至少一个数据包中不存在数据相同的同一位数,即各数据包中的数据均不相同,此时需分别对每个数据包所有的数据均进行CRC计算,本申请实施例中是将预设的第一初始值作为各数据包的初始值,对各数据包中的数据进行CRC计算,获得各数据包的目标CRC计算结果。
本申请实施例中若确定获取到的至少一个数据包中不存在数据相同的同一位数,即确定各数据包不存在相同的静态数据,可以将预设的第一初始值作为各数据包进行CRC计算的初始值,即使各数据包所携带的数据均不同,也可以进行CRC计算的逻辑结构也是类似的,采用的相同的初始值,也可以提高各数据包CRC计算的效率。
图4为本申请实施例提供的一种CRC计算的逻辑示意图,如图4所示,本申请实施例中对于存在静态数据的比特流和不存在静态数据的比特流,分别进行两种处理方式,存在静态数据的比特流可以进行静态数据的CRC预计算,然后再进行CRC计算,得到最终的CRC结果,而不存在静态数据的比特流可以直接进行CRC计算,得到CRC结果。其中,比特流是指数据包在传输过程中以比特流的形式进行传输的。
本申请实施例中还提供了一种数据传输***,包括发送端和接收端,其中:
发送端,用于生成至少两个数据包,并将至少两个数据包以及相应数据包的第一目标CRC计算结果发送至接收端;
接收端,用于接收发送端发送的至少两个数据包以及相应数据包的第一目标CRC计算结果,基于至少两个数据包获得各数据包的第二目标CRC计算结果,并验证各数据包的第一目标CRC计算结果与第二目标CRC计算结果是否一致。
应当理解的是,在发送端和接收端均会进行上述实施例中的循环冗余校验计算方法,发送端和接收端指的是具备发送数据功能的设备,接收端是指具备接收数据功能的设备,本申请实施例中对于发送端和接收端可以是各种终端,也可以是服务器,本申请实施例不作具体限定。
本申请实施例中提供了一种可能的实现方式,发送端包括生成模块、第一CRC模块以及发送模块,其中:
生成模块,用于生成至少两个数据包;
第一CRC模块,用于根据如权利要求1-3任一项的循环冗余校验计算方法对至少两个数据包进行CRC计算,获得各数据包的第一目标CRC计算结果;
发送模块,用于将至少两个数据包以及相应数据包的第一目标CRC计算结果发送至接收端。
本申请实施例中提供了一种可能的实现方式,接收端包括接收模块、第二CRC模块以及校验模块,其中:
接收模块用于接收发送端发送的至少两个数据包以及相应数据包的第一目标CRC计算结果;
第二CRC模块,用于根据如权利要求1-3任一项的循环冗余校验计算方法对至少两个数据包进行CRC计算,获得各数据包的第二目标CRC计算结果;
校验模块,用于验证各数据包的第一目标CRC计算结果与第二目标CRC计算结果是否一致。
图5为本申请实施例提供的一种数据传输***结构示意图,如图5所示,发送端与接收端之间可以进行数据传输,各个箭头表示数据传输过程。
具体地,在发送端中生成模块生成至少两个数据包;第一CRC模块对至少两个数据包进行CRC计算,获得各数据包的第一目标CRC计算结果;发送模块将至少两个数据包以及相应数据包的第一目标CRC计算结果发送至接收端的接收模块。
在接收端中接收模块接收至少两个数据包以及相应数据包的第一目标CRC计算结果;第二CRC模块对至少两个数据包进行CRC计算,获得个数据包的第二目标CRC计算结果;校验模块第一目标CRC计算结果和第二目标CRC计算结果是否一致。
本申请实施例提供了一种循环冗余校验CRC计算装置,如图6所示,该装置可以包括:获取模块110、确定模块210以及计算模块310,其中,
获取模块110,用于获取至少两个数据包;
确定模块210,用于确定至少两个数据包中的静态数据和动态数据;
计算模块310,用于根据第一CRC值对各数据包中的动态数据进行CRC计算,获得第二CRC值,并将第二CRC值作为各数据包的目标CRC计算结果;
其中,第一CRC值是预先根据预设的初始值对静态数据进行CRC计算得到的。
本申请实施例提供的循环冗余校验CRC计算装置,具体执行上述方法实施例流程,具体请详见上述循环冗余校验CRC计算方法实施例的内容,在此不再赘述。本申请实施例提供的循环冗余校验CRC计算装置,通过将获取至少两个数据包,确定至少两个数据包中的静态数据以及动态数据,先对静态数据进行CRC计算,获得第一CRC值,再根据第一CRC值对各数据包的动态数据进行CRC计算,节省了每个数据包的CRC计算时间,提供了CRC计算的效率。
在一个可能的实现方式中,确定模块210包括:
数据分类模块,用于若确定至少两个数据包中存在数据相同的同一位数,则将同一位数的数据作为静态数据,将各数据包中除同一位数以外的其他位数的数据作为各数据包的动态数据。
在另一个可能的实现方式中,确定模块210还包括:
数据包计算模块,用于若确定至少两个数据包中不存在数据相同的同一位数,则根据预设的第一初始值对至少两个数据包中的数据进行CRC计算,获得各数据包的目标CRC计算结果。
本申请实施例中提供了一种电子设备,包括存储器、处理器及存储在存储器上的计算机程序,该处理器执行上述计算机程序以实现循环冗余校验CRC计算方法的步骤,与相关技术相比可实现:本申请实施例通过将获取至少一个数据包,确定至少一个数据包中的静态数据以及动态数据,先对静态数据进行一次CRC计算,获得第一CRC值,再根据第一CRC值对各数据包的动态数据进行CRC计算,节省了每个数据包的CRC计算时间,提供了CRC计算的效率。
在一个可选实施例中提供了一种电子设备,如图7所示,图7所示的电子设备4000包括:处理器4001和存储器4003。其中,处理器4001和存储器4003相连,如通过总线4002相连。可选地,电子设备4000还可以包括收发器4004,收发器4004可以用于该电子设备与其他电子设备之间的数据交互,如数据的发送和/或数据的接收等。需要说明的是,实际应用中收发器4004不限于一个,该电子设备4000的结构并不构成对本申请实施例的限定。
处理器4001可以是CPU(Central Processing Unit,中央处理器),通用处理器,DSP(Digital Signal Processor,数据信号处理器),ASIC(Application SpecificIntegrated Circuit,专用集成电路),FPGA(Field Programmable Gate Array,现场可编程门阵列)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器4001也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等。
总线4002可包括一通路,在上述组件之间传送信息。总线4002可以是PCI(Peripheral Component Interconnect,外设部件互连标准)总线或EISA(ExtendedIndustry Standard Architecture,扩展工业标准结构)总线等。总线4002可以分为地址总线、数据总线、控制总线等。为便于表示,图7中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
存储器4003可以是ROM(Read Only Memory,只读存储器)或可存储静态信息和指令的其他类型的静态存储设备,RAM(Random Access Memory,随机存取存储器)或者可存储信息和指令的其他类型的动态存储设备,也可以是EEPROM(Electrically ErasableProgrammable Read Only Memory,电可擦可编程只读存储器)、CD-ROM(Compact DiscRead Only Memory,只读光盘)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质、其他磁存储设备、或者能够用于携带或存储计算机程序并能够由计算机读取的任何其他介质,在此不做限定。
存储器4003用于存储执行本申请实施例的计算机程序,并由处理器4001来控制执行。处理器4001用于执行存储器4003中存储的计算机程序,以实现前述方法实施例所示的步骤。
本申请实施例提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时可实现前述方法实施例的步骤及相应内容。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”、“1”、“2”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除图示或文字描述以外的顺序实施。
应该理解的是,虽然本申请实施例的流程图中通过箭头指示各个操作步骤,但是这些步骤的实施顺序并不受限于箭头所指示的顺序。除非本文中有明确的说明,否则在本申请实施例的一些实施场景中,各流程图中的实施步骤可以按照需求以其他的顺序执行。此外,各流程图中的部分或全部步骤基于实际的实施场景,可以包括多个子步骤或者多个阶段。这些子步骤或者阶段中的部分或全部可以在同一时刻被执行,这些子步骤或者阶段中的每个子步骤或者阶段也可以分别在不同的时刻被执行。在执行时刻不同的场景下,这些子步骤或者阶段的执行顺序可以根据需求灵活配置,本申请实施例对此不限制。
以上所述仅是本申请部分实施场景的可选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请的方案技术构思的前提下,采用基于本申请技术思想的其他类似实施手段,同样属于本申请实施例的保护范畴。