一种软件通信协议的校验方法
〖技术领域〗
本发明涉及计算机软件的技术领域,尤其涉及一种软件通信协议的校验方法。
〖背景技术〗
如图1所示,主机与从机之间的通信协议包括物理通信协议和接口、软件通信协议及应用层交互,随着集成电路产业的高速发展,全球已经制定了许多的底层物理通信协议,如SPI、IIC、UART、SD、USB等等,底层物理通信协议有了统一的标准。在实际方案和产品中,为了实现通信的需求,往往需要增加软件通信协议配合底层物理通信协议及其接口来完成,软件通信协议在某些应用也有对应的标准,但是更多的应用仍然需要开发者的自定义来实现,通过自定义的非标准的软件通信协议通常差异巨大,然而有一个共同之处就是软件通信协议的数据需要进行校验,以检查通信命令、数据及其相应是否有效。
目前,常用的自定义的软件通信协议的校验方式包括:
1、不增加校验字段,软件通信协议数据在底层物理通信协议进行校验,适用于带有底层物理通信协议校验的通信方式,比如USB、SD等,缺点是这种方式并不适用于不带通信校验底层物理通信协议,比如SPI,当需要使用SPI通信时,开发者不得不增加通信协议校验。
2、增加CRC校验,比如CRC32、CRC16、CRC8、CRC7是常见的校验方式,这种校验方式检错能力强;缺点是运算开销大、通信需要硬件模块支持,当移植到没有硬件CRC校验的CPU上时,CRC校验只能靠CPU计算,CPU负担加大,同时性能大大降低。
3、增加checksum或者异或等简单的校验方式,这种校验方式运算开销小一些,可以不用硬件模块支持,CPU直接算即可,缺点就是检错偏弱,没有上述第2种方式检错能力强,大数据包的通信出错可能校验不到。
4、固定长度校验固定校验方式,存在上述第2种方式或者第3种方式的缺点,同时通信协议定长,不利于扩展和优化。
由此可见,现有的自定义的软件通信协议存在问题:在现有的各种硬件通信的基础上、软件通信协议的校验方式互不兼容,以至于软件通信不能随意选择校验方式,通信数据校验字段的长度固定而不能随意变更,削弱了主机与从机之间的兼容性,同时使软件通信协议移植困难。
〖发明内容〗
本发明旨在提供一种软件通信协议的校验方法,解决现有各种硬件通信的基础上、软件通信协议的校验方式互不兼容的情况。为了实现本发明的上述目的,本发明的技术方案是:
一种软件通信协议的校验方法,应用于包括主机及从机所构成的通信系统,所述软件通信协议的数据格式包括四个字段,每个所述字段分别与校验方式、数据长度、数据内容及检验值相对应,所述软件通信协议兼容固定值校验方式及可变值校验方式,所述主机查询所述从机支持的校验方式、并根据所述从机支持的校验方式选择适当的校验方式,进行后续的通信;所述主机查询所述从机支持的通信协议命令、并根据所述从机支持的通信命令选择适当的通信命令,进行后续的通信。
优选的,所述校验方法包括以下步骤:
S110、所述主机及所述从机启动并进行通信接口初始化;
S120、所述主机等待,直到检测到所述从机;
S130、所述主机向所述从机发起查询命令,确认所述从机支持的校验方式;
S140、所述从机将自身支持的校验方式列表发给所述主机;
S150、所述主机收到所述从机支持的校验方式的列表,所述主机根据所述从机支持的校验方式选择适当的校验方式,进行后续的通信;
S160、所述主机向所述从机发起查询命令,确认所述从机支持的通信命令;
S170、所述从机将自身支持的通信命令列表发给所述主机;
S180、所述主机收到从机支持的通信命令列表,主机根据所述从机支持的通信命令选择适当的通信命令,进行后续的通信;
S190、所述主机根据设定好的校验方式进行所述从机支持的其他通信命令的通信。
优选的,所述软件通信协议的数据格式中的所述四个字段的排列顺序可以任意设定。
优选的,所述校验方式包括固定值校验、异或校验、和校验、CRC7校验、CRC8校验、CRC16校验或CRC32校验等。
优选的,包括所述主机的以下的通信步骤:
S1010、所述主机启动并初始化通信接口;
S1020、所述主机按照数据包格式封装新命令;
S1030、主机通过对应的物理通信协议和接口发送命令给从机,并等待从机应答;
S1040、主机判断是否收到从机应答,是则进入步骤S1070,否则进入步骤S1050;
S1050、主机判断当前命令是否通信超时,是则进入步骤S1060,否则返回步骤S1040;
S1060、主机判断当前命令发生通信超时的次数是否到达最大次数,是则舍弃当前的通信命令并返回步骤S1020,否则返回步骤S1030;
S1070、主机解析校验方式和长度字段,并按照此方式做应答校验;
S1080、主机判断应答校验是否通过,是则进入步骤S1090;否则返回步骤S1050;
S1090、主机判断当前命令是否需要数据阶段通信,是则进入步骤S1100;否则返回步骤S1020;
S1100、主机判断是否接收数据,是则进入步骤S1110,否则主机发送数据,并返回步骤S1040;
S1110、主机判断是否接收到数据,是则进入步骤S1130,否则进入步骤S1120;
S1120、主机判断数据通信是否超时,是则舍弃当前命令,返回步骤S1020;否则进入步骤S1110;
S1130、主机解析校验方式和长度字段,并按照此方式做数据校验;
S1140、主机判断数据校验是否通过,是则入步骤S1150,否则丢弃无效数据,并返回步骤S1040;
S1150、主机使用此有效数据,并返回步骤S1040。
优选的,包括所述从机的以下的通信步骤:
S2010、从机启动,初始化物理层通信接口,等待接收主机发来的命令数据;
S2020、从机判断是否收到新命令,是则进入步骤S2030,否则继续执行步骤S2020;
S2030、解析校验方式和长度字段,并按照此方式做命令校验;
S2040、从机判断命令校验是否通过,是则进入步骤S2050,否则返回步骤S2020;
S2050、执行命令;
S2060、从机发送命令响应给主机;
S2070、从机判断是否需要数据阶段通信,是则进入步骤S2080,否则返回步骤S2020;
S2080、从机判断是否为接收数据,是则进入步骤S2090,否则从机发送数据,并返回步骤S2060;
S2090、从机判断是否收到数据,是则进入步骤S2110,否则进入步骤S2100;
S2100、从机判断数据通信是否超时,是则返回步骤S2020,否则返回步骤S2090;
S2110、从机解析校验方式和长度字段,并按照此方式做数据校验;
S2120、从机判断数据校验是否通过,是则入步骤S2130,否则丢弃无效数据,并返回步骤S2060;
S2130、从机使用此有效数据,并返回步骤S2060。
本发明的有益效果是:
与现有技术相比,本发明通过制定统一可灵活配置的软件通信协议校验方式,实现各种硬件通信的支持和软件通信协议校验的兼容,使得软件通信主机可以随意选择校验方式,通信数据校验可以为任意长度,大大增加了主从机的兼容性,同时使软件通信协议移植变得轻松简单。
〖附图说明〗
图1是现有技术中、常见的主机与从机应用的示意图;
图2是本发明的实施例、主机与从机通信流程的框架图;
图3是本发明的实施例、主机通信方法的流程图;
图4是本发明的实施例、从机通信方法的流程图;
以下结合附图对本发明的具体实施方式作进一步详细地说明。
〖具体实施方式〗
本发明的较佳实施例如图1-图4所示,附图的作用在于用图形补充说明书文字部分的描述,便于理解本发明的各个技术特征以及整体的技术方案,但不能理解为对本发明的限制。未进行特别解释的技术词语,可视为现有技术的广义含义。
如图1-图4所示,一种软件通信协议的校验方法,应用于包括主机及从机所构成的通信系统,所述软件通信协议的数据格式包括四个字段,每个所述字段分别与校验方式、数据长度、数据内容及检验值相对应,所述软件通信协议兼容固定值校验方式及可变值校验方式,所述主机查询所述从机支持的校验方式、并根据所述从机支持的校验方式选择适当的校验方式,进行后续的通信;所述主机查询所述从机支持的通信协议命令、并根据所述从机支持的通信命令选择适当的通信命令,进行后续的通信,解决了现有各种硬件通信的基础上、软件通信协议的校验方式互不兼容的情况,能够兼容不同平台软件的校验方式的主从机,其中:数据长度表示此数据包的数据长度,其校验方法是根据这个数据长度进行的校验;而数据,则是指通信数据的内容;检验值,则是按照校验方式计算出来的校验值,根据校验方式的不同,校验值的长度会不同,包括固定值和可变值;而所述软件通信协议通过查询从机支持的软件通信协议校验方式,以及通过查询从机支持的软件通信协议命令列表,用于兼容不同平台软件的校验方式的主机和从机,强制支持固定值检验方式,因此满足包括固定值以及计算值的多种长度不同的校验值。本发明通过制定统一可灵活配置的软件通信协议校验方式,实现各种硬件通信的支持和软件通信协议校验的兼容,使得软件通信主机可以随意选择校验方式,通信数据校验可以为任意长度,大大增加了主从机的兼容性,同时使软件通信协议移植变得轻松简单。
优选的,所述校验方法包括以下步骤:
S110、所述主机及所述从机启动并进行通信接口初始化;
S120、所述主机等待,直到检测到所述从机;
S130、所述主机向所述从机发起查询命令,确认所述从机支持的校验方式;
S140、所述从机将自身支持的校验方式列表发给所述主机;
S150、所述主机收到所述从机支持的校验方式的列表,所述主机根据所述从机支持的校验方式选择适当的校验方式,进行后续的通信;
S160、所述主机向所述从机发起查询命令,确认所述从机支持的通信命令;
S170、所述从机将自身支持的通信命令列表发给所述主机;
S180、所述主机收到从机支持的通信命令列表,主机根据所述从机支持的通信命令选择适当的通信命令,进行后续的通信;
S190、所述主机根据设定好的校验方式进行所述从机支持的其他通信命令的通信。
本发明通过制定统一可灵活配置的软件通信协议校验方式,实现对各种硬件通信的支持和软件通信协议校验的兼容,使得软件通信主机可以随意选择校验方式,通信数据校验可以为任意长度,大大增加了主从机的兼容性,同时使软件通信协议移植变得轻松简单。
优选的,所述软件通信协议的数据格式中,所述检验方式、所述数据长度、所述数据内容及所述检验值相对应的所述四个字段的排列顺序可以任意设定。
实施例之一:
字段1 |
字段2 |
字段3 |
字段4 |
校验方式 |
数据长度 |
数据 |
校验值 |
实施例之二:
字段1 |
字段2 |
字段3 |
字段4 |
数据长度 |
校验方式 |
数据 |
校验值 |
实施例之三:
字段1 |
字段2 |
字段3 |
字段4 |
校验方式 |
数据长度 |
校验值 |
数据 |
实施例之四:
字段1 |
字段2 |
字段3 |
字段4 |
校验方式 |
数据 |
数据长度 |
校验值 |
诸如此类的实施例,可以有24种排列组合,但是上述的实施例之一及实施例之二是优选的实施例,便于识别、理解和使用。
优选的,所述校验方式包括固定值校验、异或校验、和校验、CRC7校验、CRC8校验、CRC16校验或CRC32校验等,其检验值,则是按照校验方式计算出来的校验值,根据校验方式的不同,校验值的长度会不同,其实施例为:固定值校验、异或校验、和校验、CRC7校验及CRC8校验的校验值的长度均为1BYTE;CRC16校验的校验值的长度为2BYTE;CRC32校验的校验值的长度为4BYTE。其中,BYTE表示字节。例如,主机包含具有很强运算能力的硬件CRC32模块,但是从机是个运算能力很弱的单片机,单片机不包含硬件CRC32模块,如果主机强制实用CRC32校验方式,从机为了做这个CRC32校验要消耗很大部分的CPU资源,在本发明中,主机可以通过查询所述从机支持的校验方式、从机反馈适当的校验方式为异或校验,主机可以根据所述从机支持的异或校验、选择异或校验作为主机与从机之间的校验方式,进行后续的通信,则节省了从机的CPU资源,使得主机与从机之间的通信得以顺利进行,这也使得主机与从机在不同的硬件基础上、获得了相互兼容的能力。
优选的,包括所述主机的以下的通信步骤:
S1010、所述主机启动并初始化通信接口;
S1020、所述主机按照数据包格式封装新命令;
S1030、主机通过对应的物理通信协议和接口发送命令给从机,并等待从机应答;
S1040、主机判断是否收到从机应答,是则进入步骤S1070,否则进入步骤S1050;
S1050、主机判断当前命令是否通信超时,是则进入步骤S1060,否则返回步骤S1040;
S1060、主机判断当前命令发生通信超时的次数是否到达最大次数,是则舍弃当前的通信命令并返回步骤S1020,否则返回步骤S1030;
S1070、主机解析校验方式和长度字段,并按照此方式做应答校验;
S1080、主机判断应答校验是否通过,是则进入步骤S1090;否则返回步骤S1050;
S1090、主机判断当前命令是否需要数据阶段通信,是则进入步骤S1100;否则返回步骤S1020;
S1100、主机判断是否接收数据,是则进入步骤S1110,否则主机发送数据,并返回步骤S1040;
S1110、主机判断是否接收到数据,是则进入步骤S1130,否则进入步骤S1120;
S1120、主机判断数据通信是否超时,是则舍弃当前命令,返回步骤S1020;否则进入步骤S1110;
S1130、主机解析校验方式和长度字段,并按照此方式做数据校验;
S1140、主机判断数据校验是否通过,是则入步骤S1150,否则丢弃无效数据,并返回步骤S1040;
S1150、主机使用此有效数据,并返回步骤S1040。
优选的,包括所述从机的以下的通信步骤:
S2010、从机启动,初始化物理层通信接口,等待接收主机发来的命令数据;
S2020、从机判断是否收到新命令,是则进入步骤S2030,否则继续执行步骤S2020;
S2030、解析校验方式和长度字段,并按照此方式做命令校验;
S2040、从机判断命令校验是否通过,是则进入步骤S2050,否则返回步骤S2020;
S2050、执行命令;
S2060、从机发送命令响应给主机;
S2070、从机判断是否需要数据阶段通信,是则进入步骤S2080,否则返回步骤S2020;
S2080、从机判断是否为接收数据,是则进入步骤S2090,否则从机发送数据,并返回步骤S2060;
S2090、从机判断是否收到数据,是则进入步骤S2110,否则进入步骤S2100;
S2100、从机判断数据通信是否超时,是则返回步骤S2020,否则返回步骤S2090;
S2110、从机解析校验方式和长度字段,并按照此方式做数据校验;
S2120、从机判断数据校验是否通过,是则入步骤S2130,否则丢弃无效数据,并返回步骤S2060;
S2130、从机使用此有效数据,并返回步骤S2060。
以上实施例只是为本发明的较佳实施例,并非以此限制本发明的实施范围,凡依本发明之精神或原则所作的等效变化,不经创造性所作的任何修改、等同替换、改进等,均应涵盖于本发明的保护范围内。