首页 / 一种写入掩码数据的方法

一种写入掩码数据的方法实质审查 发明

技术领域

[0001] 本发明涉及通信技术领域,具体涉及一种写入掩码数据的方法。

相关背景技术

[0002] I2C(Inter‑Integrated Circuit)总线是由Philips公司开发的一种简单、双向串行总线。I2C主设备通过I2C总线连接一个或多个I2C从设备,I2C总线包含I2C时钟线(一般以SCL命名)及I2C数据线(一般以SDA命名),I2C主设备驱动I2C时钟线,向I2C从设备发起I2C写操作或读操作,并通过I2C从设备返回的应答位判断数据是否传输成功。
[0003] SPI(Serial Peripheral Interface,串行外设接口)是一种高速,全双工,同步的通信总线。SPI通常有四根信号线,包括SPI_CSN信号线、SPI_CK信号线、SPI_MOSI信号线及SPI_MISO信号线。SPI主设备通过这四个信号线连接SPI从设备,SPI主设备驱动SPI_CSN信号线、SPI_CK信号线、SPI_MOSI信号线,SPI从设备接收SPI_CSN信号线、SPI_CK信号线、SPI_MOSI信号线,SPI从设备驱动SPI_MISO信号线,SPI主设备接收SPI_MISO信号线。SPI_CSN信号线为选择信号,在SPI协议中,SPI从设备只有在SPI_CSN信号线为低时,才能进行数据的传输。一个SPI主设备可以连接一个或多个SPI从设备:当一个SPI主设备连接多个SPI从设备时,在任意时刻,只有一个SPI从设备所连接的SPI_CSN信号线为低;当一个SPI主设备只连接一个SPI从设备时,SPI主设备与SPI从设备之间可以没有SPI_CSN信号线,此时SPI主设备与SPI从设备间可以只通过SPI_CK信号线、SPI_MOSI信号线及SPI_MISO信号线相连。
[0004] 本发明中,I2C主控制器为I2C主设备,I2C接口模块为I2C从设备,SPI主控制器为SPI主设备,SPI接口模块为SPI从设备。
[0005] 本发明中,主控制器可以为I2C主控制器或SPI主控制器,也可以为符合串口UART协议、CAN协议、LIN协议等其他接口协议的主控制器;接口模块可以为I2C接口模块或SPI接口模块,也可以为符合串口UART协议、CAN协议、LIN协议等其他接口协议的接口模块。
[0006] 主控制器通过接口模块向功能模块发送命令或数据,本发明中将最终接收命令或数据的模块称为功能模块,接口模块与功能模块可以在同一颗芯片、或同一块电路板,或同一设备中,也可以与接口模块位于不同的设备中,接口模块与功能模块之间可以通过已有的或自定义的通信协议进行通信。
[0007] 在一些应用中,主控制器需要向功能模块中目标地址指向的存储空间中的部分比特写入数据,例如,主控制器对功能模块中某一寄存器中的部分比特进行配置,在进行配置时,该寄存器中的部分比特需要在配置时被新的值覆盖,而该寄存器的其余比特则应保持原来的值不变。当主控制器能够直接配置功能模块时,主控制器常采用写掩码(write mask)的方法对功能模块中的存储空间中的部分比特进行配置。
[0008] 若主控制器不能直接配置功能模块,而需通过I2C或SPI等接口模块对功能模块进行配置时,在现有技术中,一般采用如下配置方法:主控制器首先向接口模块发起写操作,将读命令发送到接口模块,接口模块将读命令转发给功能模块,功能模块执行读命令,将目标地址指向的存储空间中的数据读出(此读出的数据在本发明中称为读数据)并发送到接口模块,接口模块接收读数据;然后主控制器向接口模块发起读操作,主控制器从接口模块读取读数据,并将掩码中值为1的比特所对应的读数据中的比特替换为配置数据,读数据的其余比特保持不变,将此替换后的读数据作为待写入数据;然后主控制器再向接口模块发起写操作,将包含待写入数据的写命令发送到接口模块,接口模块将写命令转发给功能模块,功能模块执行写命令,将待写入数据写入目标地址指向的存储空间,这种方法过程繁琐且用时长。
[0009] 目前缺乏一种主控制器通过I2C或SPI等接口模块对功能模块中的目标地址指向的存储空间中的部分比特进行快速配置的方法,即缺乏一种主控制器通过I2C接口或SPI接口对目标设备快速写入掩码数据的方法。

具体实施方式

