实现i2c通讯的方法和滑板车及存储介质

文档序号:510388 发布日期:2021-05-28 浏览:1次 >En<

阅读说明:本技术 实现i2c通讯的方法和滑板车及存储介质 (Method for realizing I2C communication, scooter and storage medium ) 是由 不公告发明人 于 2019-11-26 设计创作,主要内容包括:本发明公开了一种实现I2C通讯的方法、滑板车和存储介质,其中,实现I2C通讯的方法包括:建立层次状态机;采用所述层次状态机执行I2C通讯的读写函数以实现模拟I2C通讯时序,其中,I2C通讯的读写函数在场定向控制FOC中断下执行,且两次所述场定向控制FOC中断的间隔时间设置为所述读写函数的时序信号。本发明的实现I2C通讯的方法和滑板车,可以实现模拟主机I2C通讯,并且不会打断场定向控制FOC中断函数以及可以提高系统效率。(The invention discloses a method for realizing I2C communication, a scooter and a storage medium, wherein the method for realizing I2C communication comprises the following steps: establishing a hierarchical state machine; and executing a read-write function of I2C communication by adopting the hierarchical state machine to realize simulation of I2C communication time sequence, wherein the read-write function of I2C communication is executed under field-oriented control (FOC) interruption, and the interval time between two times of field-oriented control (FOC) interruption is set as a time sequence signal of the read-write function. The method for realizing I2C communication and the scooter can realize the communication of the analog host I2C, do not interrupt the FOC interruption function of field-oriented control and improve the system efficiency.)

实现I2C通讯的方法和滑板车及存储介质

技术领域

本发明涉及车辆制造技术领域,尤其是涉及一种实现I2C通讯的方法,以及采用该方法的滑板车以及存储介质。

背景技术

由于芯片硬件资源受限,在单片机通讯口硬件资源被占且需要与其它设备通讯时,一般通过I/O(Input/Output,输入/输出)口模拟I2C通讯的方式实现。模拟主机I2C通讯的程序,常规的I2C时钟脉冲由延时函数或者中断函数实现,由于系统中FOC(FieldOriented Control,场定向控制)中断的优先级最高,FOC中断会经常打断I2C的延时函数或者中断函数,导致I2C的延时函数(时钟滴答)不准;再者,I2C函数在main函数内实现,如果通过延时函数来实现时钟滴答,由于main函数是顺序执行,那么会由于I2C函数耗用过多时间导致系统效率较低。

发明内容

本发明旨在至少解决现有技术中存在的技术问题之一。为此,本发明的一个目的在于提出一种实现I2C通讯的方法,该方法可以实现模拟主机I2C通讯,并且不会打断FOC中断函数以及可以提高系统效率。

本发明的第二个目的在于提出一种非临时性计算机存储介质。

本发明的第三个目的在于提出一种滑板车。

为了达到上述目的,本发明第一方面实施例的实现I2C通讯的方法包括:建立层次状态机;采用所述层次状态机执行I2C通讯的读写函数以实现模拟I2C通讯时序,其中,I2C通讯的读写函数在场定向控制FOC中断下执行,且两次所述场定向控制FOC中断的间隔时间设置为所述读写函数的时序信号。

根据本发明实施例的实现I2C通讯的方法,通过采用分层状态机模拟I2C通讯时序,利于优化执行效率,提高处理器的利用率,以及,在场定向控制FOC中断下执行I2C通讯的读写函数,而不是在main主函数中执行,并且两次场定向控制FOC中断的间隔时间设置为读写函数的时序信号,从而,不会被FOC中断打断,进而可以避免因I2C函数延时而影响主函数执行效率,利于提高系统效率。

在一些实施例中,所述方法还包括:当所述读写函数执行成功后,置读写成功标志位;在main函数主循环的任务中,当识别到所述读写成功标志位置位,则清空标志位,并执行I2C通讯数据的处理任务。

在一些实施例中,所述层次状态机包括多个父状态,所述父状态包括多个子状态,所述采用所述层次状态机执行I2C通讯的读写函数以实现模拟I2C通讯时序包括:所述层次状态机初始化时,父状态设置为空闲父状态;当接收到通讯需求时,将所述父状态转换为START父状态,在所述START父状态下,所述START父状态下的子状态发送START信号,并在所述START信号发送完成后,将所述父状态转换为HEAD父状态。

在一些实施例中,所述采用所述层次状态机执行I2C通讯的读写函数以实现模拟I2C通讯时序还包括:在所述HEAD父状态下,子状态发送从设备地址和读写控制位;在所述从设备地址和所述读写控制位发送完成后,所述父状态转换为WAIT_ACK父状态。

