与听力装置进行数据传输的方法和装置
技术领域
本发明涉及嵌入式通信领域,特别是涉及与听力装置进行数据传输的方法和装置。
背景技术
嵌入式系统已经广泛应用于众多领域,听力装置也逐渐使用嵌入式系统实现。
听力装置,例如助听器、人工耳蜗、各类型耳机等,已经成为了很多听力受损和正常听力人士日常生活中必不可少的一部分。听力装置形状由传统的佩戴在身上的盒式机逐渐缩小到直接塞入耳道的隐蔽式的耳内机;听力装置的内部信号处理方式也从模拟电路发展到现在的数字信号处理器(Digital Signal Processor,简称DSP)。正是由于数字信号处理器的出现,使得现在的听力装置不仅仅可以对声信号进行放大处理,还可以提供更多的功能,例如:宽动态范围压缩、反馈抑制、环境噪声处理、瞬时噪声处理、风噪声抑制、主动噪声控制、输出增益控制等。
不同的用户有着不同的听力状况和聆听需求,因而听力装置需要针对不同的听力状况和/或聆听环境,提供相应的听力解决方案,即对听力装置进行参数验配和调试,然后再将这些验配和调试参数通过外部设备(例如电脑、智能手机、听力装置编程器等)写入到听力装置的DSP和存储器中,使得听力装置可以根据这些写入的参数调整其算法功能以满足用户听力状况和/或聆听环境的需求。
传统的听力装置通信方式有以下几种:1、单总线,这种通信方式对物理管脚的要求最低,只需要一个数据管脚,但是由于没有时钟信号的存在,使得通信的过程需要严格按照规定的时序进行操作,因此,通信速率最低且无法适应大量数据传输的场合;2、串口总线,这种通信方式对物理管脚的要求不高,需要两个物理管脚,分别负责发送和接收,然而通信时需要预知设备的波特率,如果波特率有误通信将无法进行;3、I2C总线或SPI总线等,该总线也需要占用两个物理管脚,分别用于传输时钟与数据,两个管脚皆为双向通信,数据传输需要由主机进行发起,传输过程中从机可以根据需求对通信进行暂停和继续。
随着听力装置的发展,越来越多的听力装置产商抛弃了早期单总线和串口总线的通信方式,转而使用I2C总线、SPI总线和蓝牙低功耗(Bluetooth Low Energy,BLE)等基于主从通信协议的通信方式。然而,基本的I2C总线、SPI总线或BLE的主从通信方式,只是简单地对数据进行收发,并不提供数据打包以及完整性校验的功能;因此不适合进行高效的数据传输,也无法对传输过程中导致的数据错误进行及时有效的发现。
因此,现有技术中缺乏使得外部主机与听力装置间进行高效无错的数据通信的技术手段。
发明内容
本发明的一个目的是要提供一种高效的与听力装置进行数据传输的方法和装置。
本发明一个进一步的目的是提高通信的准确性。
特别地,本发明提供了一种与听力装置进行数据传输的方法,包括:向听力装置发送初始命令,初始命令至少包括听力装置的通信地址、第一读写长度以及第一命令标识,其中第一读写长度用于指示与听力装置进行传输的数据长度、第一命令标识用于指示听力装置需执行的命令类型;等待预设时间,以供听力装置在预设时间内对初始命令进行校验以及解析,并执行与解析结果对应的动作;向听力装置发送读请求命令,读请求命令至少包括通信地址、第二读写长度,其中第二读写长度用于指示需从听力装置接收的数据长度;接收由听力装置根据读请求命令发送的执行数据。
可选地,执行数据至少包括通信地址以及第二命令标识,其中第二命令标识由听力装置根据对初始命令的执行结果生成,且与第一命令标识具有相同的数据结构,并且在接收执行数据之后还包括:对执行数据进行校验,并在校验通过后根据第二命令标识确定听力装置的执行结果。
可选地,在听力装置的执行结果为执行错误或超时的情况下,接收听力装置返回的错误代码,并决定是否对听力装置重新发送初始命令,以使听力装置重新执行。
可选地,在听力装置还未执行完成的情况下,外部设备进行延时等待,使听力装置可以继续执行,外部设备再从听力装置读取状态位、直至听力装置的执行结果为成功或者超时。在执行数据校验错误或者听力装置的执行结果为执行错误、超时的情况下,听力装置将通过返回错误代码(如0x7FFFFF)用以告知外部设备,由外部设备决定是否对听力装置再次发送数据并使听力装置重新执行与解析结果。
可选地,初始命令的类型与第一命令标识对应,并且初始命令包括以下任意一种或多种:指令提供命令,用于向听力装置提供控制指令;数据写入命令,用于向听力装置提供数据;数据读取命令,用于从听力装置接收数据。
可选地,第一读写长度和第二读写长度具有相同的数据结构,分别包括读写标记和指示数据长度的字节数,其中读写标记用于指示本次向听力装置发送数据或者下次从听力装置接收数据的状态,指令提供命令以及数据读取命令中的第一读写长度的字节数为零,以及数据写入命令还包括含有向听力装置提供的数据的数据段,第一读写长度的字节数用于指示数据段的字节数。
可选地,在确定听力装置对数据读取命令执行结果为成功后还包括:向听力装置发送接收启动命令,接收启动命令至少包括通信地址、第三读写长度,其中第三读写长度和第一读写长度具有相同的数据结构,并且第三读写长度的读写标记用于指示下次从听力装置接收数据的状态,第三读写长度的字节数用于指示需从听力装置接收数据的长度;接收由听力装置响应于接收启动命令的响应数据。
可选地,向听力装置发送的命令中均包括校验码,其用于听力装置对接收到的命令进行校验,并且从听力装置接收到的数据中也均包括校验码,其用于对接收到的数据进行校验。
根据本发明的另一个方面,还提供了一种与听力装置进行数据传输的装置,包括:第一发送模块,配置成向听力装置发送初始命令,初始命令至少包括听力装置的通信地址、第一读写长度以及第一命令标识,其中第一读写长度用于指示与听力装置进行传输的数据长度、第一命令标识用于指示听力装置需执行的命令类型;第二发送模块,配置成等待预设时间,以供听力装置在预设时间内对初始命令进行校验以及解析,并执行与解析结果对应的动作;向听力装置发送读请求命令,读请求命令至少包括通信地址、第二读写长度,其中第二读写长度用于指示需从听力装置接收的数据长度;第一接收模块,配置成接收由听力装置根据读请求命令发送的执行数据。
可选地,执行数据至少包括通信地址以及第二命令标识,其中第二命令标识由听力装置根据对初始命令的执行结果生成,且与第一命令标识具有相同的数据结构,并且装置还包括:数据分析模块,配置成对执行数据进行校验,并在校验通过后根据第二命令标识确定听力装置的执行结果;并且在听力装置的执行结果为执行错误或超时的情况下,外部设备接收听力装置返回的错误代码,并决定是否对听力装置重新发送初始命令,以使听力装置重新执行。
可选地,初始命令的类型与第一命令标识对应,并且初始命令包括以下任意一种或多种:指令提供命令,用于向听力装置提供控制指令;数据写入命令,用于向听力装置提供数据;以及数据读取命令,用于从听力装置接收数据,第一读写长度和第二读写长度具有相同的数据结构,分别包括读写标记和指示数据长度的字节数,读写标记用于指示本次向听力装置发送数据或者下次从听力装置接收数据的状态,指令提供命令以及数据读取命令中的第一读写长度的字节数为零,以及数据写入命令还包括含有向听力装置提供的数据的数据段,第一读写长度的字节数用于指示数据段的字节数,并且装置还包括:第三发送模块,配置成在确定听力装置对数据读取命令执行结果为成功后,向听力装置发送接收启动命令,接收启动命令至少包括通信地址、第三读写长度,其中第三读写长度和第一读写长度具有相同的数据结构,并且第三读写长度的读写标记用于指示下次从听力装置接收数据的状态,第三读写长度的字节数用于指示需从听力装置接收数据的长度;以及第二接收模块,配置成接收由听力装置响应于接收启动命令的响应数据。
本发明的与听力装置进行数据传输的方法和装置,适用于外部设备与听力装置进行数据传输的过程,通过优化传输流程和数据传输格式,保证了数据传输的正确性,提高了数据传输的效率,可用于各种通信总线以及无线通信等基于主从通信协议的通信方式中,使得听力装置与外部设备进行数据交互的过程中实现高效、准确的目标。
进一步地,本发明的与听力装置进行数据传输的方法和装置,数据传输过程由外部设备发起,首先发送带有命令标识的初始命令,明确与听力装置进行数据传输的种类,利用读写长度确定读写类型和数据字节数,便于听力装置进行解析执行,然后通过交互确定听力装置的执行结果,完成数据传输,数据结构紧凑,整个过程高效准确。
更进一步地,本发明的与听力装置进行数据传输的方法和装置,传输长度可变、具备自动校验以及自动重传的功能,经过实际使用,证明了在多种外部设备与听力装置通信的环境中均能实现很好的传输效果,既可以进行数据交互也可以实现对听力装置的程序写入。
根据下文结合附图对本发明具体实施例的详细描述,本领域技术人员将会更加明了本发明的上述以及其他目的、优点和特征。
附图说明
后文将参照附图以示例性而非限制性的方式详细描述本发明的一些具体实施例。附图中相同的附图标记标示了相同或类似的部件或部分。本领域技术人员应该理解,这些附图未必是按比例绘制的。附图中:
图1是根据本发明一个实施例的与听力装置进行数据传输的方法的示意图;
图2是根据本发明一个实施例的与听力装置进行数据传输的装置的示意图;
图3是根据本发明一个实施例的与听力装置进行数据传输的方法向听力装置发送命令时的流程图;
图4是根据本发明一个实施例的与听力装置进行数据传输的方法向听力装置发送数据时的流程图;以及
图5是根据本发明一个实施例的与听力装置进行数据传输的方法从听力装置发送数据时的流程图。
具体实施方式
本实施例提供了一种与听力装置进行数据传输的方法和装置,适用于外部设备与听力装置进行数据传输的过程,可用于外部设备向听力装置发送数据、外部设备向听力装置发送指令、外部设备从听力装置读取数据,实现外部设备对听力装置进行编程。外部设备可以通过主从通信协议对听力装置进行数据传输,可以采用的主从通信协议可以包括I2C(内部集成电路总线,Inter-Integrated Circuit)、SPI(串行外设接口,SerialPeripheral Interface)、I2S(集成电路内置音频总线,Inter-IC Sound)和蓝牙BLE(低功耗蓝牙,Bluetooth Low Energy)等。外部设备可以是嵌入主从通信协议的专门编程器、计算机、手机、笔记本和平板电脑等电子设备。
图1是根据本发明一个实施例的与听力装置进行数据传输的方法的示意图,该与听力装置进行数据传输的方法可由上述外部设备执行,包括以下步骤:
步骤S102,向听力装置发送初始命令。
初始命令中至少包括听力装置的通信地址、第一读写长度以及第一命令标识,其中第一读写长度用于指示与听力装置进行传输的数据长度、第一命令标识用于指示听力装置需执行的命令类型。听力装置的通信地址具有唯一性,用于在通信过程中标识听力装置。
初始命令可以有多种,例如包括指令提供命令、数据写入命令以及数据读取命令。其中指令提供命令用于向听力装置提供控制指令;数据写入命令用于向听力装置提供数据;数据读取命令用于从听力装置接收数据。上述初始命令的类型可以通过第一命令标识来标识,也就是初始命令的类型与第一命令标识对应。
步骤S104,等待预设时间。
该预设时间根据听力装置的数据处理能力进行设置,例如设置为60ms。听力装置可以在预设时间内对初始命令进行校验以及解析,并执行与解析结果对应的动作。如果校验或者解析失败,则听力装置返回错误代码(如0x7FFFFF),由外部设备决定是否对听力装置再次发送数据并使听力装置重新执行与解析结果对应的动作。
步骤S106,向听力装置发送读请求命令。
读请求命令至少包括通信地址、第二读写长度,其中第二读写长度用于指示需从听力装置接收的数据长度。
读请求命令也可以与初始命令具有相似的格式。第一读写长度和第二读写长度可以具有相同的数据结构,分别包括读写标记和指示数据长度的字节数,其中读写标记用于指示本次向听力装置发送数据或者下次从听力装置接收数据的状态,指令提供命令以及数据读取命令中的第一读写长度的字节数为零,以及数据写入命令还包括含有向听力装置提供的数据的数据段,第一读写长度的字节数用于指示数据段的字节数,也就是第一读写长度的字节数与数据段的字节数相对应,从而可以根据第一读写长度的字节数确定出数据段的实际字节数比如0x01可以代表3个字节数据,0x10可以代表48个字节数据等等。
步骤S108,接收由听力装置根据读请求命令发送的执行数据。
外部设备接收到的执行数据可以包括通信地址以及第二命令标识,其中第二命令标识由听力装置根据对初始命令的执行结果生成。第二命令标识可以与第一命令标识具有相同的数据结构,其可以由听力装置在执行初始命令后对第一命令标识进行修改得出。
外部设备在接收执行数据之后还可以包括:对执行数据进行校验,并在校验通过后根据第二命令标识确定听力装置的执行结果。在本实施例中,外部设备向听力装置发送的数据和命令以及听力装置向外部设备发送的数据中均包括校验码,以供接收方利用校验码对数据或命令进行校验,确保数据的准确性。校验码的校验方式包括但不限于奇偶校验、和校验或者其他的校验方式。
在执行数据校验错误或者听力装置的执行结果为执行错误的情况下,外部设备可以决定是否对听力装置再次发送数据并使听力装置重新执行与解析结果对应的动作,通过重复步骤S104至S108,正确地完成数据通信流程。
对于外部设备需要从听力装置读取数据的情况下,外部设备在确定听力装置对数据读取命令执行结果为成功后还可以执行以下步骤:向听力装置发送接收启动命令;接收由听力装置响应于接收启动命令的响应数据。接收启动命令也类似于读请求命令和初始命令,可以至少包括通信地址、第三读写长度,其中第三读写长度和第一读写长度具有相同的数据结构,并且第三读写长度的读写标记用于指示下次从听力装置接收数据的状态,第三读写长度的字节数指示听力装置接收数据的长度,可以根据第三读写长度的字节数确定出听力装置接收数据的实际字节数,比如0x01可以代表3个字节数据,0x10可以代表48个字节数据等等。
本实施例还提供了一种与听力装置进行数据传输的装置100,用于执行上述与听力装置进行数据传输的方法,使外部设备可以与听力装置进行准确高效的数据传输。图2是根据本发明一个实施例的与听力装置进行数据传输的装置100的示意图,该与听力装置进行数据传输的装置100一般性地可以包括:第一发送模块110、第二发送模块120、第一接收模块130、数据分析模块140、第三发送模块150、第二接收模块160。
在本实施例的与听力装置进行数据传输的装置100中,第一发送模块110可以配置成向听力装置发送初始命令。初始命令至少包括听力装置的通信地址、第一读写长度以及第一命令标识,其中第一读写长度用于指示与听力装置进行传输的数据长度、第一命令标识用于指示听力装置需执行的命令类型。
第二发送模块120可以配置成等待预设时间,以供听力装置在预设时间内对初始命令进行校验以及解析并执行与解析结果对应的动作;然后向听力装置发送读请求命令,读请求命令至少包括通信地址、第二读写长度,其中第二读写长度用于指示需从听力装置接收的数据长度。在听力装置还未执行完成的情况下,外部设备进行延时等待,使听力装置可以继续执行,外部设备再从听力装置读取状态位、直至听力装置的执行结果为成功或者超时。在执行数据校验错误或者听力装置的执行结果为执行错误、超时的情况下,听力装置将通过返回错误代码(如0x7FFFFF)用以告知外部设备,由外部设备决定是否对听力装置再次发送数据并使听力装置重新执行与解析结果。
第一接收模块130可以配置成接收由听力装置根据读请求命令发送的执行数据。
执行数据至少包括通信地址以及第二命令标识,其中第二命令标识由听力装置根据对初始命令的执行结果生成,且与第一命令标识具有相同的数据结构。
数据分析模块140可以配置成对执行数据进行校验,并在校验通过后根据第二命令标识确定听力装置的执行结果。
在所述执行数据校验错误或者听力装置的执行结果为执行错误的情况下,可以接收所述听力装置返回的错误代码,并可以决定是否对所述听力装置重新发送初始命令,以使所述听力装置重新执行。
初始命令的类型与第一命令标识对应,并且初始命令包括以下任意一种或多种:用于向听力装置提供控制指令的指令提供命令;用于向听力装置提供数据的数据写入命令;用于从听力装置接收数据的数据读取命令。
第一读写长度和第二读写长度具有相同的数据结构,分别包括读写标记和指示数据长度的字节数,读写标记用于指示本次向听力装置发送数据或者下次从听力装置接收数据的状态,指令提供命令以及数据读取命令中的第一读写长度的字节数为零,以及数据写入命令还包括含有向听力装置提供的数据的数据段,第一读写长度的字节数用于指示数据段的字节数。
第三发送模块150用于从听力装置接收数据时,在确定听力装置对数据读取命令执行结果为成功后,向听力装置发送接收启动命令,接收启动命令至少包括通信地址、第三读写长度,其中第三读写长度和第一读写长度具有相同的数据结构,并且第三读写长度的读写标记用于指示下次从听力装置接收数据的状态,第三读写长度的字节数用于指示需从听力装置接收数据的长度。
第二接收模块160,配置成接收由听力装置响应于接收启动命令的响应数据。
本实施例的与听力装置进行数据传输的方法和装置,适用于外部设备与听力装置进行数据传输的过程中,通过优化传输流程和数据传输格式,保证了数据传输的正确性,提高了数据传输的效率,可用于各种通信总线以及无线通信等基于主从通信协议的通信方式中,使得听力装置与外部设备进行数据交互的过程中实现高效、准确的目标。
而且,本实施例的与听力装置进行数据传输的方法和装置,数据传输过程由外部设备发起,首先发送带有命令标识的初始命令,明确与听力装置进行数据传输的种类,利用读写长度确定读写类型和数据字节数,便于听力装置进行解析执行,然后通过交互确定听力装置的执行结果,完成数据传输,数据结构紧凑,整个过程高效准确。
以下结合本实施例的与听力装置进行数据传输的方法使用的一种通讯协议,分别对向听力装置提供控制指令,向听力装置提供数据,从听力装置接收数据的三个过程进行介绍。
在该通信协议的数据结构包括如下字段:
通信地址Slv_addr,用于标识听力装置的通信地址;
读写标记RW,用于标识本次通信为读取或写入;
下次传输读写标记NRW,用于标识下次传输为读取或写入;
读写长度Len,当读写标记RW为写入时,读写长度Len用于标识本次传输的数据区的长度,当下次传输读写标记NRW为读取时,读写长度Len用于标识下次传输的数据区的长度;
命令标识Cmd,用于标识本次操作的命令类型;
传输数据Data,为传输目标;
校验码Checksum,用于对数据进行校验。
表1示出了上述通信协议数据结构一种具体的字段及其数据长度,其符合I2C总线标准,满足主从通信协议要求:
表1
字段名称 |
长度(字节) |
通信地址Slv_addr |
1 |
读写长度Len |
0或1 |
命令标识Cmd |
0或3 |
传输数据Data |
0或48 |
校验码Checksum |
1 |
在该数据的字段中,通信地址Slv_addr占用1个字节;用于标识数据长度的读写长度Len占用0个或1个字节;用于标识命令类型的Cmd占用0个或3个字节;传输数据Data占用0到48个字节;校验码Checksum占用1个字节。
表2示出了上述通信协议数据结构中读写长度Len各位及其代表含义:
表2
读写长度Len中可以数据长度和读写标识两部分,其中读写标识位为0时,其后的数据长度为本次命令中包含的向听力装置提供的数据的字节长度;读写标识位为1时,其后的数据长度为下次需从听力装置接收的数据的字节长度。例如数据长度为48字节,则Len=48/3=16=0x10。
表3示出了上述通信协议数据结构中命令标识Cmd各位及其代表含义:
表3
命令标识Cmd是由3个字节组成一个24位数,包含:
第23位的FURPROC标记位,该位为1表示该命令由听力装置来处理,该位为0表示该命令由外部设备来处理。
第15到第12位组成的PKTNUM包号标记,当一次通信所需传输的数据超过48字节时,需将数据将拆分成多个包来发送;PKTNUM表示当前包号,取值范围为0~15。
第4位的RDWRTBN写入区域标记,该位为0时,标识数据写入到ROM或写入到RAM中,该位为1标识数据需要从RAM中读取。ROM包括但不限于EEPROM、Flash等掉电数据不丢失的存储介质。
除FURPROC、PKTNUM和RDWRTBN以外,其他位为具体命令标识的编码。
表4示出了上述通信协议数据结构中传输数据Data各位及其代表含义:
表4
Data由3个字节组成一个24位的字,一共48个字节可以组成16个字。为了数据更紧凑也可以按位来分配,具体实现过程中可根据实际情况进行调整。
校验码Checksum可以使用各种校验方式,其中一种可选的校验码计算方式为:
SUM=Len、Cmd以及Data的总和;
Last byte=SUM&(0XFF);
Checksum=0XFF-SUM。
外部设备和听力装置在进行通信的所有过程可以均按照上述数据结构进行。
图3是根据本发明一个实施例的与听力装置20进行数据传输的方法向听力装置发送命令时的流程图。
步骤S302:外部设备10向听力装置20发送初始命令,初始命令包含通信地址Slv_addr,读写标记RW,读写长度Len,命令标识Cmd以及校验码Checksum。
表5示出了初始命令使用表1至4中的通讯协议时的一个实例:
表5
如表5所示,初始命令的读写标记RW位为(0b0000,0010|0b0);读写长度Len为0x00,表示初始命令向听力装置20提供的数据的读写长度为0;命令标识Cmd为0x800000,表示听力装置20静音控制命令。校验码Checksum为0x7f,根据上述介绍的公式按照Len和Cmd计算得出。
步骤S304:听力装置20在接收到外部设备10发来的初始命令之后,对初始命令完整性进行校验,如果校验通过则对初始命令进行解析,完成解析后,按照初始命令的解析结果执行对应的操作,执行完成后对命令标识Cmd中的执行完成标记位进行标记。如果校验失败,则将命令标识Cmd中的命令替换为错误代码。
听力装置20在初始命令校验正确并解析后执行静音操作。执行完成后将所述Cmd的FURPROC标记位清零指示外部设备10听力装置20已经执行完毕。如校验出错或者没有Cmd相应的操作指令则返回0x7fffff的错误代码给外部设备10,外部设备10如果接收到0x7fffff的错误代码或者超时没接到反馈数据时,可以决定是否再次发送数据并使听力装置重新执行与解析结果对应的动作。
步骤S306:外部设备10在等待一定时间(例如60ms)后向听力装置20发送读请求命令,读请求命令中包含通信地址Slv_addr,读写标记RW,下次传输读写标记NRW,下次传输的读写长度Len以及校验码Checksum。
表6示出了读请求命令使用表1至4中的通讯协议时的一个实例:
表6
区段 |
字节编号 |
数据 |
Slv_addr |
字节0 |
0x02 |
Len |
字节0 |
0x80 |
Checksum |
字节0 |
0x7f |
读请求命令中通信地址Slv_addr为0x02,读写标记RW位为(0b0000,0010|0b0);Len为0x80,表示下一次读操作所要获取的读写长度为0。Checksum为0x7f。
步骤S308:听力装置20向外部设备10返回执行数据,外部设备10接收由听力装置20根据读请求命令发送的执行数据,执行数据中包含通信地址Slv_addr,读写标记RW,命令标识Cmd以及校验码Checksum。
表7示出了执行数据使用表1至4中的通讯协议时的一个实例:
表7
执行数据中Slv_addr为0x03;读写标记RW位为(0b0000,0010|0b1);Cmd为0x000000;Checksum为0xff。
步骤S310:外部设备10通过步骤S308返回的命令标识、校验码来对执行数据进行校验,同时通过命令标识分析听力装置20的命令完成状态,如果命令未完成则重复步骤S304至步骤S308直至超时或命令完成。
例如,外部设备10可以检查Cmd的FURPROC标记位,若为1则表示该命令还需要听力装置20进一步处理,返回执行步骤302;若为0则表示该命令需要由外部设备10处理,即听力装置20已处理完成。
上述步骤完成了一次外部设备10向听力装置20发送控制命令的通信过程。上述Cmd仅为一个示例,实际应用中Cmd可以包含其他内容。
图4是根据本发明一个实施例的与听力装置20进行数据传输的方法向听力装置20发送数据时的流程图。
步骤S402:外部设备10向听力装置20发送初始命令,其中包含通信地址Slv_addr,读写标记RW,读写长度Len,命令标识Cmd、需传输的数据Data、以及校验码Checksum。
表8示出了该初始命令使用表1至4中的通讯协议时的一个实例:
表8
如表8中所示,通信地址Slv_addr为0x02;读写标记RW位为(0b0000,0010|0b0);读写长度Len为0x10,表示向听力装置20提供的数据的读写长度为48个字节;命令标识Cmd为0x801041,表示写入校准值命令,传输的数据Data为48字节数据,包含校准相关的所有参数。校验码Checksum为0x20,根据上述介绍的公式按照Len、Cmd和Data计算得出。
步骤S404,听力装置20在接收到外部设备10发来的初始命令之后,对初始命令的完整性进行校验,如果校验通过则对初始命令进行解析,完成解析后执行命令标识Cmd以及数据Data对应的操作,执行完成后对命令标识Cmd中的执行完成标记位进行标记。如果校验失败,则将命令标识Cmd中的命令替换为错误代码。
例如听力装置20在执行完成后,可将所述Cmd的FURPROC标记位清零以通知外部设备10听力装置20已经执行完毕。如校验出错或者没有Cmd相应的操作指令则返回0x7fffff的错误代码给外部设备10。
步骤S406:外部设备10在等待一定时间(例如60ms)后向听力装置20发送读请求命令,读请求命令中包含通信地址Slv_addr,读写标记RW,下次传输读写标记NRW,下次传输的读写长度Len以及校验码Checksum。外部设备10如果接收到0x7fffff的错误代码或者超时没接到反馈数据时,可以决定是否再次发送数据并使听力装置重新执行与解析结果对应的动作。
该读请求命令使用表1至4中的通讯协议时的实例与表6所示的实例相同,读请求命令中通信地址Slv_addr为0x02,读写标记RW位为(0b0000,0010|0b0);Len为0x80,表示下一次读操作所要获取的读写长度为0。Checksum为0x7f。
步骤S408:外部设备10从听力装置20读取执行数据,其中包含通信地址Slv_addr,读写标记RW,命令标识Cmd以及校验码Checksum。
表9示出了该执行数据使用表1至4中的通讯协议时的一个实例:
表9
执行数据中Slv_addr为0x03;读写标记RW位为(0b0000,0010|0b1);Cmd为0x001041;Checksum为0x20。
步骤S410:外部设备10通过步骤S408返回的命令标识Cmd、校验码Checksum对执行数据进行校验,并通过返回的命令标识Cmd分析听力装置20的命令完成状态,如果命令未完成,重复步骤S404至步骤S408直至超时或命令完成。
例如外部设备10可以检查Cmd的FURPROC标记位,若为1则表示该命令还需要听力装置20进一步处理,返回执行步骤S402;若为0则表示该命令需要由外部设备10处理,即听力装置20已处理完成。
上述步骤以上完成了一次外部设备10向听力装置20写入数据通信过程。需要指出的是,上述Len、Cmd、Data、Checksum均为示例,在实际应用时可根据具体情况进行改变。
图5是根据本发明一个实施例的与听力装置20进行数据传输的方法从听力装置20发送数据时的流程图。
步骤S502:外部设备10向听力装置20发送初始命令,其中包含通信地址Slv_addr,读写标记RW,读写长度Len,命令标识Cmd、需传输的数据Data、以及校验码Checksum。
表10示出了该初始命令使用表1至4中的通讯协议时的一个实例:
表10
如表10中所示,通信地址Slv_addr为0x02;读写标记RW位为(0b0000,0010|0b0);读写长度Len为0x10,表示向听力装置20提供的数据的读写长度为0,也就是没有提供数据;命令标识Cmd为0x801051,表示从听力装置20读校准值命令,传输的数据Data为48字节数据,包含校准相关的所有参数。校验码Checksum为0x1e,根据上述介绍的公式按照Len和Cmd计算得出。
步骤S504:听力装置20在接收到外部设备10发来的初始命令之后,对初始命令的完整性进行校验,如果校验通过则对初始命令进行解析,完成解析后,将命令标识Cmd指示出的听力装置20数据复制到缓存区,复制完成后对命令标识Cmd中的执行完成标记位进行标记。如果校验失败,则将命令标识Cmd中的命令替换为错误代码。
例如听力装置20在执行完成后,可将所述Cmd的FURPROC标记位清零以通知外部设备10听力装置20已经执行完毕。如校验出错或者没有Cmd相应的操作指令则返回0x7fffff的错误代码给外部设备10。
该读请求命令使用表1至4中的通讯协议时的实例与表6所示的实例相同,读请求命令中通信地址Slv_addr为0x02,读写标记RW位为(0b0000,0010|0b0);Len为0x80,表示下一次读操作所要获取的读写长度为0。Checksum为0x7f。
步骤S506:外部设备10在等待一定时间(例如60ms)后向听力装置20发送读请求命令,读请求命令中包含通信地址Slv_addr,读写标记RW,下次传输读写标记NRW,下次传输的读写长度Len以及校验码Checksum。
步骤S508:外部设备10接收由听力装置20根据读请求命令发送的执行数据,执行数据中包含通信地址Slv_addr,读写标记RW,命令标识Cmd以及校验码Checksum。
该执行数据使用表1至4中的通讯协议时的实例与表6所示的实例相同,执行数据中Slv_addr为0x03;读写标记RW位为(0b0000,0010|0b1);Cmd为0x001041;Checksum为0x20。
步骤S510:外部设备10通过步骤S508返回的命令标识、校验码来对执行数据进行校验,并通过返回的命令标识Cmd分析听力装置20的命令完成状态,如果命令未完成,则重复步骤S504至步骤S508直至超时或命令完成,如果超时,则结束本次从听力装置20读取数据的过程,该次通信失败;如果命令已完成则执行步骤S512。
例如外部设备10可以检查Cmd的FURPROC标记位,若为1则表示该命令还需要听力装置20进一步处理,返回执行步骤S402;若为0则表示该命令需要由外部设备10处理,即听力装置20已处理完成,需要继续执行步骤S512以完成数据读取。
步骤S512:等待预设时间(例如60ms)后,外部设备10向听力装置20发送接收启动命令,接收启动命令包含通信地址Slv_addr,读写标记RW,下次传输读写标记NRW,下次传输的读写长度Len以及校验码Checksum。
表9示出了该接收启动命令使用表1至4中的通讯协议时的一个实例:
表9
区段 |
字节编号 |
数据 |
Slv_addr |
字节0 |
0x02 |
Len |
字节0 |
0x90 |
Checksum |
字节0 |
0x6f |
如表9所示,外部设备10向听力装置20发送读写长度为48字节的接收启动命令:其中Slv_addr为0x02;读写标记RW位为(0b0000,0010|0b0);读写长度Len为0x90,表示下一次需要接收读取的数据长度为48个字节。校验码Checksum为0x6f。
步骤S514:外部设备10接收由听力装置20响应于接收启动命令的响应数据,响应数据包含通信地址Slv_addr,读写标记RW,命令标识Cmd、传输的数据Data以及校验码Checksum。
表10示出了该响应数据使用表1至4中的通讯协议时的一个实例:
表10
如表10所示,外部设备10从听力装置20接收总共读取51个字节的数据:其中Slv_addr为0x03;读写标记RW位为(0b0000,0010|0b1);51个字节的数据包含3个字节的Cmd、48个字节的Data;Checksum为0x20。
利用上述步骤完成了一次外部设备10从听力装置20获取数据的通信过程。读写长度Len可根据实际需要而改变。
通过上述三种数据传输的实例可以看出,外部装置和听力装置20交互过程中出现的命令包括以下几种:1、Simple Command(包括指令提供命令、数据读取命令、执行数据);2、Advanced Command Write(包括数据写入命令);3、Advance Command Read(包括接收启动命令、响应数据);4、Read Request Command(包括读请求命令)。表11示出了外部装置和听力装置20交互过程各类命令包含的字段。
表11
从表中可以看出,外部装置和听力装置20交互过程采用了相同的数据协议,数据结构紧凑,便于根据业务进行数据传输,实现了高效准确传输。
本实施例的与听力装置进行数据传输的方法,在外部设备与听力装置进行数据传输的过程中,通过优化传输流程和数据传输格式,保证了数据传输的正确性,提高了数据传输的效率,可用于各种通信总线以及无线通信等基于主从通信协议的通信方式中,使得听力装置与外部设备进行数据交互的过程中实现高效、准确的目标。并且上述进行数据传输的方法,数据传输过程由外部设备发起,首先发送带有命令标识的初始命令,明确与听力装置进行数据传输的种类,利用读写长度确定读写类型和数据字节数,便于听力装置进行解析执行,然后通过交互确定听力装置的执行结果,完成数据传输,数据结构紧凑,整个过程高效准确。
至此,本领域技术人员应认识到,虽然本文已详尽示出和描述了本发明的多个示例性实施例,但是,在不脱离本发明精神和范围的情况下,仍可根据本发明公开的内容直接确定或推导出符合本发明原理的许多其他变型或修改。因此,本发明的范围应被理解和认定为覆盖了所有这些其他变型或修改。