[0091] 为了使本发明的上述以及其他特征和优点更加清楚,下面结合附图进一步描述本发明。应当理解,本文给出的具体实施例是出于向本领域技术人员解释的目的,仅是示例性的,而非限制性的。
[0092] 如图1所示,根据本发明的实施例,提供一种接口系统,所述接口系统包括主控制器100、接口模块200、功能模块300,主控制器100连接接口模块200,接口模块200连接功能模块300。接口模块200与功能模块300可以在同一颗芯片、或同一块电路板,或同一设备中,也可以与接口模块位于不同的设备中,本发明对接口模块200与功能模块300之间的距离不作限制。接口模块200与功能模块300之间可以通过已有的或自定义的通信协议进行通信。
[0093] 如图2所示,根据本发明的实施例,提供一种写入掩码数据的方法,主控制器100发送命令包到接口模块200,命令包包含一个或多个命令,接口模块200接收到命令包后,将命令包发送至功能模块300,接口模块200将命令包发送到功能模块300时,可以对命令包中的内容进行修改、添加或删除,本发明不对此进行限制或规定,功能模块300收到命令包后,执行命令包包含的命令,并将状态包返回到接口模块200,包括:当功能模块300执行命令包包含的每个命令的结果都为成功时,功能模块300返回状态信息为成功的状态包,当功能模块300执行命令包包含的至少一个命令的结果为失败时,功能模块300返回状态信息为失败的状态包。当接口模块200从功能模块300接收到状态包后,将状态包的状态信息返回到主控制器100。
[0094] 如图3所示,本发明命令包包含一个或多个命令,示例性的命令包包含命令1、命令2、…、命令K。
[0095] 在一个实施例中,功能模块300接收到命令包并执行命令包包含的一个或多个命令,当一个命令的执行结果为失败时,功能模块300停止执行后续的命令,并且功能模块300向接口模块200返回状态信息为失败的状态包。在另一个实施例中,当一个命令的执行结果为失败时,功能模块300可以选择继续执行后续的命令,并且功能模块300向接口模块200返回状态信息为失败的状态包。
[0096] 如图4所示,在本发明的一个应用实施例中,命令包包含一个或多个命令,至少一个命令为写掩码命令,写掩码命令包含地址字段、数据字段、掩码字段。
[0097] 在本实施例中,写掩码命令的具体结构如图5所示。图5中字节0的低6比特为命令类别标识字段,“001000”表示该命令为写掩码命令,写掩码命令还包含8比特寄存器基地址字段SEG[7:0],10比特寄存器偏移地址字段ADDR[9:0],16比特数据字段Data[15:0],16比特掩码字段MASK[15:0]。其中8比特寄存器基地址字段SEG[7:0]和10比特寄存器偏移地址字段ADDR[9:0]合称地址字段Address。在其它实施例中,写掩码命令中的命令类别标识字段、地址字段、数据字段、掩码字段的位置和位宽可以不同于本实施例,也可以没有命令类别标识字段,本发明不限制写掩码命令中的地址字段、数据字段、掩码字段的位置和位宽。
[0098] 功能模块300收到命令包后,执行命令包包含的命令,其中执行写掩码命令包括:将写掩码命令中掩码字段为1的比特对应的写掩码命令数据字段的比特写入写掩码命令地址字段指向的存储空间。例如,掩码字段MASK为16比特二进制序列“0001000100010001”,则应将数据字段Data的从低位到高位的第0、第4、第8、第12比特写入地址字段Address指向的存储空间中的第0、第4、第8、第12位,该存储空间中的其余位保持不变。
[0099] 在一些应用实施例中,存储空间本身支持写掩码功能(例如支持写掩码功能的SRAM),功能模块300可以直接将地址字段Address、数据字段Data、掩码字段MASK送入存储空间,由存储空间完成写掩码功能。在另一些应用实施例中,存储空间本身不支持写掩码功能,功能模块300可将地址字段Address指向的存储空间中的数据读出,作为读数据rdata,将掩码字段MASK和数据字段Data按比特做逻辑与运算,将掩码字段MASK按位取反的相反数和读数据rdata按比特做逻辑与运算,再将两个逻辑与运算的结果按比特做逻辑或运算,作为待写入数据wdata,然后再将待写入数据wdata写入地址字段Address指向的存储空间。
[0100] 如图6所示,在本发明的另一个应用实施例中,命令包包含一个或多个命令,至少一个命令为写掩码命令,还有至少一个命令为写命令,写掩码命令包含地址字段、数据字段、掩码字段,写命令包含地址字段、数据字段。
[0101] 在本实施例中,写掩码命令的具体结构如图5所示,写命令的具体结构如图7所示。图7中字节0的低6比特为命令类别标识字段,“000000”表示该命令为写命令,写命令还包含
8比特寄存器基地址字段SEG[7:0],10比特寄存器偏移地址字段ADDR[9:0],16比特数据字段Data[15:0]。其中8比特寄存器基地址字段SEG[7:0]和10比特寄存器偏移地址字段ADDR[9:0]合称地址字段Address。在其它实施例中,写命令中的命令类别标识字段、地址字段、数据字段的位置和位宽可以不同于本实施例,也可以没有命令类别标识字段,本发明不限制写命令中的地址字段、数据字段的位置和位宽。
[0102] 功能模块300收到命令包后,执行命令包包含的命令,其中执行写命令包括:将写命令中的数据字段写入写命令地址字段指向的存储空间。
[0103] 如图8所示,在本发明的又一个应用实施例中,命令包包含一个或多个命令,至少一个命令为写掩码命令,还有至少一个命令为读命令,写掩码命令包含地址字段、数据字段、掩码字段,读命令包含地址字段。
[0104] 在本实施例中,写掩码命令的具体结构如图5所示,读命令的具体结构如图9所示。图9中字节0的低6比特为命令类别标识字段,“010000”表示该命令为读命令,读命令还包含
8比特寄存器基地址字段SEG[7:0],10比特寄存器偏移地址字段ADDR[9:0],8比特寄存器基地址字段SEG[7:0]和10比特寄存器偏移地址字段ADDR[9:0]合称地址字段Address。在其它实施例中,读命令中的命令类别标识字段、地址字段的位置和位宽可以不同于本实施例,也可以没有命令类别标识字段,本发明不限制读命令中的地址字段的位置和位宽。
[0105] 功能模块300收到命令包后,执行命令包包含的命令,其中执行读命令包括:将读命令中的地址字段指向的存储空间中的数据读出。
[0106] 功能模块300执行命令包包含的读命令后,不仅将状态包返回到接口模块200,还将读数据返回到接口模块200。当接口模块200从功能模块300接收到读数据和状态包后,将读数据和状态包的状态信息返回到主控制器100。
[0107] 如图10所示,在本发明的再一个应用实施例中,命令包包含一个或多个命令,至少一个命令为写掩码命令,还有至少一个命令为写命令,还有至少一个命令为读命令,写掩码命令包含地址字段、数据字段、掩码字段,写命令包含地址字段、数据字段,读命令包含地址字段。
[0108] 在本实施例中,写掩码命令的具体结构如图5所示,写命令的具体结构如图7所示,读命令的具体结构如图9所示。
[0109] 如图11所示,在一个实施例中,主控制器100为I2C主控制器100a,接口模块200为I2C接口模块200a。
[0110] I2C主控制器100a通过I2C时钟线(SCL)和I2C数据线(SDA)连接I2C接口模块200a,I2C主控制器100a发起I2C写操作将命令包发送到I2C接口模块200a,I2C接口模块200a接收到命令包后拉低I2C时钟线(SCL)电平,并将命令包发送到功能模块300。
[0111] 功能模块300接收到命令包后执行命令包包含的一个或多个命令,并将状态包返回到I2C接口模块200a,I2C接口模块200a从功能模块300接收状态包,并将状态包的状态信息返回到I2C主控制器100a,包括:
[0112] 当I2C接口模块200a从功能模块300接收到状态包且状态包的状态信息为成功时,I2C接口模块200a停止拉低I2C时钟线(SCL)电平,并且向I2C主控制器100a返回I2C ACK。
[0113] 当I2C接口模块200a从功能模块300接收到状态包且状态包的状态信息为失败时,I2C接口模块200a停止拉低I2C时钟线(SCL)电平,并且向I2C主控制器100a返回I2C NAK。
[0114] 如图12所示,I2C写操作包含写地址字节及一个或多个写操作数据字节(BYTE(1)、…、BYTE(N),有阴影),写地址字节为第一个发送的字节,写地址字节包括I2C地址(ADR)及写操作指示位(W),按照标准I2C规范,写操作指示位(W)为低电平。
[0115] 本实施例中,写地址字节与写操作数据字节均为8比特,其中写地址字节包含7比特的I2C地址(ADR)及1比特的写操作指示位(W)。本发明不限制写地址字节与写操作数据字节的比特数,在其他实施例中,写地址字节与写操作数据字节可以为其他的比特数。
[0116] I2C主控制器100a发起I2C写操作时,I2C主控制器100a首先按照标准I2C规范驱动I2C时钟线(SCL)与I2C数据线(SDA),产生I2C START信号(S),然后发送写地址字节,I2C接口模块200a在接收写地址字节后驱动I2C数据线(SDA),产生应答位。按照标准I2C规范,应答位可以为I2C ACK(I2C数据线电平为低)或I2C NAK(I2C数据线电平为高)。
[0117] 当写地址字节的应答位为I2C ACK时,I2C主控制器100a可以发送一个或多个写操作数据字节,I2C接口模块200a在接收每个写操作数据字节后驱动I2C数据线(SDA)产生应答位,写操作数据字节的应答位可以为I2CACK(I2C数据线电平为低)或I2C NAK(I2C数据线电平为高)。
[0118] 按照标准I2C规范,发送写地址字节及一个或多个写操作数据字节时,I2C主控制器100a通过驱动I2C数据线(SDA)发送写地址字节及写操作数据字节所包含的比特数,并且对写地址字节及写操作数据字节所包含的每一个比特,I2C主控制器100a驱动I2C时钟线(SCL)产生一个时钟脉冲。
[0119] 按照标准I2C规范,对应写地址字节的应答位及写操作数据字节的应答位,I2C主控制器100a也会驱动I2C时钟线(SCL)产生一个时钟脉冲。I2C主控制器100a通过发送标准I2C规范所定义的I2C STOP信号(P)或I2CSTART信号(S)结束当前的写操作。
[0120] 如图13所示,I2C读操作包含读地址字节及一个或多个读操作数据字节(BYTE(1)、…、BYTE(N),无阴影),读地址字节为第一个字节,由I2C主控制器100a发送,一个或多个读操作数据字节由I2C接口模块200a发送,读地址字节包含I2C地址(ADR)及读操作指示位(R),按照标准I2C规范,读操作指示位(R)为高电平。
[0121] 本实施例中,读地址字节与读操作数据字节均为8比特,其中读地址字节包含7比特的I2C地址(ADR)及1比特的读操作指示位(R)。本发明不限制读地址字节与读操作数据字节的比特数,在其他实施例中,读地址字节与读操作数据字节可以为其他的比特数。
[0122] I2C主控制器100a发起I2C读操作时,I2C主控制器100a首先按照标准I2C规范驱动I2C时钟线与I2C数据线,产生I2C START信号(S),然后发送读地址字节,I2C接口模块200a在接收读地址字节后驱动I2C数据线,产生应答位,按照标准I2C规范,应答位可以为I2C ACK(I2C数据线电平为低)或I2C NAK(I2C数据线电平为高)。
[0123] 当读地址字节的应答位为I2C ACK时,I2C接口模块200a可以通过驱动I2C数据线返回一个或多个读操作数据字节,I2C主控制器100a在接收每个读操作数据字节后驱动I2C数据线产生应答位,读操作数据字节的应答位可以为I2C ACK(I2C数据线电平为低)或I2C NAK(I2C数据线电平为高)。
[0124] 按照标准I2C规范,I2C主控制器100a发送读地址字节及I2C接口模块200a返回一个或多个读操作数据字节时,I2C主控制器100a通过驱动I2C数据线发送读地址字节所包含的比特数,I2C接口模块200a通过驱动I2C数据线返回读操作数据字节所包含的比特,并且对读地址字节及读操作数据字节所包含的每一个比特,I2C主控制器100a驱动I2C时钟线产生一个时钟脉冲。
[0125] 按照标准I2C规范,对应读地址字节的应答位及读操作数据字节的应答位,I2C主控制器100a也会驱动I2C时钟线产生一个时钟脉冲。I2C主控制器100a通过发送标准I2C规范所定义的I2C STOP信号(P)或I2C START信号(S)结束当前的读操作。
[0126] 一个I2C写操作或I2C读操作周期均由I2C START信号(S)开始,但结束方式有两种,第一种是以I2C STOP信号(P)结束,时序分别如12和图13所示。
[0127] 第二种是产生新的I2C START信号(S),进入下一个I2C写操作或I2C读操作,时序如图14所示。图14中应答位(A/N)与I2C START信号(Sr)之间出现虚线连线(其他附图中的此类连线)是因为时序图较长不便于在同一行中描述,故拆分成多行,表示两个时序图之间具有衔接关系。
[0128] 使用上述任何一种结束方式都不会对本发明写入掩码数据的方法产生影响,为描述方便,本实施例中均以带有I2C STOP信号(P)的方式描述一个I2C操作(I2C写操作或I2C读操作)的结束。
[0129] 本发明中的命令包通过写操作数据字节(BYTE(1)、…、BYTE(N),有阴影)发送,如图3所示,给出两种命令包实施例:
[0130] 命令包可以仅包含命令1、命令2、…、命令K。
[0131] 命令包也可以包含命令包长度域及命令1、命令2、…、命令K。
[0132] 其中“BYTE(1)、…、BYTE(N)”示意有一个或多个写操作数据字节,“命令1、命令2、…、命令K”示意有一个或多个命令。
[0133] 图3中的命令可以是写掩码命令、或写命令、或读命令,一个命令包可以包含写掩码命令、写命令、读命令三类命令中的一类或多类,每类命令可以有一个或多个命令,如图4、图6、图8、图10所示。
[0134] 需要说明的是,本发明不限制命令包的格式,即本发明中的命令包格式不限于图3所示的两种命令包实施例,I2C主控制器100a与I2C接口模块200a可以约定其他的命令包格式,本发明也不限制命令包包含命令的类别以及每类命令的个数。
[0135] 举例来说,I2C主控制器100a发起命令包时,I2C主控制器100a发起I2C写操作将写地址字节及包含命令包的一个或多个写操作数据字节(BYTE(1)、…、BYTE(N),有阴影)发送至I2C接口模块200a。
[0136] I2C接口模块200a具有I2C接口的逻辑电路,I2C接口模块200a接收并响应来自I2C主控制器100a的数据。I2C接口模块200a与I2C主控制器100a之间通过I2C总线(I2C时钟线和I2C数据线)互联,一个I2C主控制器100a连接一个或多个I2C接口模块200a,每个I2C接口模块200a在其所在的I2C总线(I2C时钟线和I2C数据线)上具有唯一的I2C地址(ADR)。按照标准I2C规范,除I2C写广播之外的每个I2C写操作或I2C读操作只针对其中一个I2C地址(ADR),使用其它I2C地址的I2C接口模块200a不参与该I2C写操作或I2C读操作。
[0137] 如图15所示,具体的实施例中,I2C接口模块200a具有长度为7bit的I2C地址0x50(对应写地址字节0xA0或二进制数值1010000),I2C主控制器100a发起一个I2C写操作向I2C接口模块200a依次写入0x06、0x11、0x21、0x31、0x41、0x51、0x61共计7个字节长度的写操作数据,此7个字节写操作数据包含了命令包。0xA0字节对应写地址字节,其高7bit对应I2C接口模块200a的I2C地址(ADR),低位1bit为写操作指示位(W),写操作指示位(W)的数值为0表示当前为写操作,该字节的数值为二进制数10100000,即十六进制数0xA0。
[0138] 此例中,命令包格式可以为如图3所示的两种命令包实施例,也可以为I2C主控制器100a与I2C接口模块200a之间约定的其他的命令包格式。
[0139] 本发明中,I2C接口模块200a接收到所述命令包指所述I2C接口模块200a接收到的写操作数据包含了完整的命令包。如图15所示实施例中,0x06、0x11、0x21、0x31、0x41、0x51、0x61共计7个字节长度的写操作数据包含了完整的命令包,因此I2C接口模块200a接收到0x61字节的最后一个比特,即I2C接口模块200a接收到命令包。
[0140] 如图3所示,命令包可以包含命令包长度域,I2C接口模块200a可以根据与I2C主控制器100a之间的约定基于命令包长度域(或部分的基于命令包长度域)来确定接收到的写操作数据是否包含了完整的命令包,如图3所示,命令包也可以不包含命令包长度域,此种情况下,I2C接口模块200a可以根据与I2C主控制器100a之间的约定(此约定不基于命令包长度域)来确定接收到的写操作数据是否包含了完整的命令包。
[0141] 图15所示实施例中,I2C接口模块200a接收到0x61字节的最后一个比特,I2C接口模块200a接收到命令包,然后I2C接口模块200a拉低I2C时钟线电平,I2C总线处于HOLD状态(持续的低电平状态),I2C接口模块200a将命令包发送到功能模块300。功能模块300接收命令包并执行命令包包含的一个或多个命令,即命令1、命令2、…、命令K,然后向I2C接口模块200a返回状态包,包括:
[0142] 当命令包包含的每一个命令的执行结果为成功时,功能模块300向I2C接口模块200a返回状态信息为成功的状态包;
[0143] 当命令包包含的命令中有至少一个命令的执行结果为失败时,功能模块300向I2C接口模块200a返回状态信息为失败的状态包。
[0144] 在本发明中,I2C接口模块200a将命令包发送到功能模块300时,可以对命令包中的内容进行修改、添加或删除,本发明不对此进行限制或规定。
[0145] 根据本发明的实施例,当I2C接口模块200a从功能模块300接收到状态包且状态包的状态信息为成功时,I2C接口模块200a停止拉低I2C时钟线电平,并且向I2C主控制器100a返回I2C ACK。
[0146] 当I2C接口模块200a从功能模块300接收到状态包且状态包的状态信息为失败时,I2C接口模块200a停止拉低I2C时钟线电平,并且向I2C主控制器100a返回I2C NAK。
[0147] 本发明所指的后续I2C操作是相对于在其之前的I2C操作,I2C操作可以为I2C写操作或I2C读操作。
[0148] 如图16所示,分别举例来描述当I2C接口模块200a从功能模块300接收到状态包且状态包的状态信息为成功时的情况,及当I2C接口模块200a从功能模块300接收到状态包且状态包的状态信息为失败时的情况。
[0149] I2C主控制器100a发起一个序号为m(m为自然数)的I2C操作(I2C写操作),I2C主控制器100a发起的序号为m+1的I2C操作为后续I2C操作(相对于序号为m的I2C操作)。
[0150] 图16所示的一个实施例中,I2C主控制器100a通过序号为m的I2C写操作发送命令包,I2C接口模块200a在接收到命令包后(接收到BYTE(N)后)拉低I2C时钟线电平。
[0151] 在第①时刻,I2C接口模块200a从功能模块300接收到状态包且状态包的状态信息为成功,I2C接口模块200a停止拉低I2C时钟线电平,终止HOLD状态(终止持续的低电平状态)。
[0152] 在第②时刻,I2C接口模块200a向I2C主控制器100a返回I2C ACK,I2C主控制器100a终止序号为m的I2C操作(I2C写操作),发起序号为m+1的I2C操作(后续I2C操作),后续I2C操作为I2C写操作或I2C读操作。
[0153] I2C接口模块200a在序号为m的I2C操作中返回I2C ACK后,继续接收I2C主控制器100a发起的后续I2C操作(指在序号为m+1的I2C操作中接收读地址字节或写地址字节后返回I2C ACK并继续序号为m+1的I2C操作),如果后续I2C操作为I2C写操作,I2C接口模块200a接收写地址字节后返回I2C ACK并继续接收写操作字节,如果后续I2C操作为I2C读操作,I2C接口模块200a接收读地址字节后返回I2C ACK并继续返回状态包的状态信息(STATUS)(此例中后续I2C操作在读地址字节或写地址字节后的部分未在图16中显示)。若序号为m的I2C写操作发送的命令包包含读命令,则后续I2C操作应为I2C读操作,I2C接口模块200a接收读地址字节后返回I2C ACK并继续返回状态包的状态信息(STATUS)和读数据。
[0154] 图16所示的另一个实施例中,I2C主控制器100a通过序号为m的I2C写操作发送命令包,I2C接口模块200a在接收到命令包后(接收到BYTE(N)后)拉低I2C时钟线电平。
[0155] 在第①时刻,I2C接口模块200a从功能模块300接收到状态包且状态包的状态信息为失败,I2C接口模块200a停止拉低I2C时钟线电平,终止HOLD状态(终止持续的低电平状态)。
[0156] 在第②时刻,I2C接口模块200a向I2C主控制器100a返回I2C NAK,I2C主控制器100a终止序号为m的I2C操作(I2C写操作)。
[0157] I2C接口模块200a在序号为m的I2C操作中返回I2C NAK后,如果I2C主控制器100a发起后续I2C操作并且后续I2C操作为I2C写操作,I2C接口模块200a接收到写地址字节后,I2C接口模块200a向I2C主控制器100a返回I2C NAK,从而后续I2C操作(I2C写操作)终止执行。I2C接口模块200a在序号为m的I2C操作中返回I2C NAK后,如果I2C主控制器100a发起后续I2C操作并且后续I2C操作为I2C读操作,I2C接口模块200a接收到读地址字节后,I2C接口模块200a向I2C主控制器100a返回I2C ACK并继续返回状态包的状态信息(STATUS),I2C接口模块200a在完成后续I2C操作(I2C读操作)后,可以继续接收I2C主控制器100a发起的再后续的I2C操作(此例中后续I2C操作的部分未在图16中显示)。
[0158] 本发明中,状态信息(STATUS)可以为状态包包含的成功或失败信息,也可以包含状态包包含的其他信息,在一个实施例中,状态信息(STATUS)可以包含功能模块300执行命令包中每个命令的执行结果信息,I2C主控制器100a在接收到状态信息后,可以根据状态信息得知功能模块300对命令包中每个命令的执行情况,进而可以根据执行情况进行后续处理。如图16所示实施例中,当I2C接口模块200a从功能模块300接收到状态包,I2C接口模块200a停止拉低I2C时钟线电平,并且向I2C主控制器100a返回I2CACK(当状态包的状态信息为成功时)或I2C NAK(当状态包的状态信息为失败时),如果I2C主控制器100a发起后续I2C操作并且后续I2C操作为I2C读操作,I2C接口模块200a接收到读地址字节后,I2C接口模块
200a向I2C主控制器100a返回I2C ACK并继续返回状态包的状态信息(STATUS)。
[0159] 如图17所示实施例中,I2C主控制器100a通过序号为m的I2C写操作发送命令包,在第①时刻,I2C接口模块200a在接收到命令包后(接收到BYTE(N)后)拉低I2C时钟线电平,在第②时刻,当I2C接口模块200a从功能模块300接收到状态包后停止拉低I2C时钟线电平,并且向I2C主控制器100a返回I2C ACK或者I2C NAK,此例中,I2C主控制器100a与I2C接口模块200a之间可以自行约定I2C ACK或I2C NAK的具体含义。在I2C接口模块200a停止拉低I2C时钟线电平,并且向I2C主控制器100a返回I2CACK或者I2C NAK后,如果I2C主控制器100a发起后续I2C操作并且后续I2C操作为I2C写操作,I2C接口模块200a接收到写地址字节后,I2C接口模块200a向I2C主控制器100a返回I2C NAK,从而后续I2C操作(I2C写操作)终止执行,如果I2C主控制器100a发起后续I2C操作并且后续I2C操作为I2C读操作,I2C接口模块200a接收到读地址字节后,I2C接口模块200a向I2C主控制器100a返回I2C ACK并继续返回状态包的状态信息(STATUS),若序号为m的I2C写操作发送的命令包包含读命令,I2C接口模块200a还应向I2C主控制器100a返回读数据,I2C接口模块200a在完成后续I2C操作(I2C读操作)后,可以继续接收I2C主控制器100a发起的再后续的I2C操作(此例中后续I2C操作为I2C写操作的部分未在图17中显示)。
[0160] 根据本发明的实施例,I2C主控制器100a通过I2C时钟线和I2C数据线连接I2C接口模块200a,I2C主控制器100a发起I2C写操作将命令包发送到I2C接口模块200a,I2C接口模块200a接收到命令包后将命令包发送到功能模块300。
[0161] 功能模块接300接收到命令包后,执行命令包包含的一个或多个命令,即命令1、命令2、…、命令K,然后向I2C接口模块200a返回状态包,包括:
[0162] 当命令包包含的每一个命令的执行结果为成功时,功能模块300向I2C接口模块200a返回状态信息为成功的状态包;
[0163] 当命令包包含的命令中有至少一个命令的执行结果为失败时,功能模块300向I2C接口模块200a返回状态信息为失败的状态包。
[0164] 在本发明中,I2C接口模块200a将命令包发送到功能模块300时,可以对命令包中的内容进行修改、添加或删除,本发明不对此进行限制或规定。
[0165] 功能模块300将状态包返回到I2C接口模块200a,I2C接口模块200a将状态包的状态信息返回到I2C主控制器100a,包括:
[0166] 在I2C接口模块200a接收到命令包后,如果I2C主控制器100a发起的后续I2C操作为I2C读操作,并且I2C接口模块200a从功能模块300接收到状态包,则I2C接口模块200a向I2C主控制器100a返回状态包的状态信息。
[0167] 如果I2C主控制器100a发起的后续I2C操作为I2C写操作,并且I2C接口模块200a从功能模块300接收到状态包且状态包的状态信息为成功,则I2C接口模块200a接收I2C主控制器100a发起的后续I2C写操作;
[0168] 如果I2C主控制器100a发起的后续I2C操作为I2C写操作,并且I2C接口模块200a从功能模块300接收到状态包且状态包的状态信息为失败,则I2C接口模块200a向I2C主控制器100a返回I2C NAK。
[0169] 如图18所示,I2C主控制器100a发起的序号为m的I2C操作为I2C写操作,将命令包发送至I2C接口模块200a,对于前N‑1个写操作数据字节(BYTE(1)、…、BYTE(N‑1)),每个写操作数据字节发送后,I2C接口模块200a都向I2C主控制器100a返回I2C ACK。
[0170] I2C接口模块200a接收第N个写操作数据字节(BYTE(N))后(即I2C接口模块200a接收完整的命令包后),I2C接口模块200a可能向I2C主控制器100a返回I2C ACK或I2C NAK,具体通过I2C主控制器100a与I2C接口模块200a之间的约定来选择,I2C主控制器100a与I2C接口模块200a之间可以约定第N个写操作数据字节(BYTE(N))后无论I2C ACK或I2CNAK都表示第N个写操作数据字节(即完整命令包)的成功接收,也可以约定I2C NAK表示第N个写操作数据字节(BYTE(N))没有被成功接收(即完整命令包没有被成功接收),本发明的下述描述中第N个写操作数据字节(BYTE(N))后无论I2C接口模块200a向I2C主控制器100a返回I2C ACK或I2C NAK都表示第N个写操作数据字节(即完整命令包)的成功接收。
[0171] I2C主控制器100a完成第N个写操作数据字节(BYTE(N))发送后,无论I2C接口模块200a向I2C主控制器100a返回I2C ACK或I2C NAK,I2C主控制器100a终止序号为m的I2C操作(I2C写操作),并可以选择发起序号为m+1的I2C操作(后续I2C操作)。
[0172] 当序号为m+1的I2C操作(后续I2C操作)为I2C读操作时,如果I2C接口模块200a,从功能模块300接收到状态包(序号为m的I2C操作过程中对应的状态包),则在I2C主控制器100a发送读地址字节后,I2C接口模块200a向I2C主控制器100a返回I2C ACK并返回状态包的状态信息(STATUS),若序号为m的I2C写操作发送的命令包包含读命令,I2C接口模块200a还应向I2C主控制器100a返回读数据。
[0173] 如图19和图20所示,I2C主控制器100a发起的序号为m的I2C操作为I2C写操作,将命令包发送至I2C接口模块200a,对于前N‑1个写操作数据字节(BYTE(1)、…、BYTE(N‑1)),每个写操作数据字节发送后,I2C接口模块200a都向I2C主控制器100a返回I2C ACK。
[0174] I2C接口模块200a接收第N个写操作数据字节(BYTE(N))后(即I2C接口模块200a接收完整的命令包后),I2C接口模块200a可能向I2C主控制器100a返回I2C ACK或I2C NAK。
[0175] I2C主控制器100a完成第N个写操作数据字节(BYTE(N))的发送后,无论I2C接口模块200a向I2C主控制器100a返回I2C ACK或I2C NAK,I2C主控制器100a终止序号为m的I2C操作(I2C写操作),并可以选择发起序号为m+1的I2C操作(后续I2C操作)。
[0176] 当序号为m+1的I2C操作(后续I2C操作)为I2C写操作时,如果I2C接口模块200a从功能模块300接收到状态包(序号为m的I2C操作过程中对应的状态包)且状态包的状态信息为成功,则在I2C主控制器100a发送写地址字节后,I2C接口模块200a向I2C主控制器100a返回I2C ACK,I2C接口模块200a接收I2C主控制器100a发起的序号为m+1的I2C操作(后续I2C操作/I2C写操作)发送的写操作数据字节,如图19所示。
[0177] 当序号为m+1的I2C操作(后续I2C操作)为I2C写操作时,如果I2C接口模块200a从功能模块300接收到状态包(序号为m的I2C操作过程中对应的状态包)且状态包的状态信息为失败,则在I2C主控制器100a发送写地址字节后,I2C接口模块200a向I2C主控制器100a返回I2C NAK,主控制器100a终止发起序号为m+1的I2C操作(后续I2C操作/I2C写操作),如图20所示。
[0178] 如图11所示,在另一个实施例中,主控制器100为I2C主控制器100a,接口模块200为I2C接口模块200a,所述I2C主控制器100a发起I2C写操作将命令包发送至I2C接口模块200a,然后I2C主控制器100a发起后续I2C读操作读取状态信息,
[0179] 在此例中,I2C主控制器100a发起I2C写操作将命令包发送至I2C接口模块200a后,发起后续I2C读操作读取状态信息,
[0180] I2C接口模块200a在接收到后续I2C读操作的地址字节后,拉低I2C时钟线电平,并将接收到的命令包发送到功能模块300,
[0181] 功能模块300接收到命令包后,执行命令包包含的一个或多个命令,并将状态包返回到I2C接口模块200a,包括:
[0182] 当命令包包含的每一个命令的执行结果为成功时,功能模块300向I2C接口模块200a返回状态信息为成功的状态包,
[0183] 当命令包包含的命令中有至少一个命令的执行结果为失败时,功能模块300向I2C接口模块200a返回状态信息为失败的状态包,
[0184] I2C接口模块200a从功能模块300接收到状态包后,I2C接口模块200a停止拉低I2C时钟线电平,并且向I2C主控制器100a返回状态包的状态信息。
[0185] 如图21所示,在一个实施例中,主控制器100为SPI主控制器100b,接口模块200为SPI接口模块200b,SPI主控制器100b通过SPI_CK信号线、SPI_MOSI信号线及SPI_MISO信号线连接SPI接口模块200b。
[0186] SPI主控制器100b在SPI_CK信号线上产生时钟沿,通过SPI_MOSI信号线将命令包发送至SPI接口模块200b,命令包以第一标识字段开始,SPI接口模块200b从SPI_MOSI接收到命令包后将命令包发送到功能模块300。
[0187] 功能模块300接收到命令包后执行命令包包含的一个或多个命令,即命令1、命令2、…、命令K,然后向SPI接口模块200b返回状态包,包括:
[0188] 当命令包包含的每一个命令的执行结果为成功时,功能模块300向SPI接口模块200b返回状态信息为成功的状态包;
[0189] 当命令包包含的命令中有至少一个命令的执行结果为失败时,功能模块300向SPI接口模块200b返回状态信息为失败的状态包。
[0190] 在本发明中,SPI接口模块200b将命令包发送到功能模块300时,可以对命令包中的内容进行修改、添加或删除,本发明不对此进行限制或规定。
[0191] 功能模块300将状态包返回到SPI接口模块200b,SPI接口模块200b从功能模块300接收到状态包,并将状态包的状态信息返回到SPI主控制器100b,包括:
[0192] SPI接口模块200b从功能模块300接收到状态包后,当SPI主控制器100b在SPI_CK上产生时钟沿,SPI接口模块200b通过SPI_MISO信号线发送反馈包到SPI主控制器100b,反馈包以第二标识字段开始,反馈包包含状态包包含的状态信息。
[0193] 如图22所示实施例,为主控制器100为SPI主控制器100b、接口模块200为SPI接口模块200b时,命令包的数据结构。实施例中示例性的给出两种命令包实施例:
[0194] 命令包可以包含第一标识字段及命令1、命令2、…、命令K,并以第一标识字段开始。
[0195] 命令包也可以包含第一标识字段、命令包长度域及命令1、命令2、…、命令K,并以第一标识字段开始。
[0196] 命令包所包含的第一标识字段、命令包长度域(如存在)、命令1、命令2、…、命令K由二进制比特序列组成,本发明不限制第一标识字段、命令包长度域(如存在)、命令1、命令2、…、命令K的二进制比特序列长度。
[0197] 图22中的命令可以是写掩码命令、或写命令、或读命令,一个命令包可以包含写掩码命令、写命令、读命令三类命令中的一类或多类,每类命令可以有一个或多个命令,如图4、图6、图8、图10所示。
[0198] 需要说明的是,本发明不限制命令包的格式,即本发明中的命令包格式不限于图22所示的两种命令包实施例。SPI主控制器100b与SPI接口模块200b可以约定其他的命令包格式,本发明也不限制命令包包含命令的类别以及每类命令的个数。
[0199] 本发明中,SPI接口模块200b接收到命令包指SPI接口模块200b从SPI_MOSI信号线接收到的数据包含完整的命令包,如图22所示,命令包可以包含命令包长度域,SPI接口模块200b可以根据与SPI主控制器100b之间的约定基于命令包长度域(或部分的基于命令包长度域)来确定接收到的数据是否包含了完整的命令包,如图22所示,命令包也可以不包含命令包长度域,此种情况下,SPI接口模块200b根据与SPI主控制器100b之间的约定(此约定不基于命令包长度域)来确定接收到的数据是否包含了完整的命令包。
[0200] SPI主控制器100b驱动SPI_CK信号线,SPI主控制器100b在SPI_CK信号线产生时钟沿,SPI主控制器100b通过在SPI_CK信号线上的时钟上升沿或下降沿采样SPI_MISO信号线上的数据,SPI接口模块200b通过在SPI_CK信号线上的时钟上升沿或下降沿采样SPI_MOSI信号线上的数据,来实现数据在SPI主控制器100b及SPI接口模块200b间的双向传输。
[0201] 本发明不限制在SPI_CK信号线上的时钟上升沿或下降沿采样SPI_MISO信号线与SPI_MOSI信号线上的数据,在本发明下文描述的实施例中,在SPI_CK信号线上的时钟上升沿采样SPI_MISO信号线与SPI_MOSI信号线上的数据,即在本发明下文描述的实施例中SPI_CK信号线上的时钟上升沿为采样时钟沿。在本发明的其他实施例中,也可以在SPI_CK信号线上的时钟下降沿采样SPI_MISO信号线与SPI_MOSI信号线上的数据,即在这些实施例中SPI_CK信号线上的时钟下降沿为采样时钟沿。
[0202] 如图23所示,SPI主控制器100b在SPI_CK信号线产生时钟沿,同时驱动SPI_MOSI信号线,通过SPI_MOSI信号线将命令包发送至SPI接口模块200b,命令包包含N个字节,每个字节为8比特二进制数据,第一个字节为第一标识字段,第一个字节的8比特二进制数据以C10、C11…C17表示,命令包的第N个字节为命令包的最后一个字节,命令包第N个字节的8比特二进制数据以CN0、CN1…CN7表示。
[0203] SPI接口模块200b在SPI_CK信号线上的时钟上升沿采样SPI_MOSI信号线上的数据,从SPI_MOSI信号线接收命令包,当SPI接口模块200b采样CN7比特后,从SPI_MOSI信号线接收到的数据包含完整的命令包,SPI接口模块200b接收到命令包。
[0204] SPI接口模块200b从SPI_MOSI信号线接收到命令包后,将命令包发送到功能模块300,在本发明中,SPI接口模块200b将命令包发送到功能模块300时,可以对命令包中的内容进行修改、添加或删除,本发明不对此进行限制或规定。
[0205] 功能模块接300接收到命令包后执行命令包包含的一个或多个命令,即命令1、命令2、…、命令K,然后向SPI接口模块200b返回状态包,包括:
[0206] 当命令包包含的每一个命令的执行结果为成功时,功能模块300向SPI接口模块200b返回状态信息为成功的状态包;
[0207] 当命令包包含的命令中有至少一个命令的执行结果为失败时,功能模块300向SPI接口模块200b返回状态信息为失败的状态包。
[0208] 在第①时刻,SPI接口模块200b接收到状态包,SPI主控制器100b在SPI_CK信号线上产生时钟沿,SPI接口模块200b驱动SPI_MISO信号线,通过SPI_MISO信号线发送反馈包,SPI主控制器100b在SPI_CK信号线上的时钟上升沿采样SPI_MISO信号线上的数据,读取反馈包,反馈包以第二标识字段开始,反馈包包含状态包包含的状态信息,状态包包含的状态信息可以为成功及失败,也可以为其他的状态信息。在一个实施例中,状态信息可以包含功能模块300执行命令包中每个命令的执行结果信息,SPI主控制器100b在接收到反馈包后,可以根据反馈包得知功能模块300对命令包中每个命令的执行情况,进而可以根据执行情况进行后续处理。
[0209] 反馈包包含M个字节,每个字节为8比特二进制数据,第一个字节为第二标识字段,第一个字节的8比特二进制数据以A10、A11…A17表示,反馈包的第M个字节为反馈包的最后一个字节,反馈包第M个字节的8比特二进制数据以AM0、AM1…AM7表示。
[0210] 为易于理解,图23所示实施例中,及本发明下文的描述中,以每个字节为8比特二进制数据进行描述,但本发明不限制每个字节的比特数,每个字节也可以为其他的比特数。
[0211] 图23所示实施例中,第一标识字段和第二标识字段的长度为一个字节,命令包及反馈包的长度为字节的整倍数,为易于理解,在本发明下文的描述中,第一标识字段和第二标识字段的长度为一个字节,命令包、反馈包(包括成功反馈包及失败反馈包)的长度为字节的整倍数,但本发明不限制第一标识字段和第二标识字段的长度为一个字节,也不限制第一标识字段和第二标识字段的长度为字节的整倍数,本发明也不限制命令包、反馈包(包括成功反馈包及失败反馈包)的长度为字节的整倍数。
[0212] 在标识为“无时钟沿”的区间,SPI主控制器100b在SPI_CK信号线上不产生采样时钟沿,在图23及本发明的后续实施例描述中,在“无时钟沿”的区间SPI_MOSI及SPI_MISO信号线上的电平不变,本发明不限制在“无时钟沿”区间SPI_MOSI及SPI_MISO信号线上的电平,SPI_MOSI及SPI_MISO信号线上的电平在“无时钟沿”区间也可以改变,但因为对SPI_MOSI及SPI_MISO信号线上数据的采样只在SPI_CK信号线上的采样时钟沿才进行(图23所示实施例中采样时钟沿为时钟上升沿),“无时钟沿”区间SPI_MOSI及SPI_MISO信号线上电平变化不会被采样接收。
[0213] 在图23所示实施例中,SPI主控制器100b在SPI_CK信号线产生时钟沿,同时驱动SPI_MOSI信号线,通过SPI_MOSI信号线发送命令包时,SPI接口模块200b没有反馈包需要发送,此时SPI接口模块200b驱动SPI_MISO信号线为高电平,在此期间,本发明SPI接口模块200b也可以驱动SPI_MISO信号线为低电平或变化的电平,但SPI接口模块200b应确保其在SPI_MISO信号线上驱动的电平值或变化的电平值,如果被SPI主控制器100b在SPI_CK信号线上的采样时钟沿采样(图23所示实施例中采样时钟沿为时钟上升沿),不被识别为第二标识字段(即不被识别为第二标识字段的有效取值,从而避免被识别为反馈包)。以图23所示实施例为例,因为在此期间SPI接口模块200b驱动SPI_MISO信号线为高电平(采样为连续的二进制比特1),为了不被识别为第二标识字段,第二标识字段的取值不应为0xFF。
[0214] 在图23所示实施例中,SPI主控制器100b在SPI_CK信号线产生时钟沿,SPI接口模块200b驱动SPI_MISO信号线,通过SPI_MISO信号线发送反馈包时,SPI主控制器100b没有命令包需要发送,此时SPI主控制器100b驱动SPI_MOSI信号线为高电平,在此期间,本发明SPI主控制器100b也可以驱动SPI_MOSI信号线为低电平或变化的电平,但SPI主控制器100b应确保其在SPI_MOSI信号线上驱动的电平值或变化的电平值,如果被SPI接口模块200b在SPI_CK信号线上的采样时钟沿采样(图23所示实施例中采样时钟沿为时钟上升沿),不被识别为第一标识字段(即不被识别为第一标识字段的有效取值,从而避免被识别为命令包)。以图23所示实施例为例,因为在此期间SPI主控制器100b驱动SPI_MOSI信号线为高电平(采样为连续的二进制比特1),为了不被识别为第一标识字段,第一标识字段的取值不应为
0xFF。
[0215] SPI接口模块200b在SPI_CK信号线、SPI_MOSI信号线及SPI_MISO信号线之外,还可以通过SPI_CSN信号线连接SPI主控制器100b。SPI主控制器100b驱动SPI_CSN信号线、SPI_CK信号线、SPI_MOSI信号线,SPI接口模块200b接收SPI_CSN信号线、SPI_CK信号线、SPI_MOSI信号线,SPI接口模块200b驱动SPI_MISO信号线,SPI主控制器100b接收SPI_MISO信号线。SPI_CSN信号线为选择信号,在SPI协议中,只有在SPI_CSN信号线为低时,才进行数据的传输。一个SPI主控制器100b可以连接多个SPI接口模块200b,其中SPI主控制器100b与多个SPI接口模块200b共用SPI_CK信号线、SPI_MOSI信号线及SPI_MISO信号线,但每一个SPI接口模块200b有独立的SPI_CSN信号线输入,在一个SPI接口模块200b的SPI_CSN信号线为高时,此SPI接口模块200b不驱动SPI_MISO信号线(此SPI接口模块200b连接SPI_MISO信号线的驱动器输出Hi‑Z状态),一个SPI接口模块200b只有在其SPI_CSN信号线为低时才驱动SPI_MISO信号线。一个SPI主控制器100b连接多个SPI接口模块200b时,在任意时刻,只有一个SPI接口模块200b的SPI_CSN信号线为低,从而可以避免多个SPI接口模块200b同时驱动SPI_MISO信号线引起冲突。
[0216] 当一个SPI主控制器100b只连接一个SPI接口模块200b时,此SPI接口模块200b可以在任意时刻都驱动SPI_MISO信号线而不引起冲突,此种情况下,SPI主控制器100b与SPI接口模块200b之间可以没有SPI_CSN信号线,即当一个SPI主控制器100b只连接一个SPI接口模块200b时,SPI主控制器100b与SPI接口模块200b间可以只通过SPI_CK信号线、SPI_MOSI信号线及SPI_MISO信号线相连,上述对图23所示实施例的描述中即为此种情况。
[0217] 本发明描述中只描述SPI主控制器100b与SPI接口模块200b之间没有SPI_CSN信号线的情况,但根据本发明的描述,易于扩展到SPI主控制器100b与SPI接口模块200b之间存在SPI_CSN信号线的情况,本发明描述中不再赘述SPI主控制器100b与SPI接口模块200b之间存在SPI_CSN信号线的情况。无论SPI主控制器100b与SPI接口模块200b之间是否存在SPI_CSN信号线,都在本发明的保护范围。
[0218] 根据本发明的实施例,SPI主控制器100b在SPI_CK信号线上产生时钟沿,通过SPI_MISO信号线读取反馈包,
[0219] 当SPI接口模块200b没有接收到状态包,则SPI接口模块200b通过SPI_MISO信号线发送不能被识别为反馈包的数据到SPI主控制器100b。
[0220] 以图24所示为例,SPI主控制器100b在SPI_CK信号线上产生时钟沿,通过SPI_MOSI信号线将命令包发送至SPI接口模块200b,SPI接口模块200b从SPI_MOSI信号线接收到命令包后,将命令包发送到功能模块300,功能模块300执行命令包包含的一个或多个命令,然后向SPI接口模块200b返回状态包,在第③时刻,SPI接口模块200b从功能模块300接收到状态包,而在SPI接口模块200b从功能模块300接收到状态包的第③时刻之前,在第①时刻与第②时刻之间,SPI主控制器100b在SPI_CK信号线上产生时钟沿,图24所示实施例中SPI接口模块200b驱动SPI_MISO信号线为高电平,在此期间,SPI接口模块200b也可以驱动SPI_MISO信号线为低电平或变化的电平,但SPI接口模块200b应确保其在SPI_MISO信号线上驱动的电平值或变化的电平值,如果被SPI主控制器100b在SPI_CK信号线上的采样时钟沿采样(图24所示实施例中采样时钟沿为时钟上升沿),不被识别为第二标识字段(即不被识别为第二标识字段的有效取值,从而避免被识别为反馈包),也即SPI接口模块200b没有从功能模块
300接收到状态包时,如果SPI主控制器100b在SPI_CK信号线上产生时钟沿,则SPI接口模块
200b通过SPI_MISO信号线发送不能被识别为反馈包的数据到SPI主控制器100b。在第③时刻SPI接口模块200b从功能模块300接收到状态包后,SPI主控制器100b在SPI_CK信号线上产生时钟沿,并从SPI接口模块200b通过SPI_MISO信号线读取反馈包。
[0221] 在图25所示实施例中,SPI主控制器100b在SPI_CK信号线上产生时钟沿,通过SPI_MOSI信号线将命令包发送至SPI接口模块200b,SPI接口模块200b从SPI_MOSI信号线接收到命令包后,将命令包发送到功能模块300,功能模块300执行命令包包含的一个或多个命令,然后向SPI接口模块200b返回状态包,在第①时刻,SPI接口模块200b从功能模块300接收到状态包,SPI主控制器100b在SPI_CK信号线上产生时钟沿,并从SPI接口模块200b通过SPI_MISO信号线读取反馈包。在第②时刻,SPI主控制器100b完成读取反馈包,SPI接口模块200b完成发送反馈包,SPI主控制器100b继续在SPI_CK信号线上产生时钟沿,此时SPI接口模块200b驱动SPI_MISO信号线为高电平,在此期间,SPI接口模块200b也可以驱动SPI_MISO信号线为低电平或变化的电平,但SPI接口模块200b应确保其在SPI_MISO信号线上驱动的电平值或变化的电平值,如果被SPI主控制器100b在SPI_CK信号线上的采样时钟沿采样(图25所示实施例中采样时钟沿为时钟上升沿),不被识别为第二标识字段(即不被识别为第二标识字段的有效取值,从而避免被识别为反馈包)。
[0222] 根据本发明的实施例,SPI主控制器100b在SPI_CK信号线上产生时钟沿,通过SPI_MOSI信号线将命令包发送至SPI接口模块200b。
[0223] 然后SPI主控制器100b在SPI_CK信号线上产生时钟沿,通过SPI_MISO信号线读取反馈包,SPI接口模块200b通过SPI_MISO信号线发送反馈包后,可以继续接收后续命令包。
[0224] 本发明中,SPI主控制器100b在SPI_CK信号线上产生时钟沿,通过SPI_MOSI信号线将命令包发送至所述SPI接口模块200b,SPI接口模块200b从SPI_MOSI信号线接收到命令包后,将命令包发送到功能模块300,接收到命令包的功能模块300执行命令包包含的一个或多个命令,然后向SPI接口模块200b返回状态包,然后SPI主控制器100b在SPI_CK信号线上产生时钟沿,通过SPI_MISO信号线读取反馈包,在SPI主控制器100b读取所述反馈包之前,如果SPI主控制器100b驱动SPI_MOSI信号线发送命令包,则SPI接口模块200b可以选择不接收SPI主控制器100b读取反馈包之前发送的命令包,在SPI主控制器100b读取反馈包后,即SPI接口模块200b通过SPI_MISO信号线发送反馈包后,SPI接口模块200b可以继续接收后续命令包。
[0225] 根据本发明的实施例,反馈包可以分为成功反馈包及失败反馈包;
[0226] SPI主控制器100b在SPI_CK信号线上产生时钟沿,通过SPI_MISO信号线读取反馈包,
[0227] 当SPI接口模块200b从功能模块300接收到状态包且状态包包含的状态信息为成功时,SPI接口模块200b通过SPI_MISO信号线发送成功反馈包。
[0228] 当SPI接口模块200b从功能模块300接收到状态包且状态包包含的状态信息为失败时,SPI接口模块200b通过SPI_MISO信号线发送失败反馈包。
[0229] 本发明中,成功反馈包的第二标识字段与失败反馈包的第二标识字段不同,包括:成功反馈包的第二标识字段包含的二进制序列与失败反馈包的第二标识字段包含的二进制序列不同。成功反馈包的第二标识字段与失败反馈包的第二标识字段可以采用相同或不同的位宽长度,本发明对第二标识字段是否为固定长度不做限制。
[0230] 如图23所示,SPI主控制器100b在SPI_CK信号线上产生时钟沿,通过SPI_MOSI信号线将命令包发送至SPI接口模块200b,SPI接口模块200b从SPI_MOSI信号线接收到命令包后,将命令包发送到功能模块300,功能模块300接收到命令包后,执行命令包包含的一个或多个命令,然后向SPI接口模块200b返回状态包,在第①时刻,SPI接口模块200b从功能模块300接收到状态包。若SPI接口模块200b收到的状态包包含的状态信息为成功,在SPI主控制器100b在SPI_CK信号线上产生时钟沿,并从SPI接口模块200b通过SPI_MISO信号线读取反馈包时,SPI接口模块200b驱动SPI_MISO信号线通过SPI_MISO信号线发送成功反馈包到SPI主控制器100b;若SPI接口模块200b收到的状态包包含的状态信息为失败,在SPI主控制器
100b在SPI_CK信号线上产生时钟沿,并从SPI接口模块200b通过SPI_MISO信号线读取反馈包时,SPI接口模块200b驱动SPI_MISO信号线通过SPI_MISO信号线发送失败反馈包到SPI主控制器100b。
[0231] 本发明中成功反馈包的第二标识字段与失败反馈包的第二标识字段不同,SPI主控制器100b读取反馈包时可以通过反馈包的第二标识字段判断读取到的是成功反馈包还是失败反馈包,因此,反馈包可以只包含第二标识字段,就可以使得SPI主控制器100b能够区分读到的反馈包是成功反馈包还是失败反馈包。
[0232] 本发明中的主控制器100除了可以为I2C主控制器100a及SPI主控制器100b外,也可以为符合其他接口协议的主控制器(例如符合串口UART协议、CAN协议、LIN协议等协议的主控制器),本发明中的接口模块200除了可以为I2C接口模块200a及SPI接口模块200b外,也可以为符合其他接口协议的接口模块(例如符合串口UART协议、CAN协议、LIN协议等协议的接口模块),使用符合其他接口协议的主控制器及符合其他接口协议的接口模块,也都在本发明的保护范围。
[0233] 根据本发明的实施例,主控制器100(I2C主控制器100a或SPI主控制器100b或符合其他接口协议的主控制器)发送命令包到接口模块200(I2C接口模块200a或SPI接口模块200b或符合其他接口协议的接口模块),当接口模块200接收到命令包后,将命令包发送到功能模块300。命令包包含一个或多个命令,如图3及图22所示。每个命令可以是写掩码命令、或写命令、或读命令,一个命令包可以包含写掩码命令、写命令、读命令三类命令中的一类或多类,每类命令可以有一个或多个命令,如图4、图6、图8、图10所示。
[0234] 以上所述,仅为本发明较佳的实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭示的技术范围内,对上述实施例进行的变化、修改、替换和变型,都应该涵盖在本发明的保护范围之内。

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