在一些实施例中,所述采用所述层次状态机执行I2C通讯的读写函数以实现模拟I2C通讯时序还包括:在所述WAIT_ACK父状态下,子状态采集SDA数据,根据所述SDA数据确认从设备是否有应答;如果所述从设备无应答,所述父状态转换为STOP父状态;如果所述从设备有应答,所述父状态根据所述读写控制位转换为READ_DATA父状态或者WRITE_DATA父状态。

在一些实施例中,所述采用所述层次状态机执行I2C通讯的读写函数以实现模拟I2C通讯时序还包括:在所述READ_DATA父状态下,将SDA数据移入I2C的读写缓存中,如果接收到完整的SDA数据,则将所述父状态转换为ACK_DATA父状态;在所述ACK_DATA父状态下,子状态发送完ACK信号后,所述父状态再次转换为所述READ_DATA父状态;或者,在所述ACK_DATA父状态下,所述ACK_DATA父状态下的子状态发送NACK信号后,所述父状态转换为STOP父状态。

在一些实施例中,所述采用所述层次状态机执行I2C通讯的读写函数以实现模拟I2C通讯时序还包括:在所述WRITE_DATA父状态下,将需要发送的数据的最高位移入SDA以将所述最高位数据发送给从设备,每次最高位数据发送后,对所述需要发送的数据进行移位以补充最高位数据,并再次将所述最高位数据移入所述SDA以将所述最高位数据发送给从设备,直至所述需要发送的数据发送完成,在发送所述需要发送的数据给从设备后,将所述父状态转换为所述WAIT_ACK父状态;如果检测到ACK信号,所述父状态再次转换为WRITE_DATA父状态,如果未接收到ACK信号或者所述需要发送的数据发送完成,则所述父状态转换为STOP父状态。

在一些实施例中,所述采用所述层次状态机执行I2C通讯的读写函数以实现模拟I2C通讯时序还包括:在所述STOP父状态下,子状态产生STOP信号,所述父状态转换为空闲父状态。

在实施例中,每次进入场定向控制FOC中断时,当前父状态的子状态自动切换至下一子状态。

本发明第二方面实施例提出一种非临时性计算机存储介质,其上存储有计算机程序,所述计算机程序被执行时实现所述的实现I2C通讯的方法。

为了达到上述目的,本发明第三方面实施例的滑板车,包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行时,使所述至少一个处理器执行所述的实现I2C通讯的方法。

根据本发明实施例的滑板车,通过存储器存储指令,以及通过处理器执行该指令,从而实现上面实施例的实现I2C通讯的方法,可以提高执行效率,提高处理器资源利用率。

本发明的附加方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。

附图说明

本发明的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:

图1是根据本发明的一个实施例的实现I2C通讯的方法的流程图;

图2是相关技术中的场定向控制FOC中断函数、I2C函数和主函数的设置示意图;

图3是根据本发明的一个实施例的场定向控制FOC中断和I2C函数并行设置的示意图;

图4是根据本发明的一个实施例的空闲父状态的示意图;

图5是根据本发明的一个实施例的START父状态的示意图;

图6是根据本发明的一个实施例的HEAD父状态的示意图;

图7是根据本发明的一个实施例的WAIT_ACK父状态的示意图;

图8是根据本发明的一个实施例的READ_DATA父状态的示意图;

图9是根据本发明的一个实施例的ACK_DATA父状态的示意图;

图10是根据本发明的一个实施例的WRITE_DATA父状态的示意图;

图11是根据本发明的一个实施例的STOP父状态的示意图;

图12是根据本发明的一个实施例的滑板车的框图。

具体实施方式

下面详细描述本发明的实施例,参考附图描述的实施例是示例性的,下面详细描述本发明的实施例。

下面参考图1-图11描述根据本发明实施例的实现I2C通讯的方法。

图1是根据本发明的一个实施例的实现I2C通讯的方法的流程图,如图1所示,本发明实施例的实现I2C通讯的方法至少包括步骤S1和步骤S2。

S1,建立层次状态机。

具体地,层次状态机是在FSM(Finite State Machine,有限状态机)基础上,将多个状态进行分类,抽离出来,将同类型的状态作为一个父状态,一个父状态中的多个状态分别作为子状态,多个父状态之间在满足跳转条件时,可以实现状态跳转,而父状态内部的子状态之间在满足跳转条件时可以内部跳转,多个父状态之间的子状态不会跳转,从而可以简化执行步骤,优化执行效率。

S2,采用层次状态机执行I2C通讯的读写函数以实现模拟I2C通讯时序,其中,I2C通讯的读写函数在电机的场定向控制FOC中断下执行,且两次场定向控制FOC中断的间隔时间设置为读写函数的时序信号。

具体地,在常规做法中,I2C时钟脉冲由延时函数或者中断函数实现,如图2所示,由于系统中场定向控制FOC中断函数优先级最高,场定向控制FOC中断每隔125us进入一次,因而场定向控制FOC中断会经常打断I2C的延时函数或中断函数,导致I2C的延时函数不准;以及,I2C函数在main主函数中执行,由于main主函数是顺序执行的,因而会由于I2C函数耗用较多时间导致系统效率较低。

然而,在本发明实施例中,如图3所示,I2C通讯的读写函数在场定向控制FOC中断下执行,且两次场定向控制FOC中断的间隔时间设置为读写函数的时序信号,从而场定向控制FOC中断不会打断I2C函数,因而也就不会造成I2C函数的延时,并且I2C函数在场定向控制FOC中断下执行,因而不会影响main主函数的任务处理,利于提高系统效率。

根据本发明实施例的实现I2C通讯的方法,通过采用分层状态机执行I2C通讯的读写函数以实现模拟I2C通讯时序,利于优化执行效率,提高处理器的利用率,以及,在场定向控制FOC中断下执行I2C通讯的读写函数,而不是在main主函数中执行,并且两次场定向控制FOC中断的间隔时间设置为读写函数的时序信号,从而,不会被场定向控制FOC中断打断,进而可以避免因I2C函数延时而影响主函数执行效率,利于提高系统效率。

进一步地,当I2C通讯的读写函数执行成功后,置读写成功标志位;在main函数主循环的任务中,当识别到读写成功标志位置位,则清空标志位,并执行I2C通讯数据的处理任务。具体地,I2C通讯的读写函数在频率为8KHz(125us)的最高优先级的场定向控制FOC中断下执行,该125us便是I2C通讯的SCL时序信号,由于使用状态机方式,每次的执行时间只有约50ns左右,当I2C通讯的读写函数执行成功后,会置读写成功标志位,在main主函数5ms的任务循环中,程序判断I2C的读写成功标志位,若置位,则清空标志位,执行I2C数据解析以及相关处理任务,从而,不会打断main主函数循环中5ms一次的任务,便于提高处理效率。

下面对本发明实施例的采用层次状态机执行I2C通讯的读写函数以实现模拟I2C通讯的流程进行说明。

其中,层次状态机包括多个父状态,在一些实施例中,完整的数据传输可以包括空闲父状态、START父状态、HEAD父状态、WAIT_ACK父状态、READ_DATA父状态、WRITE_DATA父状态、ACK_DATA父状态和STOP父状态,父状态中包括多个子状态。并且,每次进入场定向控制FOC中断时,当前父状态下的子状态都会自动转变为下一子状态。

层次状态机在初始化时,将父状态设置为空闲父状态,例如图4所示,为空闲父状态即IDLE状态的示意图。当接收到通讯需求时,将父状态转换为START父状态,在START父状态下,START父状态下的子状态发送START信号,并在START信号发送完成后,将父状态转换为HEAD父状态。

例如,图5所示为根据本发明的一个实施例的START父状态的示意图,如图5所示,在START父状态下包括三个子状态,子状态1:SDA设置为输出,其中,SDA=1,SCL=1;子状态2:SDA=0,发送START信号;子状态3:SCL=0,完成START信号发送,父状态转换为HEAD父状态。

在HEAD父状态下,子状态发送从设备地址和读写控制位;在从设备地址和读写控制位发送完成后,父状态转换为WAIT_ACK父状态。例如,图6所示,发送数据包括7位从设备地址+1位R/W读写控制位,即DATA=7bit Address+1bit R/W读写位,在该状态下包括三个子状态,其中,子状态1:将需发送的DATA的最高位移入SDA,子状态2:SCL=1,子状态3:SCL=0,通过时序信号跳转,发送一位数据,并将DATA左移一位,循环三个子状态,直至8bit数据发送完毕,父状态转换为WAIT_ACK父状态。

在WAIT_ACK父状态下,子状态采集SDA数据,根据SDA数据确认从设备是否有应答;如果从设备无应答,父状态转换为STOP父状态;如果从设备有应答,父状态根据读写控制位转换为READ_DATA父状态或者WRITE_DATA父状态。

例如,如图7所示,在WAIT_ACK父状态下,包括三个子状态,其中,子状态1:SDA设置为输入;子状态2:SCL=1,即释放数据线信号,子状态3:读数据线信号SDA,SDA设置为输出;如果不是应答ACK信号,则SCL=0,父状态转换为STOP父状态,反之,如果是应答信号,则SCL=0,根据R/W读写控制位,父状态转换为READ_DATA父状态或者WRITE_DATA父状态。

进一步地,在READ_DATA父状态下,将SDA数据移入I2C的读写缓存中,如果接收到完整的SDA数据,则将父状态转换为ACK_DATA父状态。以及,在ACK_DATA父状态下的子状态发送完ACK信号后,父状态再次转换为所述READ_DATA父状态,或者,在ACK_DATA父状态下,ACK_DATA父状态下的子状态发送NACK信号后,父状态转换为STOP父状态。

具体地,如图8所示,在READ_DATA父状态下,包括三个子状态,子状态1:判断需要读取的N个数据是否读完,其中,N为数据长度例如8bit,如果是,则将父状态转换为STOP父状态,如果否,则设置SDA为输入,SLC=0,进入子状态2,子状态2中时序跳变为1,即SCL=1,进入子状态3,在子状态3中,将SDA移入DATA的最低位,如果未接收到移入的SDA数据则DATA左移一位,并返回子状态1,重复三个子状态,直至接收到完整的N个例如8bit数据,准备读下个DATA,将父状态转换为ACK_DATA父状态。

如图9所示,在ACK_DATA父状态下,包括三个子状态,子状态1:SCL=0;SDA设置为输出,若接收到应答ACK信号时SDA=0,若接收到NACK信号则SDA=1;跳转至子状态2,在子状态2中,时序信号跳转即SCL=1,进入子状态3,在子状态3中,时序再次跳转即SCL=0,若接收到应答ACK信号,父状态转换为READ_DATA父状态,若为NACK信号,则父状态转换为STOP父状态。

在实施例中,在WRITE_DATA父状态下,将需要发送的数据的最高位移入SDA以将该数据发送给从设备,每次最高位数据发送后,对需要发送的数据进行移位以补充最高位数据,并再次将最高位数据移入SDA以将最高位数据发送给从设备,直至需要发送的数据发送完成,在发送该需要发送的数据给从设备后,将父状态转换为WAIT_ACK父状态;如果检测到ACK信号,则父状态再次转换为WRITE_DATA父状态,如果未接收到ACK信号或者需要发送的数据发送完成,父状态转换为STOP父状态。

例如,图10所示,在WRITE_DATA父状态下,包括三个子状态,子状态1,判断N个例如8bit数据是否发送完,如果是,则父状态转换为STOP父状态,如果否,则将需发送的DATA的最高位移入SDA,进入子状态2,在子状态2中,SCL=1,进入子状态3,在子状态3中,时序信号跳转即SCL=0,DATA左移一位,若8bit数据未发送完,则返回子状态1,循环三个子状态,直至8bit数据发送完,准备下个DATA,将父状态转换未WAIT_ACK父状态,WAIT_ACK父状态的执行如上面实施例说明。

进一步地,在STOP父状态下,子状态产生STOP信号,父状态转换为空闲父状态,完成完整数据的读或写。具体地,如图11所示,在STOP父状态下,包括两个子状态,在子状态1中,SCL=0,SDA=0,产生一个STOP信号,跳转至子状态2,在子状态2中,SCL=1,SDA=1,父状态转换为空闲父状态,完成一次完整的数据传输。

概括来说,本发明实施例的实现I2C通讯的方法,运用分层状态机执行I2C通讯的读写函数以实现模拟I2C主机通讯的所有时序,对于芯片硬件资源受限的嵌入式软件系统,通过分层状态机可以优化执行效率,以及,在场定向控制FOC中断下实现I2C的读写函数,可以提高CPU利用率。

本发明第二方面实施例还提出一种非临时性计算机存储介质,其上存储有计算机程序,该计算机程序被执行可实现上面实施例的实现I2C通讯的方法。其中,实现I2C通讯的方法可以参照上面实施例的说明。

本发明第三方面实施例提出一种滑板车,图12为根据本发明的一个实施例的滑板车的框图,如图12所示,本发明实施例的滑板车1包括至少一个处理器10和与至少一个处理器10通信连接的存储器20,存储器20存储有可被至少一个处理器10执行的指令,指令被至少一个处理器10执行时,使至少一个处理器10执行上卖弄实施例的实现I2C通讯的方法。

根据本发明实施例的滑板车1,通过存储器20存储指令,以及通过处理器10执行该指令,从而实现上面实施例的实现I2C通讯的方法,可以提高执行效率,提高处理器资源利用率。

在本说明书的描述中,流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现定制逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所属技术领域的技术人员所理解。

在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,"计算机可读介质"可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式光盘只读存储器(CDROM)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。

应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。如,如果用硬件来实现和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。

本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。

在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示意性实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。

尽管已经示出和描述了本发明的实施例,本领域的普通技术人员可以理解:在不脱离本发明的原理和宗旨的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由权利要求及其等同物限定。

14页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:通用物理层上的多协议支持

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!