CN117201222A - I2c接口系统、数据写入方法以及数据读取方法 - Google Patents
I2c接口系统、数据写入方法以及数据读取方法 Download PDFInfo
- Publication number
- CN117201222A CN117201222A CN202311037009.5A CN202311037009A CN117201222A CN 117201222 A CN117201222 A CN 117201222A CN 202311037009 A CN202311037009 A CN 202311037009A CN 117201222 A CN117201222 A CN 117201222A
- Authority
- CN
- China
- Prior art keywords
- interface module
- write
- read
- packet
- command packet
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 116
- 238000012795 verification Methods 0.000 claims description 14
- 230000005540 biological transmission Effects 0.000 abstract description 25
- 238000010586 diagram Methods 0.000 description 28
- 230000008569 process Effects 0.000 description 24
- 230000000977 initiatory effect Effects 0.000 description 18
- 230000004044 response Effects 0.000 description 13
- 238000012545 processing Methods 0.000 description 9
- 238000004364 calculation method Methods 0.000 description 4
- 238000004891 communication Methods 0.000 description 4
- 230000002459 sustained effect Effects 0.000 description 3
- 125000004122 cyclic group Chemical group 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Landscapes
- Communication Control (AREA)
Abstract
本发明提供了一种高效进行I2C传输的I2C接口系统、数据写入方法及数据读取方法,包括I2C接口模块,以及至少一个功能模块;I2C接口模块通过I2C时钟线和I2C数据线连接I2C主控制器;功能模块连接所述I2C接口模块。本发明适合传输距离较长的应用场景,用于长距离传输的I2C系统传输速度快,同时也兼容传输距离较短的应用。
Description
技术领域
本发明涉及通信技术领域,特别是物理层数据的编解码和传输,尤其涉及一种进行I2C传输的I2C接口系统、数据写入方法以及数据读取方法。
背景技术
I2C总线是由Philips公司开发的一种简单、双向串行总线。通过I2C总线互联的设备称为I2C设备,I2C设备接入I2C总线的接口称为I2C接口。I2C总线已经成为事实上的国际标准,I2C总线及其协议的设计规范(称之为标准I2C规范)通常以THE I2C-BUSSPECIFICATION VERSION 2.1JANUARY 2000文档的描述为依据。
I2C接口包含I2C时钟线(一般以SCL命名)及I2C数据线(一般以SDA命名),I2C主控制器通过I2C时钟线及I2C数据线连接一个或多个I2C从设备的I2C接口模块,I2C主控制器驱动I2C时钟线,发起I2C写操作或读操作,并通过应答位判断数据是否发送成功,因信号干扰等原因导致总线上出现的比特错误无法被I2C从设备识别出来。
I2C接口的电气特性要求参与I2C通讯的设备“共地”,否则无法传输,因此I2C通讯不适合传输距离较长或信号干扰较大的应用场景。为解决该问题,通常在I2C总线上增加用于转发I2C数据的设备,但引入转发设备又存在新的问题:
I2C的通讯机制,要求I2C主控制器每发送一个字节,I2C从设备都要回复一个应答位,应答位电平为低时为I2C ACK,应答位电平为高时为I2C NAK;现有技术中I2C主控制器每发送一个字节都会传递到最终接收数据的模块(本发明中称为功能模块),并由功能模块产生应答位并回传至I2C主控制器,传输系统的应答速度较慢,导致传输速度慢。
目前缺少一种能高效的进行I2C传输的方案。
发明内容
为了解决现有技术中I2C传输较慢的问题,本发明的一个目的在于提供一种I2C接口系统,所述I2C接口系统包括I2C接口模块,以及至少一个功能模块;
所述I2C接口模块通过I2C时钟线和I2C数据线连接I2C主控制器;所述功能模块连接所述I2C接口模块。
本发明的另一个目的在于提供一种I2C数据写入方法,使用I2C接口系统进行数据写入,包括:
I2C主控制器发起I2C写操作将写命令包发送至I2C接口模块;所述I2C接口模块接收到所述写命令包后拉低I2C时钟线电平,并将所述写命令包发送到功能模块;
所述功能模块接收所述写命令包并执行写命令,当所述功能模块完成写命令后,向所述I2C接口模块返回写状态包;
当所述I2C接口模块接收到写状态包并且写状态包的状态信息为成功时,所述I2C接口模块停止拉低I2C时钟线电平,并且向所述I2C主控制器返回I2C ACK;
当所述I2C接口模块接收到写状态包并且写状态包的状态信息为失败时,所述I2C接口模块停止拉低I2C时钟线电平,并且向所述I2C主控制器返回I2C NAK。
优选地,当所述I2C接口模块接收到的数据达到写命令包长度时,则所述I2C接口模块接收到所述写命令包。
优选地,所述写命令包还包含写命令包校验码;
当所述I2C接口模块接收到的数据达到写命令包长度,并且写命令包校验码验证正确,则所述I2C接口模块接收到所述写命令包。
优选地,当所述I2C接口模块接收到写状态包并且写状态包的状态信息为成功,所述I2C接口模块停止拉低I2C时钟线电平,并且向所述I2C主控制器返回I2C ACK,
然后所述I2C接口模块继续接收所述I2C主控制器发起的后续I2C操作。
优选地,当所述I2C接口模块接收到写状态包并且写状态包的状态信息为失败,所述I2C接口模块停止拉低I2C时钟线电平,并且向所述I2C主控制器返回I2C NAK,
如果所述I2C主控制器发起的后续I2C操作为I2C写操作,则所述I2C接口模块向所述I2C主控制器返回I2C NAK;
如果所述I2C主控制器发起的后续I2C操作为I2C读操作,则所述I2C接口模块向所述I2C主控制器返回写状态包的状态信息。
优选地,当所述I2C接口模块接收到的数据达到写命令包长度之前,所述I2C接口模块接收到I2C START信号或I2C STOP信号,则所述I2C接口模块结束当前写命令包的接收,所述I2C接口模块未接收到所述写命令包;
如果所述I2C主控制器发起的后续I2C操作为I2C写操作,则所述I2C接口模块向所述I2C主控制器返回I2C NAK;
如果所述I2C主控制器发起的后续I2C操作为I2C读操作,则所述I2C接口模块向所述I2C主控制器返回状态信息。
优选地,当所述I2C接口模块接收到的数据达到写命令包长度,但写命令包校验码验证不正确,则所述I2C接口模块结束当前写命令包的接收,所述I2C接口模块未接收到所述写命令包;
如果所述I2C主控制器发起的后续I2C操作为I2C写操作,则所述I2C接口模块向所述I2C主控制器返回I2C NAK;
如果所述I2C主控制器发起的后续I2C操作为I2C读操作,则所述I2C接口模块向所述I2C主控制器返回状态信息。
优选地,所述I2C接口模块包括超时计时器;
当所述I2C接口模块在超时之前未接收到写状态包,超时后所述I2C接口模块停止拉低I2C时钟线电平,并且向所述I2C主控制器返回I2C NAK;
如果所述I2C主控制器发起的后续I2C操作为I2C写操作,则所述I2C接口模块向所述I2C主控制器返回I2C NAK;
如果所述I2C主控制器发起的后续I2C操作为I2C读操作,则所述I2C接口模块向所述I2C主控制器返回状态信息。
本发明的又一个目的在于提供一种I2C数据写入方法,使用I2C接口系统进行数据写入,包括:
I2C主控制器发起I2C写操作将写命令包发送至I2C接口模块;所述I2C接口模块接收到所述写命令包后将所述写命令包发送到功能模块;
所述功能模块接收所述写命令包并执行写命令,当所述功能模块完成写命令后,向所述I2C接口模块返回写状态包;
在所述I2C接口模块接收到所述写命令包后,
如果所述I2C主控制器发起的后续I2C操作为I2C写操作,并且所述I2C接口模块,接收到所述功能模块向所述I2C接口模块返回的写状态包并且写状态包的状态信息为成功,则所述I2C接口模块接收所述I2C主控制器发起的后续I2C写操作;
如果所述I2C主控制器发起的后续I2C操作为I2C写操作,并且所述I2C接口模块,接收到所述功能模块向所述I2C接口模块返回的写状态包并且写状态包的状态信息为失败,则所述I2C接口模块向所述I2C主控制器返回I2CNAK。
优选地,当所述I2C接口模块接收到的数据达到写命令包长度时,则所述I2C接口模块接收到所述写命令包。
优选地,所述写命令包还包含写命令包校验码;
当所述I2C接口模块接收到的数据达到写命令包长度,并且写命令包校验码验证正确,则所述I2C接口模块接收到所述写命令包。
优选地,当所述I2C主控制器发起的后续I2C操作为I2C读操作时,
则所述I2C接口模块接收到所述功能模块向所述I2C接口模块返回的写状态包后,所述I2C接口模块向所述I2C主控制器返回写状态包的状态信息。
优选地,当所述I2C接口模块接收到的数据达到写命令包长度之前,所述I2C接口模块接收到I2C START信号或I2C STOP信号,则所述I2C接口模块结束当前写命令包的接收,所述I2C接口模块未接收到所述写命令包;
如果所述I2C主控制器发起的后续I2C操作为I2C写操作,则所述I2C接口模块向所述I2C主控制器返回I2C NAK;
如果所述I2C主控制器发起的后续I2C操作为I2C读操作,则所述I2C接口模块向所述I2C主控制器返回状态信息。
优选地,当所述I2C接口模块接收到的数据达到写命令包长度,但写命令包校验码验证不正确,则所述I2C接口模块结束当前写命令包的接收,所述I2C接口模块未接收到所述写命令包;
如果所述I2C主控制器发起的后续I2C操作为I2C写操作,则所述I2C接口模块向所述I2C主控制器返回I2C NAK;
如果所述I2C主控制器发起的后续I2C操作为I2C读操作,则所述I2C接口模块向所述I2C主控制器返回状态信息。
优选地,所述I2C接口模块包括超时计时器;
当所述I2C接口模块在超时之前未接收到写状态包,超时后如果所述I2C主控制器发起的后续I2C操作为I2C写操作,则所述I2C接口模块向所述I2C主控制器返回I2C NAK;
当所述I2C接口模块在超时之前未接收到写状态包,超时后如果所述I2C主控制器发起的后续I2C操作为I2C读操作,则所述I2C接口模块向所述I2C主控制器返回状态信息。
优选地,当所述I2C主控制器发起的后续I2C操作为I2C写操作时,
如果所述I2C接口模块,未接收到所述功能模块向所述I2C接口模块返回的写状态包,则所述I2C接口模块拉低I2C时钟线电平;
如果所述I2C接口模块,接收到所述功能模块向所述I2C接口模块返回的写状态包并且写状态包的状态信息为成功,则所述I2C接口模块停止拉低I2C时钟线电平,并接收所述I2C主控制器发起的后续I2C写操作;
如果所述I2C接口模块,接收到所述功能模块向所述I2C接口模块返回的写状态包并且写状态包的状态信息为失败,则所述I2C接口模块停止拉低I2C时钟线电平,并向所述I2C主控制器返回I2C NAK。
优选地,当所述I2C主控制器发起的后续I2C操作为I2C读操作时,
如果所述I2C接口模块,未接收到所述功能模块向所述I2C接口模块返回的写状态包,则所述I2C接口模块拉低I2C时钟线电平;
如果所述I2C接口模块,接收到所述功能模块向所述I2C接口模块返回的写状态包,则所述I2C接口模块停止拉低I2C时钟线电平,并向所述I2C主控制器返回写状态包的状态信息。
本发明的又一个目的在于提供一种I2C数据读取方法,使用I2C接口系统进行数据读取,包括:
I2C主控制器发起I2C写操作将读命令包发送至I2C接口模块;所述I2C接口模块接收到所述读命令包后拉低I2C时钟线电平,并将所述读命令包发送到功能模块;
所述功能模块接收所述读命令包并执行读命令,当所述功能模块完成读命令后,向所述I2C接口模块返回读数据包;所述读数据包内包括读数据;
当所述I2C接口模块接收到读数据包,所述I2C接口模块停止拉低I2C时钟线电平。
优选地,当所述I2C接口模块接收到的数据达到读命令包长度时,则所述I2C接口模块接收到所述读命令包。
优选地,所述读命令包还包含读命令包校验码。
当所述I2C接口模块接收到的数据达到读命令包长度,并且读命令包校验码验证正确,则所述I2C接口模块接收到所述读命令包。
优选地,当所述I2C接口模块接收到读数据包,所述I2C接口模块停止拉低I2C时钟线电平,并且向所述I2C主控制器返回I2C ACK或者I2CNAK;
如果所述I2C主控制器发起的后续I2C操作为I2C写操作,则所述I2C接口模块向所述I2C主控制器返回I2C NAK;
如果所述I2C主控制器发起的后续I2C操作为I2C读操作,则所述I2C接口模块向所述I2C主控制器返回读数据。
优选地,当所述I2C接口模块接收到的数据达到读命令包长度之前,所述I2C接口模块接收到I2C START信号或I2C STOP信号,则所述I2C接口模块结束当前读命令包的接收,所述I2C接口模块未接收到所述读命令包;
如果所述I2C主控制器发起的后续I2C操作为I2C写操作,则所述I2C接口模块向所述I2C主控制器返回I2C NAK;
如果所述I2C主控制器发起的后续I2C操作为I2C读操作,则所述I2C接口模块向所述I2C主控制器返回状态信息。
优选地,当所述I2C接口模块接收到的数据达到读命令包长度,但读命令包校验码验证不正确,则所述I2C接口模块结束当前读命令包的接收,所述I2C接口模块未接收到所述读命令包;
如果所述I2C主控制器发起的后续I2C操作为I2C写操作,则所述I2C接口模块向所述I2C主控制器返回I2C NAK;
如果所述I2C主控制器发起的后续I2C操作为I2C读操作,则所述I2C接口模块向所述I2C主控制器返回状态信息。
优选地,所述I2C接口模块包括超时计时器;
当所述I2C接口模块在超时之前未接收到读数据包,超时后所述I2C接口模块停止拉低I2C时钟线电平,并且向所述I2C主控制器返回I2C ACK或者I2C NAK;
如果所述I2C主控制器发起的后续I2C操作为I2C写操作,则所述I2C接口模块向所述I2C主控制器返回I2C NAK;
如果所述I2C主控制器发起的后续I2C操作为I2C读操作,则所述I2C接口模块向所述I2C主控制器返回状态信息。
优选地,所述读数据包括从功能模块读取的数据,或者功能模块执行读命令所产生的读状态信息,或者既包括从功能模块所读取的数据,也包括功能模块执行读命令所产生的读状态信息。
本发明的又一个目的在于提供一种I2C数据读取方法,使用I2C接口系统进行数据读取,包括:
I2C主控制器发起I2C写操作将读命令包发送至I2C接口模块;所述I2C接口模块接收到所述读命令包后将所述读命令包发送到功能模块;
所述功能模块接收所述读命令包并执行读命令,当所述功能模块完成读命令后,向所述I2C接口模块返回读数据包;所述读数据包内包括读数据;
在所述I2C接口模块接收到读命令包后,
如果所述I2C主控制器发起的后续I2C操作为I2C写操作,并且所述I2C接口模块,接收到所述功能模块向所述I2C接口模块返回的读数据包,所述I2C接口模块向所述I2C主控制器返回I2C NAK;
如果所述I2C主控制器发起的后续I2C操作为I2C读操作,并且所述I2C接口模块,接收到所述功能模块向所述I2C接口模块返回的读数据包,所述I2C接口模块向所述I2C主控制器返回读数据。
优选地,当所述I2C接口模块接收到的数据达到读命令包长度时,则所述I2C接口模块接收到所述读命令包。
优选地,所述读命令包还包含读命令包校验码。
当所述I2C接口模块接收到的数据达到读命令包长度,并且读命令包校验码验证正确,则所述I2C接口模块接收到所述读命令包。
优选地,当所述I2C接口模块接收到的数据达到读命令包长度域之前,所述I2C接口模块接收到I2C START信号或I2C STOP信号,则所述I2C接口模块结束当前读命令包的接收,所述I2C接口模块未接收到所述读命令包;
如果所述I2C主控制器发起的后续I2C操作为I2C写操作,则所述I2C接口模块向所述I2C主控制器返回I2C NAK;
如果所述I2C主控制器发起的后续I2C操作为I2C读操作,则所述I2C接口模块向所述I2C主控制器返回状态信息。
优选地,当所述I2C接口模块接收到的数据达到读命令包长度,但读命令包校验码验证不正确,则所述I2C接口模块结束当前读命令包的接收,所述I2C接口模块未接收到所述读命令包;
如果所述I2C主控制器发起的后续I2C操作为I2C写操作,则所述I2C接口模块向所述I2C主控制器返回I2C NAK;
如果所述I2C主控制器发起的后续I2C操作为I2C读操作,则所述I2C接口模块向所述I2C主控制器返回状态信息。
优选地,所述I2C接口模块包括超时计时器;
当所述I2C接口模块在超时之前未接收到读数据包,超时后如果所述I2C主控制器发起的后续I2C操作为I2C写操作,则所述I2C接口模块向所述I2C主控制器返回I2C NAK;
当所述I2C接口模块在超时之前未接收到读数据包,超时后如果所述I2C主控制器发起的后续I2C操作为I2C读操作,则所述I2C接口模块向所述I2C主控制器返回状态信息。
优选地,所述读数据包括从功能模块读取的数据,或者功能模块执行读命令所产生的读状态信息,或者既包括从功能模块所读取的数据,也包括功能模块执行读命令所产生的读状态信息。
优选地,当所述I2C主控制器发起的后续I2C操作为I2C写操作时,
如果所述I2C接口模块,未接收到所述功能模块向所述I2C接口模块返回的读数据包,则所述I2C接口模块拉低I2C时钟线电平;
如果所述I2C接口模块,接收到所述功能模块向所述I2C接口模块返回的读数据包,则所述I2C接口模块停止拉低I2C时钟线电平,所述I2C接口模块向所述I2C主控制器返回I2C NAK。
优选地,当所述I2C主控制器发起的后续I2C操作为I2C读操作时,
如果所述I2C接口模块,未接收到所述功能模块上一次向所述I2C接口模块返回的读数据包,则所述I2C接口模块拉低I2C时钟线电平;
如果所述I2C接口模块,接收到所述功能模块向所述I2C接口模块返回的读数据包,则所述I2C接口模块停止拉低I2C时钟线电平,并向所述I2C主控制器返回读数据。
本发明提供的一种高效进行I2C传输的I2C接口系统、数据写入方法以及数据读取方法,适合传输链路较长的应用场景,也同时兼容传输链路较短的本地应用,为I2C传输提供了理想的解决方案。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示意性示出了本发明一种高速进行I2C远距离传输的I2C接口系统的示意图。
图2示出了本发明I2C写操作的时序图。
图3示出了本发明I2C读操作的时序图。
图4示出了本发明I2C连续读写操作的时序图;
图5示出了本发明发起I2C写操作发送写命令包(或读命令包)的时序图。
图6示出了本发明发起I2C写操作发送带有校验码的写命令包(或读命令包)的时序图。
图7示出了本发明数据写入方法的工作模式一中发起I2C写操作发送写命令包且写状态包的状态信息为成功的时序图。
图8示出了本发明数据写入方法的工作模式一中发起I2C写操作发送写命令包且写状态包的状态信息为失败的时序图。
图9示出了本发明数据写入方法的工作模式一中发起I2C写操作发送写命令包且写状态包返回超时的时序图。
图10示出了本发明当前I2C写操作出现异常,后续I2C操作为I2C写操作时的时序图。
图11示出了本发明当前I2C写操作出现异常,后续I2C操作为I2C读操作时的时序图。
图12示出了本发明数据写入方法的工作模式二中发起I2C写操作发送写命令包且写状态包的状态信息为成功的时序图。
图13示出了本发明数据写入方法的工作模式二中发起I2C写操作发送写命令包且写状态包的状态信息为失败的时序图。
图14示出了本发明数据写入方法的工作模式二中发起I2C写操作发送写命令包且后续I2C操作为I2C读操作的时序图。
图15示出了本发明数据写入方法的工作模式二中发起I2C写操作发送写命令包且写状态包的状态信息为失败,后续I2C操作始终为I2C写操作的时序图。
图16示出了本发明数据写入方法的工作模式二中发起I2C写操作发送写命令包且写状态包的状态信息为失败,后续I2C操作I2C操作出现I2C读操作的时序图。
图17示出了本发明数据写入方法的工作模式二中发起I2C写操作发送写命令包,收到返回的写状态包之前收到I2C写操作且该写状态包的状态信息为成功时的时序图。
图18示出了本发明数据写入方法的工作模式二中发起I2C写操作发送写命令包,收到返回的写状态包之前收到I2C写操作且该写状态包的状态信息为失败时的时序图。
图19示出了本发明数据写入方法的工作模式二中发起I2C写操作发送写命令包,收到返回的写状态包的状态信息之前收到I2C读操作的时序图。
图20示出了本发明数据读取方法的工作模式一中发起I2C写操作发送读命令包,且后续I2C操作为I2C写操作的时序图。
图21示出了本发明数据读取方法的工作模式一中发起I2C写操作发送读命令包,且后续I2C操作为I2C读操作的时序图。
图22示出了本发明数据读取方法的工作模式二中发起I2C写操作发送读命令包,且后续I2C操作为I2C写操作的时序图。
图23示出了本发明数据读取方法的工作模式二中发起I2C写操作发送读命令包,且后续I2C操作为I2C读操作的时序图。
图24示出了本发明数据读取方法的工作模式二中发起I2C写操作发送读命令包且后续I2C操作始终为I2C写操作的时序图。
图25示出了本发明数据读取方法的工作模式二中发起I2C写操作发送读命令包且后续I2C操作中出现I2C读操作的时序图。
图26示出了本发明数据读取方法的工作模式二中发起I2C写操作发送读命令包,收到返回的读数据包之前收到I2C写操作的时序图。
图27示出了本发明数据读取方法的工作模式二中发起I2C写操作发送读命令包,收到返回的读数据包之前收到I2C读操作的时序图。
上述附图中的文字标识含义如下:
100:I2C主控制器;200:I2C接口模块;300:功能模块;400:I2C数据线(SDA);500:I2C时钟线(SCL);
S:表示I2C START信号,对应的I2C总线状态是在SCL为高电平时,SDA出现从高电平到低电平的跳变;
P:表示I2C STOP信号,对应的I2C总线状态是在SCL为高电平时,SDA出现从低电平到高电平的跳变;
Sr:对应的I2C总线状态与S相同;
Sr/P:对应的I2C总线状态是Sr或者P;
ADDR:I2C地址;
R/W:表示读写操作指示位,当该位为R时表示当前为I2C读操作,当该位为W时表示当前为I2C写操作;
R:表示读操作指示位,对应的I2C总线状态是SCL为高电平期间,SDA为高电平;
W:表示写操作指示位,对应的I2C总线状态是SCL为高电平期间,SDA为低电平;
BYTE:写操作数据或读操作数据,通常为多字节序列,其后面括号中的内容表示该字节在序列中的序号,通过写操作数据发送写命令包或读命令包,通过读操作数据读取读数据或状态信息,序号数值小的先发送;
A:表示I2C ACK,对应的I2C总线状态是SCL为高电平期间,SDA始终为低电平;
N:表示I2C NAK,对应的I2C总线状态是SCL为高电平期间,SDA始终为高电平;
DATA:包含读数据的字节,以及字节间的I2C ACK/I2C NAK组成的序列;
STATUS:包含状态信息的字节,及字节间的I2C ACK/I2C NAK组成的序列;
A/N:对应的I2C总线状态是SCL为高电平期间,SDA始终为高电平或始终为低电平;
HOLD:SCL为持续的低电平;
CRC:写命令包校验码或读命令包校验码;
IDLE:对应的I2C总线状态包括如下两种可能性:
(1)SCL和SDA均为高电平;
(2)SCL和SDA可能出现了其他电平状态,但这些电平状态的组合中未出现合法的I2C操作,在IDLE即将结束时,SCL和SDA均为高电平。
具体实施方式
为了使本发明的上述以及其他特征和优点更加清楚,下面结合附图进一步描述本发明。应当理解,本文给出的具体实施例是出于向本领域技术人员解释的目的,仅是示例性的,而非限制性的。
时钟线(SCL)和I2C数据线(SDA),二者合称I2C总线,I2C总线已经成为事实上的国际标准,I2C总线及其协议的设计规范(称之为标准I2C规范)通常以THE I2C-BUSSPECIFICATION VERSION 2.1JANUARY 2000文档的描述为依据。
如图1所示,根据本发明的实施例,提供一种高效进行I2C传输的I2C接口系统,包括I2C接口模块200,以及至少一个功能模块300。
I2C接口模块200通过I2C时钟线500(SCL)和I2C数据线400(SDA)连接I2C主控制器100,功能模块300连接I2C接口模块200。I2C接口模块200可以连接多个功能模块300,例如功能模块1、功能模块2、…、功能模块N。本实施例中以I2C接口模块200连接一个功能模块300为例进行说明。
本发明不限制I2C接口模块200与功能模块300的连接方式,I2C接口模块200可以通过一条或多条传输线路连接一个或多个功能模块300,同时,本发明不限制I2C接口模块200与功能模块300所处的位置,I2C接口模块200与功能模块300可以位于同一个集成电路芯片中,或者位于一个PCB板上的不同集成电路芯片中,或者I2C接口模块200与功能模块300也可以位于不同的系统设备中。
一个I2C主控制器100可以通过同一个I2C总线(时钟线500和I2C数据线400)连接一个或多个I2C接口模块200,并通过I2C读操作或I2C写操作,传输携带信息的字节序列。本实施例中以一个I2C主控制器100通过同一个I2C总线(时钟线500和I2C数据线400)连接一个I2C接口模块200为例进行说明。
如图2所示,I2C写操作包含写地址字节及一个或多个写操作数据字节(BYTE(1)、…、BYTE(N),有阴影),写地址字节为第一个发送的字节,写地址字节包括I2C地址(ADDR)及写操作指示位(W),按照标准I2C规范,写操作指示位(W)为低电平。
本实施例中,写地址字节与写操作数据字节均为8比特,其中写地址字节包含7比特的I2C地址(ADDR)为及1比特的写操作指示位(W)。本发明不限制写地址字节与写操作数据字节的比特数,在其他实施例中,写地址字节与写操作数据字节可以为其他的比特数。
I2C主控制器100发起I2C写操作时,I2C主控制器100首先按照标准I2C规范驱动I2C时钟线500与I2C数据线400,产生I2C START信号(S),然后发送写地址字节,I2C接口模块200在接收写地址字节后驱动I2C数据线400,产生应答位。按照标准I2C规范,应答位可以为I2C ACK(I2C数据线电平为低)或I2C NAK(I2C数据线电平为高)。
当写地址字节的应答位为I2C ACK时,I2C主控制器100可以发送一个或多个写操作数据字节,I2C接口模块200在接收每个写操作数据字节后驱动I2C数据线400产生应答位,写操作数据字节的应答位可以为I2C ACK(I2C数据线电平为低)或I2C NAK(I2C数据线电平为高)。
按照标准I2C规范,发送写地址字节及一个或多个写操作数据字节时,I2C主控制器100通过驱动I2C数据线400发送写地址字节及写操作数据字节所包含的比特数,并且对写地址字节及写操作数据字节所包含的每一个比特,I2C主控制器100驱动I2C时钟线500产生一个时钟脉冲。
按照标准I2C规范,对应写地址字节的应答位及写操作数据字节的应答位,I2C主控制器100也会驱动I2C时钟线500产生一个时钟脉冲。I2C主控制器100通过发送标准I2C规范所定义的I2C STOP信号(P)或I2C START信号(S)结束当前的写操作。
如图3所示,I2C读操作包含读地址字节及一个或多个读操作数据字节(BYTE(1)、…、BYTE(N),无阴影),读地址字节为第一个字节由I2C主控制器100发送,一个或多个读操作数据字节由I2C接口模块200发送,读地址字节包含I2C地址(ADDR)及读操作指示位(R),按照标准I2C规范,读操作指示位(R)为高电平。
本实施例中,读地址字节与读操作数据字节均为8比特,其中读地址字节包含7比特的I2C地址(ADDR)为及1比特的读操作指示位(R)。本发明不限制读地址字节与读操作数据字节的比特数,在其他实施例中,读地址字节与读操作数据字节可以为其他的比特数。
I2C主控制器100发起I2C读操作时,I2C主控制器100首先按照标准I2C规范驱动I2C时钟线500与I2C数据线400,产生I2C START信号(S),然后发送读地址字节,I2C接口模块200在接收读地址字节后驱动I2C数据线400,产生应答位,按照标准I2C规范,应答位可以为I2C ACK(I2C数据线电平为低)或I2C NAK(I2C数据线电平为高)。
当读地址字节的应答位为I2C ACK时,I2C接口模块200可以通过驱动I2C数据线400返回一个或多个读操作数据字节,I2C主控制器100在接收每个读操作数据字节后驱动I2C数据线产生应答位,读操作数据字节的应答位可以为I2C ACK(I2C数据线电平为低)或I2C NAK(I2C数据线电平为高)。
按照标准I2C规范,I2C主控制器100发送读地址字节及I2C接口模块20返回一个或多个读操作数据字节时,I2C主控制器100通过驱动I2C数据线400发送读地址字节所包含的比特数,I2C接口模块200通过驱动I2C数据线400返回读操作数据字节所包含的比特,并且对读地址字节及读操作数据字节所包含的每一个比特,I2C主控制器100驱动I2C时钟线500产生一个时钟脉冲。
按照标准I2C规范,对应读地址字节的应答位及读操作数据字节的应答位,I2C主控制器100也会驱动I2C时钟线500产生一个时钟脉冲。I2C主控制器100通过发送标准I2C规范所定义的I2C STOP信号(P)或I2C START信号(S)结束当前的读操作。
一个I2C写操作或I2C读操作周期均由I2C START信号(S)开始,但结束方式有两种,第一种是以I2C STOP信号(P)结束,时序分别如2和图3所示。
第二种是产生新的I2C START信号(S),进入下一个I2C写操作或I2C读操作,时序如图4所示。图4中应答位(A/N)与I2C START信号(Sr)之间出现虚线连线(其他附图中的此类连线)是因为时序图较长不便于在同一行中描述,故拆分成多行,表示两个时序图之间具有衔接关系。
使用上述任何一种结束方式都不会对本发明的数据写入方法和数据读取方法产生影响,为描述方便,本实施例中均以带有I2C STOP信号(P)的方式描述一个I2C操作(I2C写操作或I2C读操作)的结束。
数据写入方法的工作模式一。
根据本发明的实施例,提供一种I2C数据写入方法,使用本发明提供的I2C接口系统进行数据写入,包括:
I2C主控制器100发起I2C写操作将写命令包发送至I2C接口模块200;I2C接口模块200接收到写命令包后拉低I2C时钟线500电平,并将写命令包发送到功能模块300。
功能模块接300接收写命令包并执行写命令,当功能模块300完成写命令后,向I2C接口模块200返回写状态包。
当I2C接口模块200接收到写状态包并且写状态包的状态信息为成功时,I2C接口模块200停止拉低I2C时钟线500电平,并且向I2C主控制器100返回I2C ACK。
当I2C接口模块200接收到写状态包并且写状态包的状态信息为失败时,I2C接口模块200停止拉低I2C时钟线500电平,并且向I2C主控制器100返回I2C NAK。
本发明写命令包通过写操作数据字节(BYTE(1)、…、BYTE(N),有阴影)发送,写命令包包括写命令长度域和写命令数据域,或者写命令包只包括写命令数据域。
本发明的写命令数据域包含写命令,写命令包用于区分读命令包。
本发明读命令包也通过写操作数据字节(BYTE(1)、…、BYTE(N),有阴影)发送,读命令包包括读命令长度域和读命令数据域,或者读命令包只包括读命令数据域,读命令数据域包含读命令。
举例来说,I2C主控制器100发起写命令包时,I2C主控制器100发起I2C写操作将写地址字节及包含写命令包的一个或多个写操作数据字节(BYTE(1)、…、BYTE(N),有阴影)发送至I2C接口模块200。I2C主控制器100发起读命令包时,I2C主控制器100发起I2C写操作将写地址字节及包含读命令包的一个或多个写操作数据字节(BYTE(1)、…、BYTE(N),有阴影)发送至I2C接口模块200。
I2C接口模块200具有I2C接口的逻辑电路,I2C接口模块200接收并响应来自I2C主控制器100的数据。I2C接口模块200与I2C主控制器100之间通过I2C总线(时钟线500和I2C数据线400)互联,一个I2C主控制器100连接一个或多个I2C接口模块200,每个I2C接口模块200在其所在的I2C总线(时钟线500和I2C数据线400)上具有唯一的I2C地址(ADDR)。按照标准I2C规范,除I2C写广播之外的每个I2C写操作或I2C读操作只针对其中一个I2C地址(ADDR),使用其它I2C地址的I2C接口模块100不参与该I2C写操作或I2C读操作。
结合图5,具体的实施例中,I2C接口模块200具有长度为7bit的I2C地址0x50(对应写地址字节0xA0或二进制数值1010000),I2C主控制器100发起一个I2C写操作向I2C接口模块200依次写入0x06、0x11、0x21、0x31、0x41、0x51、0x61共计7个字节长度的写操作数据,此7个字节写操作数据包含了写命令包。0xA0字节对应写地址字节,其高7bit对应I2C接口模块200的I2C地址(ADDR),低位1bit为写操作指示位(W),写操作指示位(W)的数值为0表示当前为写操作,该字节的数值为二进制数10100000,即十六进制数0xA0。
此例中,写命令包包括写命令长度域和写命令数据域。
0x06字节对应写命令长度域,本实施例中写命令长度域以1个字节表示,在一些实施例中写命令包可以只包括写命令数据域而不包括写命令长度域,这时写命令包的长度由预设条件确定,在另外的实施例中,写命令长度域可以以多个字节(整数个字节)表示,也可以以非整数个字节表示。
0x11、0x21、0x31、0x41、0x51、0x61字节对应写命令数据域,本实施例中写命令数据域总共6个字节,在其他实施例中,写命令数据域可以为其他整数个字节或非整数个字节,I2C接口模块200接收到0x61字节的最后一个比特,即I2C接口模块200接收到的数据达到写命令包长度时,I2C接口模块200接收到写命令包。
本发明中,I2C接口模块200接收到的数据达到写命令包长度,指I2C接口模块200接收到写命令包的全部数据。
如图5所示实施例中,写命令长度域的值(0x06)等于写命令数据域的长度,I2C接口模块200接收到的数据达到写命令包长度,指I2C接口模块200接收到写命令数据域的全部数据,直至写命令数据域的最后一个字节0x61字节。
在本发明的另外实施例中,写命令长度域的值也可以预设定义为等于写命令包的长度(包括写命令长度域所占长度及写命令数据域长度)。
写命令长度域的值也可以预设定义为包含部分或全部下述数据域:写地址字节、写命令长度域、写命令数据域、写命令包校验码(在本文件下面描述)等,本发明不限制写命令长度域的值所包含的内容,对写命令长度域的值所包含内容的预设定义只需使得I2C接口模块200能够根据预设定义接收到写命令包全部数据即可。
本发明中的一些实施例中,写命令包可以不包含写命令长度域,只包含写命令数据域,在这种情况下,写命令包长度由预设条件确定。
图5所示实施例中,I2C接口模块200接收到0x61字节的最后一个比特,即I2C接口模块200接收到的数据达到写命令包长度,I2C接口模块200接收到写命令包,I2C接口模块200拉低I2C时钟线500电平,I2C总线处于HOLD状态(持续的低电平状态),I2C接口模块200将写命令包发送到功能模块300。功能模块接300接收写命令包并执行写命令,当功能模块300完成写命令后,向I2C接口模块200返回写状态包。
在本发明中,I2C接口模块200将写命令包发送到功能模块300时,可以对写命令包中的内容进行修改、添加或删除,本发明不对此进行限制或规定。
当I2C接口模块200接收到写状态包并且写状态包的状态信息为成功时,I2C接口模块200停止拉低I2C时钟线500电平,并且向I2C主控制器100返回I2C ACK。
当I2C接口模块200接收到写状态包并且写状态包的状态信息为失败时,I2C接口模块200停止拉低I2C时钟线500电平,并且向I2C主控制器100返回I2C NAK。
在下文的实施例中,写命令包包括写命令长度域和写命令数据域,写命令长度域的长度仍然为一个字节,写命令长度域的值等于写命令数据域的长度。
根据本发明的实施例,写命令包还包含写命令包校验码。I2C接口模块200接收到的数据达到写命令包长度,并且写命令包校验码验证正确,则I2C接口模块200接收到写命令包。
如图6所示,写命令包中增加一个字节的写命令包校验码(CRC)。本发明并不限定写命令包校验码的生成算法,在一些实施例中,写命令包校验码的长度并不限定于一个字节。在下文的实施例中示例性的使用一个字节长度的写命令包校验码,并以循环冗余校验码的英文缩写CRC标记。
I2C主控制器100发起一个I2C写操作,I2C接口模块200接收到写命令长度域(0x06)后即可判断出I2C主控制器100之后将依次写入0x11、0x21、0x31、0x41、0x51、0x61共计6个字节长度的写命令数据域和1个字节长度的写命令包校验码(CRC)。
I2C接口模块200接收到写命令长度域(0x06)后,对收到的写命令数据域字节进行计数,当收到写命令数据域的最后一个字节0x61字节后,利用0x11、0x21、0x31、0x41、0x51、0x61的6个字节计算写命令包校验码(CRC)。当I2C接口模块200接收到写命令包校验码(CRC),将接收到的写命令包校验码(CRC)与计算的写命令包校验码(CRC)对比,如果二者一致,则I2C接口模块200接收到的数据达到写命令包长度,并且写命令包校验码验证正确,I2C接口模块200接收到写命令包。
本发明不限制写命令包校验码(CRC)计算所基于的数据,例如,除写命令数据域之外其他数据也可以用于写命令包校验码(CRC)的计算,包括但不限于写地址字节、写命令长度域等。
如图6所示,I2C接口模块200接收到写命令包后,I2C接口模块200拉低I2C时钟线500电平,I2C总线处于HOLD状态(持续的低电平状态),I2C接口模块200将写命令包发送到功能模块300。功能模块接300接收写命令包并执行写命令,当功能模块300完成写命令后,向I2C接口模块200返回写状态包。
根据本发明的实施例,当I2C接口模块200接收到写状态包并且写状态包的状态信息为成功,I2C接口模块200停止拉低I2C时钟线电平,并且向I2C主控制器100返回I2C ACK。
当I2C接口模块200接收到写状态包并且写状态包的状态信息为失败时,I2C接口模块200停止拉低I2C时钟线500电平,并且向I2C主控制器100返回I2C NAK。
本发明所指的后续I2C操作是相对于在其之前的I2C操作,I2C操作可以为I2C写操作或I2C读操作。
举例来说,如图7所示,I2C主控制器100发起一个序号为m(m为自然数)的I2C操作(I2C写操作),I2C主控制器100发起的序号为m+1的I2C操作为后续I2C操作(相对于序号为m的I2C操作)。
图7所示实施例通过序号为m的I2C写操作发送写命令包,I2C接口模块200在接收到写命令包后(接收到BYTE(N)后)拉低I2C时钟线500电平。
在第①时刻,I2C接口模块200接收到写状态包并且写状态包的状态信息为成功,I2C接口模块200停止拉低I2C时钟线500电平,终止HOLD状态(终止持续的低电平状态)。
在第②时刻,I2C接口模块200向I2C主控制器100返回I2C ACK,I2C主控制器100终止序号为m的I2C操作(I2C写操作),发起序号为m+1的I2C操作(后续I2C操作),后续I2C操作为I2C写操作或I2C读操作。
I2C接口模块200在序号为m的I2C操作中返回I2C ACK后,继续接收I2C主控制器100发起的后续I2C操作(指在序号为m+1的I2C操作中接收读地址字节或写地址字节后返回I2C ACK并继续序号为m+1的I2C操作),重复上述过程,I2C主控制器100连续发起I2C操作。
根据本发明的实施例,当I2C接口模块200接收到写状态包并且写状态包的状态信息为失败,I2C接口模块200停止拉低I2C时钟线500电平,并且向I2C主控制器100返回I2CNAK。
如果I2C主控制器100发起的后续I2C操作为I2C写操作,则I2C接口模块200向I2C主控制器100返回I2C NAK。
如果I2C主控制器100发起的后续I2C操作为I2C读操作,则I2C接口模块200向I2C主控制器100返回写状态包的状态信息。
举例来说,如图8所示,I2C主控制器100发起的序号为m的I2C操作为I2C写操作,I2C主控制器100通过I2C写操作发送写命令包,I2C接口模块200在接收到写命令包后(接收到BYTE(N)后)拉低I2C时钟线500电平。
在第①时刻,I2C接口模块200接收到写状态包并且写状态包的状态信息为失败,I2C接口模块200停止拉低I2C时钟线500电平,终止HOLD状态(终止持续的低电平状态)。
在第②时刻,I2C接口模块200向I2C主控制器100返回I2C NAK,I2C主控制器100终止序号为m的I2C操作(I2C写操作)。
如图10所示,I2C主控制器100终止序号为m的I2C操作(I2C写操作)后(序号为m的I2C操作如图8所示),如果I2C主控制器100发起的序号为m+1的I2C操作(后续I2C操作)为I2C写操作,I2C接口模块200接收到写地址字节后,I2C接口模块200向I2C主控制器100返回I2C NAK,从而序号为m+1的I2C操作(后续I2C操作/I2C写操作)终止执行。
如图11所示,I2C主控制器100终止序号为m的I2C操作(I2C写操作)后(序号为m的I2C操作如图8所示),如果I2C主控制器100发起的序号为m+1的I2C操作(后续I2C操作)为I2C读操作,I2C接口模块200接收到读地址字节后,I2C接口模块200向I2C主控制器100返回I2C ACK并继续返回写状态包的状态信息(STATUS),从而使I2C主控制器100继续执行序号为m+1的I2C操作(后续I2C操作/I2C读操作)。
I2C主控制器100继续执行序号为m+1的I2C操作(后续I2C操作/I2C读操作)过程中,读取写状态包的状态信息(STATUS)。
I2C主控制器100完成序号为m+1的I2C操作(后续I2C操作/I2C读操作)后,发起序号为m+2的I2C操作。
I2C接口模块200在完成序号为m+1的I2C操作(后续I2C操作/I2C读操作)后,继续接收I2C主控制器100发起的序号为m+2的I2C操作(指I2C接口模块200在序号为m+2的I2C操作中接收读地址字节或写地址字节后返回I2C ACK并继续序号为m+2的I2C操作),重复上述过程,I2C主控制器100连续发起I2C操作。
根据本发明的实施例,当I2C接口模块200接收到的数据达到写命令包长度之前,I2C接口模块200接收到I2C START信号或I2C STOP信号,则I2C接口模块200结束当前写命令包的接收,I2C接口模块200未接收到写命令包。
如果I2C主控制器100发起的后续I2C操作为I2C写操作,则I2C接口模块200向I2C主控制器100返回I2C NAK。
如果I2C主控制器100发起的后续I2C操作为I2C读操作,则I2C接口模块200向I2C主控制器返回状态信息,此例中I2C接口模块200未接收到写命令包,因而I2C接口模块200不会发送写命令包到功能模块300也不会从功能模块300接收写状态包,因此I2C接口模块200向I2C主控制器100返回的状态信息不来自于写状态包,本发明不规定此例中I2C接口模块200向I2C主控制器100返回的状态信息,但在一些实施例中状态信息可以包含但不限于体现I2C接口模块200未接收到写命令包。
举例来说,如图10和图11所示,I2C主控制器100发起的序号为m的I2C操作为I2C写操作,I2C主控制器100通过I2C写操作发送写命令包,此例中I2C接口模块200在序号为m的I2C写操作中接收到的数据未达到写命令包长度,在I2C接口模块200接收到的数据达到写命令包长度之前,I2C接口模块200接收到I2C START信号或I2C STOP信号,I2C接口模块200结束当前写命令包的接收,I2C接口模块200未接收到写命令包。
I2C主控制器100终止序号为m的I2C操作(I2C写操作),I2C主控制器100发起序号为m+1的I2C操作(后续I2C操作)。I2C主控制器100发起的序号为m+1的I2C操作(后续I2C操作)过程与上文中的处理方式相同,这里不再赘述。
根据本发明的实施例,当I2C接口模块200接收到的的数据达到写命令包长度,但写命令包校验码验证不正确,则I2C接口模块200结束当前写命令包的接收,I2C接口模块200未接收到所述写命令包。
如果I2C主控制器100发起的后续I2C操作为I2C写操作,则I2C接口模块200向I2C主控制器100返回I2C NAK。
如果I2C主控制器100发起的后续I2C操作为I2C读操作,则I2C接口模块200向I2C主控制器100返回状态信息,此例中I2C接口模块200未接收到写命令包,因而I2C接口模块200不会发送写命令包到功能模块300也不会从功能模块300接收写状态包,因此I2C接口模块200向I2C主控制器100返回的状态信息不来自于写状态包,本发明不规定此例中I2C接口模块200向I2C主控制器100返回的状态信息,但在一些实施例中状态信息可以包含但不限于体现I2C接口模块200未接收到写命令包。
举例来说,如图10和图11所示,I2C主控制器100发起的序号为m的I2C操作为I2C写操作,I2C主控制器100通过I2C写操作发送写命令包,此例中I2C接口模块200在序号为m的I2C写操作中接收到的数据达到写命令包长度,,但写命令包校验码验证不正确,I2C接口模块200结束当前写命令包的接收,I2C接口模块200未接收到写命令包。
I2C主控制器100终止序号为m的I2C操作(I2C写操作),I2C主控制器100发起序号为m+1的I2C操作(后续I2C操作)。I2C主控制器100发起的序号为m+1的I2C操作(后续I2C操作)过程与上文中的处理方式相同,这里不再赘述。
根据本发明的实施例,I2C接口模块200包括超时计时器。
I2C主控制器100通过I2C写操作发送写命令包,I2C接口模块200在接收到写命令包后将写命令包发送到功能模块300,I2C接口模块200持续等待功能模块300返回的写状态包并且超时计时器计时。
当I2C接口模块200在超时之前未接收到写状态包,超时后I2C接口模块200停止拉低I2C时钟线500电平,并且向I2C主控制器100返回I2C NAK。
如果I2C主控制器100发起的后续I2C操作为I2C写操作,则I2C接口模块200向I2C主控制器100返回I2C NAK。
如果I2C主控制器100发起的后续I2C操作为I2C读操作,则I2C接口模块200向I2C主控制器100返回状态信息,此例中I2C接口模块200未接收到写状态包,因此I2C接口模块200向I2C主控制器100返回的状态信息不来自于写状态包,本发明不规定此例中I2C接口模块200向I2C主控制器100返回的状态信息,但在一些实施例中状态信息可以包含但不限于体现I2C接口模块200在超时之前未接收到写状态包。
举例来说,如图9所示,I2C主控制器100发起的序号为m的I2C操作为I2C写操作,I2C主控制器100通过I2C写操作发送写命令包,I2C接口模块200在接收到写命令包后(接收到BYTE(N)后),在第①时刻拉低I2C时钟线500电平,I2C接口模块200持续等待功能模块300向I2C接口模块200返回的写状态包并并且超时计时器计时。
当在第②时刻计时超时,I2C接口模块200在超时之前未接收到写状态包,超时后I2C接口模块200停止拉低I2C时钟线500电平,终止HOLD状态(终止持续的低电平状态),并且向I2C主控制器100返回I2C NAK,
举例来说,如图10和图11所示,I2C主控制器100终止序号为m的I2C操作(I2C写操作)(此例中序号为m的I2C写操作如图9所示),I2C主控制器100发起序号为m+1的I2C操作(后续I2C操作)。I2C主控制器100发起的序号为m+1的I2C操作(后续I2C操作)过程与上文中的处理方式相同,这里不再赘述。
数据写入方法的工作模式二。
根据本发明的实施例,提供一种I2C数据写入方法,使用本发明提供的I2C接口系统进行数据写入,包括:
I2C主控制器100发起I2C写操作将写命令包发送至I2C接口模块200;I2C接口模块200接收到写命令包后将写命令包发送到功能模块300。
功能模块300接收写命令包并执行写命令,当功能模块300完成写命令后,向I2C接口模块200返回写状态包。
在I2C接口模块200接收到写命令包后,
如果I2C主控制器100发起的后续I2C操作为I2C写操作,并且I2C接口模块200,接收到功能模块300向I2C接口模块200返回的写状态包并且写状态包的状态信息为成功,则I2C接口模块200接收I2C主控制器100发起的后续I2C写操作。
如果I2C主控制器100发起的后续I2C操作为I2C写操作,并且I2C接口模块200,接收到功能模块300向I2C接口模块200返回的写状态包并且写状态包的状态信息为失败,则I2C接口模块200向I2C主控制器100返回I2C NAK。
如图12和图13所示,I2C主控制器100发起的序号为m的I2C操作为I2C写操作将写命令包发送至I2C接口模块200,对于前N-1个写操作数据字节(BYTE(1)、…、BYTE(N-1)),每个写操作数据字节发送后,I2C接口模块200都向I2C主控制器100返回I2C ACK。
I2C接口模块200接收第N个写操作数据字节(BYTE(N))后(即I2C接口模块200接收完整的写命令包后),I2C接口模块200可能向I2C主控制器100返回I2C ACK或I2C NAK,具体通过I2C主控制器100与I2C接口模块200之间的约定来选择,I2C主控制器100与I2C接口模块200之间可以约定第N个写操作数据字节(BYTE(N))后无论I2C ACK或I2C NAK都表示第N个写操作数据字节(即完整写命令包)的成功接收,也可以约定I2C NAK表示第N个写操作数据字节(BYTE(N))没有被成功接收(即完整写命令包没有被成功接收),本发明的下述描述中第N个写操作数据字节(BYTE(N))后无论I2C接口模块200向I2C主控制器100返回I2C ACK或I2C NAK都表示第N个写操作数据字节(即完整写命令包)的成功接收。
I2C主控制器100完成第N个写操作数据字节(BYTE(N))的发送后,无论I2C接口模块200向I2C主控制器100返回I2C ACK或I2C NAK,I2C主控制器100终止序号为m的I2C操作(I2C写操作),并可以选择发起序号为m+1的I2C操作(后续I2C操作)。
当序号为m+1的I2C操作(后续I2C操作)为I2C写操作时,如果I2C接口模块200,接收到功能模块300向I2C接口模块200返回的写状态包(序号为m的I2C操作过程中对应的写状态包)并且写状态包的状态信息为成功,则在I2C主控制器100发送写地址字节后,I2C接口模块200向I2C主控制器100返回I2C ACK,I2C接口模块200接收I2C主控制器100发起的序号为m+1的I2C操作(后续I2C操作/I2C写操作)发送的写操作数据字节,如图12所示。
如果I2C接口模块200,接收到功能模块300向I2C接口模块200返回的写状态包(序号为m的I2C操作过程中对应的写状态包)并且写状态包的状态信息为失败,则在I2C主控制器100发送写地址字节后,I2C接口模块200向I2C主控制器100返回I2C NAK,主控制器100终止发起m+1的I2C操作(后续I2C操作/I2C写操作),如图13所示。
根据本发明的实施例,当I2C接口模块200接收到的数据达到写命令包长度时,则I2C接口模块200接收到写命令包。具体地,判定I2C接口模块200接收到写命令包的过程与数据写入方法的工作模式一中的判定过程相同,这里不再赘述。
根据本发明的实施例,写命令包还包含写命令包校验码。当I2C接口模块200接收到的数据达到写命令包长度,并且写命令包校验码验证正确,则I2C接口模块200接收到写命令包。具体地,判定I2C接口模块200接收到写命令包的过程与数据写入方法的工作模式一中的判定过程相同,这里不再赘述。
根据本发明的实施例,当I2C主控制器100发起的后续I2C操作为I2C读操作时,则I2C接口模块200接收到功能模块300向I2C接口模块200返回的写状态包后,I2C接口模块200向I2C主控制器100返回写状态包的状态信息。
如图14所示,I2C主控制器100发起的序号为m的I2C操作为I2C写操作将写命令包发送至I2C接口模块200,对于前N-1个写操作数据字节(BYTE(1)、…、BYTE(N-1)),每个写操作数据字节发送后,I2C接口模块200都向I2C主控制器100返回I2C ACK。
I2C接口模块200接收第N个写操作数据字节(BYTE(N))后(即I2C接口模块200接收完整的写命令包后),I2C接口模块200可能向I2C主控制器100返回I2C ACK或I2C NAK。
I2C主控制器100完成第N个写操作数据字节(BYTE(N))发送后,无论I2C接口模块200向I2C主控制器100返回I2C ACK或I2C NAK,I2C主控制器100终止序号为m的I2C操作(I2C写操作),并可以选择发起序号为m+1的I2C操作(后续I2C操作)。
当序号为m+1的I2C操作(后续I2C操作)为I2C读操作时,如果I2C接口模块200,接收到功能模块300向I2C接口模块200返回的写状态包(序号为m的I2C操作过程中对应的状态包)后,则在I2C主控制器100发送读地址字节后,I2C接口模块200向I2C主控制器100返回I2C ACK并返回写状态包(序号为m的I2C操作过程中对应的状态包)的状态信息(STATUS)。
根据本发明的实施例,当I2C接口模块200接收到的的数据达到写命令包长度之前,I2C接口模块200接收到I2C START信号或I2C STOP信号,则I2C接口模块200结束当前写命令包的接收,I2C接口模块200未接收到写命令包。
如果I2C主控制器100发起的后续I2C操作为I2C写操作,则I2C接口模块200向I2C主控制器100返回I2C NAK。
如果I2C主控制器100发起的后续I2C操作为I2C读操作,则I2C接口模块200向I2C主控制器100返回状态信息。
I2C主控制器100发起后续I2C读操作后的过程与数据写入方法的工作模式一中的处理方式相同,这里不再赘述。
根据本发明的实施例,当I2C接口模块200接收到的的数据达到写命令包长度,但写命令包校验码验证不正确,则I2C接口模块200结束当前写命令包的接收,I2C接口模块200未接收到所述写命令包。
如果I2C主控制器100发起的后续I2C操作为I2C写操作,则I2C接口模块200向I2C主控制器100返回I2C NAK。
如果I2C主控制器100发起的后续I2C操作为I2C读操作,则I2C接口模块200向I2C主控制器100返回状态信息。
I2C主控制器100发起后续I2C读操作后的过程与数据写入方法的工作模式一中的处理方式相同,这里不再赘述。
根据本发明的实施例,I2C接口模块200包括超时计时器。
I2C主控制器100通过I2C写操作发送写命令包,I2C接口模块200在接收到写命令包后将写命令包发送到功能模块300,I2C接口模块200持续等待功能模块300返回的写状态包并且超时计时器计时。
当I2C接口模块200在超时之前未接收到写状态包,超时后如果I2C主控制器100发起的后续I2C操作为I2C写操作,则I2C接口模块200向I2C主控制器100返回I2C NAK。
当I2C接口模块200在超时之前未接收到写状态包,超时后如果I2C主控制器100发起的后续I2C操作为I2C读操作,则I2C接口模块200向I2C主控制器100返回状态信息。
I2C主控制器100发起后续I2C读操作后的过程与数据写入方法的工作模式一中的处理方式相同,这里不再赘述。
根据本发明的实施例,当I2C主控制器100发起的后续I2C操作为I2C写操作时,如果I2C接口模块200,接收到功能模块300向I2C接口模块200返回的写状态包并且写状态包的状态信息为失败,则I2C接口模块200向I2C主控制器100返回I2C NAK。如果再之后I2C主控制器100发起的后续I2C操作为I2C写操作,I2C接口模块200继续向I2C主控制器100返回I2C NAK。如果再之后I2C主控制器100发起的后续I2C操作为I2C读操作,I2C接口模块200向I2C主控制器100返回写状态包的状态信息,并在I2C读操作后I2C接口模块200继续接收I2C主控制器100发起的后续I2C操作。
如图15和图16所示,I2C主控制器100发起的序号为m的I2C操作为I2C写操作将写命令包发送至I2C接口模块200,对于前N-1个写操作数据字节(BYTE(1)、…、BYTE(N-1)),每个写操作数据字节发送后,I2C接口模块200都向I2C主控制器100返回I2C ACK。
I2C接口模块200接收第N个写操作数据字节(BYTE(N))后(即I2C接口模块200接收完整的写命令包后),I2C接口模块200可能向I2C主控制器100返回I2C ACK或I2C NAK。
I2C主控制器100完成第N个写操作数据字节(BYTE(N))发送后,无论I2C接口模块200向I2C主控制器100返回I2C ACK或I2C NAK,I2C主控制器100终止序号为m的I2C操作(I2C写操作),并可以选择发起序号为m+1的I2C操作(后续I2C操作)。
当序号为m+1的I2C操作(后续I2C操作)为I2C写操作时,如果I2C接口模块200,接收到功能模块300向I2C接口模块200返回的写状态包(序号为m的I2C操作过程中对应的状态包)并且写状态包的状态信息为失败,则在I2C主控制器100发送写地址字节后,I2C接口模块200向I2C主控制器100返回I2C NAK,主控制器100终止发起m+1的I2C操作(后续I2C操作/I2C写操作),I2C主控制器100可以选择发起序号为m+2的I2C操作(后续I2C操作)。
如果I2C主控制器100发起的序号为m+2的I2C操作(后续I2C操作)为I2C写操作,I2C接口模块200向I2C主控制器100返回I2C NAK,主控制器100终止发起m+2的I2C操作(后续I2C操作/I2C写操作),如图15所示。
如果I2C主控制器100发起的序号为m+2的I2C操作(后续I2C操作)为I2C读操作,I2C接口模块200接收读地址字节后,I2C接口模块200向I2C主控制器100返回I2C ACK,并且向I2C主控制器100返回写状态包(序号为m的I2C操作过程中对应的状态包)的状态信息(STATUS)。在序号为m+2的I2C操作(后续I2C操作/I2C读操作)后,I2C接口模块200继续接收I2C主控制器100发起的序号为m+3的I2C操作(后续I2C操作)(指I2C接口模块200在序号为m+3的I2C操作中接收读地址字节或写地址字节后返回I2C ACK并继续序号为m+3的I2C操作),如图16所示。
根据本发明的实施例,当I2C主控制器100发起的后续I2C操作为I2C写操作时,如果I2C接口模块200,未接收到功能模块300向I2C接口模块200返回的写状态包,则I2C接口模块200拉低I2C时钟线500电平。
如果I2C接口模块200,接收到功能模块300向I2C接口模块200返回的写状态包并且写状态包的状态信息为成功,则I2C接口模块200停止拉低I2C时钟线500电平,并接收I2C主控制器100发起的后续I2C写操作。
如果I2C接口模块200,接收到功能模块300向I2C接口模块200返回的写状态包并且写状态包的状态信息为失败,则I2C接口模块200停止拉低I2C时钟线500电平,并向I2C主控制器100返回I2C NAK。
如图17和图18所示,I2C主控制器100发起的序号为m的I2C操作为I2C写操作将写命令包发送至I2C接口模块200,对于前N-1个写操作数据字节(BYTE(1)、…、BYTE(N-1)),每个写操作数据字节发送后,I2C接口模块200都向I2C主控制器100返回I2C ACK。
I2C接口模块200接收第N个写操作数据字节(BYTE(N))后(即I2C接口模块200接收完整的写命令包后),I2C接口模块200可能向I2C主控制器100返回I2C ACK或I2C NAK。
I2C主控制器100完成第N个写操作数据字节(BYTE(N))发送后,无论I2C接口模块200向I2C主控制器100返回I2C ACK或I2C NAK,I2C主控制器100终止序号为m的I2C操作(I2C写操作),并可以选择发起序号为m+1的I2C操作(后续I2C操作)。
当I2C主控制器100发起的序号为m+1的I2C操作(后续I2C操作)为I2C写操作时,如果I2C接口模块200,未接收到功能模块300向I2C接口模块200返回的写状态包(序号为m的I2C操作过程中对应的写状态包),则I2C接口模块200在接收写地址字节后,拉低I2C时钟线电平,暂停序号为m+1的I2C操作的进程,继续等待接收写状态包。
如果I2C接口模块200,接收到功能模块300向I2C接口模块200返回的写状态包(序号为m的I2C操作过程中对应的写状态包)并且写状态包的状态信息为成功,则I2C接口模块200停止拉低I2C时钟线500电平,向I2C主控制器100返回I2C ACK,并接收I2C主控制器100发起的序号为m+1的I2C操作(后续I2C操作/I2C写操作),如图17所示。
如果I2C接口模块200,接收到功能模块300向I2C接口模块200返回的写状态包(序号为m的I2C操作过程中对应的写状态包)并且写状态包的状态信息为失败,则I2C接口模块200停止拉低I2C时钟线500电平,并向I2C主控制器100返回I2C NAK,主控制器100终止发起m+1的I2C操作(后续I2C操作/I2C写操作),如图18所示。
根据本发明的实施例,当I2C主控制器100发起的后续I2C操作为I2C读操作时,如果I2C接口模块200,未接收到功能模块300向I2C接口模块200返回的写状态包,则I2C接口模块200拉低I2C时钟线电平。
如果I2C接口模块200,接收到功能模块300向I2C接口模块200返回的写状态包,则I2C接口模块200停止拉低I2C时钟线电平,并向I2C主控制器100返回写状态包的状态信息。
如图19所示,当I2C主控制器100发起的序号为m的I2C操作为I2C写操作将写命令包发送至I2C接口模块200,I2C主控制器100发起的序号为m+1的I2C操作为I2C读操作时,如果I2C接口模块200,未接收到功能模块300向I2C接口模块200返回的写状态包(序号为m的I2C操作过程中对应的写状态包),则I2C接口模块200拉低I2C时钟线电平。
如果I2C接口模块200,接收到功能模块300向I2C接口模块200返回的写状态包(序号为m的I2C操作过程中对应的写状态包),则I2C接口模块200停止拉低I2C时钟线电平,向I2C主控制器100返回I2C ACK,并向I2C主控制器100返回写状态包的状态信息(STATUS)。
数据读取方法的工作模式一。
根据本发明的实施例,提供一种I2C数据读取方法,使用本发明提供的I2C接口系统进行数据读取,包括:
I2C主控制器100发起I2C写操作将读命令包发送至I2C接口模块200;I2C接口模块200接收到读命令包后拉低I2C时钟线电平,并将读命令包发送到功能模块300。
功能模块300接收读命令包并执行读命令,当功能模块300完成读命令后,向I2C接口模块200返回读数据包,读数据包内包括读数据。
根据本发明的实施例,读数据包括从功能模块300读取的数据,或者功能模块300执行读命令所产生的读状态信息,或者既包括从功能模块300所读取的数据,也包括功能模块300执行读命令所产生的读状态信息。
当I2C接口模块200接收到读数据包,I2C接口模块200停止拉低I2C时钟线电平。
本发明读命令包通过写操作数据字节(BYTE(1)、…、BYTE(N),有阴影)发送,读命令包包括读命令长度域和读命令数据域,或者读命令包只包括读命令数据域,读命令数据域包含读命令。
结合图5,具体的实施例中,I2C接口模块200具有长度为7bit的I2C地址0x50(对应写地址字节0xA0或二进制数值1010000),I2C主控制器100发起一个I2C写操作向I2C接口模块200依次写入0x06、0x11、0x21、0x31、0x41、0x51、0x61共计7个字节长度的写操作数据,此7个字节写操作数据包含了读命令包。0xA0字节对应写地址字节,其高7bit对应I2C接口模块200的I2C地址(ADDR),低位1bit为写操作指示位(W),写操作指示位(W)的数值为0表示当前为写操作,该字节的数值为二进制数10100000,即十六进制数0xA0。
此例中,读命令包包括读命令长度域和读命令数据域。
0x06字节对应读命令长度域,本实施例中读命令长度域以1个字节表示,在一些实施例中读命令包可以只包括读命令数据域而不包括读命令长度域,这时读命令包的长度由预设条件确定,在另外的实施例中,读命令长度域可以以多个字节(整数个字节)表示,也可以以非整数个字节表示。
0x11、0x21、0x31、0x41、0x51、0x61字节对应读命令数据域,本实施例中读命令数据域总共6个字节,在其他实施例中,读命令数据域可以为其他整数个字节或非整数个字节,I2C接口模块200收到0x61字节的最后一个比特,即I2C接口模块200接收到的数据达到读命令包长度时,I2C接口模块200接收到读命令包。
本发明中,I2C接口模块200接收到的数据达到读命令包长度,指I2C接口模块200接收到读命令包的全部数据。
如图5所示实施例中,读命令长度域的值(0x06)等于读命令数据域的长度,I2C接口模块200接收到的数据达到读命令包长度,指I2C接口模块200接收到读命令数据域的全部数据,直至读命令数据域的最后一个字节0x61字节。
在本发明的另外实施例中,读命令长度域的值也可以预设定义为等于读命令包的长度(包括读命令长度域所占长度及读命令数据域长度)。
读命令长度域的值也可以预设定义为包含部分或全部下述数据域:写地址字节、读命令长度域、读命令数据域、读命令包校验码(在本文件下面描述)等,本发明不限制读命令长度域的值所包含的内容,对读命令长度域的值所包含内容的预设定义只需使得I2C接口模块200能够根据预设定义接收到读命令包全部数据即可。
本发明中的一些实施例中,读命令包可以不包含读命令长度域,只包含读命令数据域,在这种情况下,读命令包长度由预设条件确定。
在下文的实施例中,读命令包包括读命令长度域和读命令数据域,读命令长度域的长度仍然为一个字节,读命令长度域的值等于读命令数据域的长度。
图5所示实施例中,I2C接口模块200收到0x61字节的最后一个比特,即I2C接口模块200接收到的数据达到读命令包长度时,I2C接口模块200接收到读命令包,I2C接口模块200拉低I2C时钟线500电平,I2C总线处于HOLD状态(持续的低电平状态),I2C接口模块200将读命令包发送到功能模块300。功能模块接300接收读命令包并执行读命令,当功能模块300完成读命令后,向I2C接口模块200返回读数据包。I2C接口模块200接收到读数据包,I2C接口模块200停止拉低I2C时钟线电平。
在本发明中,I2C接口模块200将读命令包发送到功能模块300时,可以对读命令包中的内容进行修改、添加或删除,本发明不对此进行限制或规定。I2C接口模块200接收到读数据包,I2C接口模块200停止拉低I2C时钟线电平后,向I2C主控制器100返回I2C ACK或I2CNAK。
本发明不限制或规定I2C接口模块200接收到读数据包并停止拉低I2C时钟线电平后,向I2C主控制器100返回I2C ACK或I2C NAK,作为一个实施例,I2C接口模块200可以选择当I2C接口模块200接收到读数据包并且读数据包的状态信息(读数据)为成功时,I2C接口模块200停止拉低I2C时钟线500电平,并且向I2C主控制器100返回I2C ACK,并且当I2C接口模块200接收到读数据包并且读数据包的状态信息为失败时,I2C接口模块200停止拉低I2C时钟线500电平,并且向I2C主控制器100返回I2C NAK。
需要说明的是,本发明写命令包和读命令包均由I2C主控制器100发起I2C写操作通过写操作数据字节(BYTE(1)、…、BYTE(N))发送给I2C接口模块200,I2C接口模块200仅是写命令包或读命令包的转发者,而不是最终接收端或命令执行者。功能模块300能够识别收到的命令包是读命令包还是写命令包,当功能模块300识别到收到的是读命令包,就需要向I2C接口模块200返回读数据包,当功能模块300识别到收到的是写命令包,就需要向I2C接口模块200返回写状态包。
具体的实施例中,I2C主控制器100发起一个I2C写操作,I2C接口模块200接收到读命令长度域(0x06)后即可判断出I2C主控制器100之后将依次写入0x11、0x21、0x31、0x41、0x51、0x61共计6个字节长度的读命令数据域。
根据本发明的实施例,读命令包还包含读命令包校验码。I2C接口模块200接收到的数据达到读命令包长度,并且读命令包校验码验证正确,则I2C接口模块200接收到读命令包。
具体地,如图6所示,读命令包中增加一个字节的读命令包校验码(CRC)。本发明并不限定读命令包校验码的生成算法,在一些实施例中,读命令包校验码的长度并不限定于一个字节。在下文的实施例中示例性的使用一个字节长度的读命令包校验码,并以循环冗余校验码的英文缩写CRC标记。
I2C主控制器100发起一个I2C写操作,I2C接口模块200接收到读命令长度域(0x06)后即可判断出I2C主控制器100之后将依次写入0x11、0x21、0x31、0x41、0x51、0x61共计6个字节长度的读命令数据域和1个字节长度的读命令包校验码(CRC)。
I2C接口模块200接收到读命令长度域(0x06)后,对收到的读命令数据域字节进行计数,当收到读命令数据域的最后一个字节0x61后,利用0x11、0x21、0x31、0x41、0x51、0x61的6个字节计算读命令包校验码(CRC)。当I2C接口模块200接收到读命令包校验码(CRC),将接收到的读命令包校验码(CRC)与计算的读命令包校验码(CRC)对比,如果二者一致,则I2C接口模块200接收到的数据达到读命令包长度,并且读命令包校验码验证正确,I2C接口模块200接收到读命令包。
本发明不限制读命令包校验码(CRC)计算所基于的数据,例如,除读命令数据域之外其他数据也可以用于读命令包校验码(CRC)的计算,包括但不限于写地址字节、读命令长度域等。
如图6所示,I2C接口模块200接收到读命令包后,I2C接口模块200拉低I2C时钟线500电平,I2C总线处于HOLD状态(持续的低电平状态),I2C接口模块200将读命令包发送到功能模块300。功能模块接300接收读命令包并执行读命令,当功能模块300完成读命令后,向I2C接口模块200返回读数据包。
根据本发明的实施例,当I2C接口模块200接收到读数据包,I2C接口模块200停止拉低I2C时钟线500电平,向I2C主控制器100返回I2C ACK或I2C NAK。
如果I2C主控制器100发起的后续I2C操作为I2C写操作,则I2C接口模块200向I2C主控制器100返回I2C NAK。
如果I2C主控制器100发起的后续I2C操作为I2C读操作,则I2C接口模块200向I2C主控制器100返回读数据。
如图20和图21所示,I2C主控制器100发起一个序号为m的I2C写操作将读命令包发送至I2C接口模块200,I2C接口模块200在接收到读命令包后(接收到BYTE(N)后)拉低I2C时钟线500电平。
在第①时刻,I2C接口模块200接收到读数据包,I2C接口模块200停止拉低I2C时钟线500电平,终止HOLD状态(终止持续的低电平状态)。
在第②时刻,I2C接口模块200向I2C主控制器100返回I2C ACK或I2CNAK,I2C主控制器100终止序号为m的I2C操作,I2C主控制器100发起序号为m+1的I2C操作(后续I2C操作)。
如果I2C主控制器100发起的序号为m+1的I2C操作(后续I2C操作)为I2C写操作,则I2C接口模块200接收到写地址字节后,I2C接口模块200向I2C主控制器100返回I2C NAK,从而序号为m+1的I2C操作(后续I2C操作/I2C写操作)终止执行,如图20所示。
如果I2C主控制器100发起的序号为m+1的I2C操作(后续I2C操作)为I2C读操作,则I2C接口模块200接收到读地址字节后,I2C接口模块200向I2C主控制器100返回I2C ACK并继续返回读数据(DATA),从而使I2C主控制器100继续执行序号为m+1的I2C操作(后续I2C操作/I2C读操作)。
I2C主控制器100继续执行序号为m+1的I2C操作(后续I2C操作/I2C读操作)过程中,读取读数据(DATA),I2C接口模块200在完成m+1的I2C操作(后续I2C操作/I2C读操作)后,继续接收I2C主控制器100发起的m+2的I2C操作(指I2C接口模块200在序号为m+2的I2C操作中接收读地址字节或写地址字节后返回I2C ACK并继续序号为m+2的I2C操作),如图21所示。
根据本发明的实施例,如果I2C接口模块200接收到的数据达到读命令包长度之前,I2C接口模块200接收到I2C START信号或I2C STOP信号,则I2C接口模块200结束当前读命令包的接收,I2C接口模块200未接收到所述读命令包。
如果I2C主控制器100发起的后续I2C操作为I2C写操作,则I2C接口模块200向I2C主控制器100返回I2C NAK。
如果I2C主控制器200发起的后续I2C操作为I2C读操作,则I2C接口模块200向I2C主控制器100返回状态信息,此例中I2C接口模块200未接收到读命令包,因而I2C接口模块200不会发送读命令包到功能模块300,也不会从功能模块300接收读数据包,因此I2C接口模块200向I2C主控制器100返回的状态信息不来自于读数据包,本发明不规定此例中I2C接口模块200向I2C主控制器100返回的状态信息,但在一些实施例中状态信息可以包含但不限于体现I2C接口模块200未接收到读命令包。
根据本发明的实施例,当I2C接口模块200接收到的数据达到读命令包长度,但读命令包校验码验证不正确,则I2C接口模块200结束当前读命令包的接收,I2C接口模块200未接收到读命令包。
如果I2C主控制器100发起的后续I2C操作为I2C写操作,则I2C接口模块200向I2C主控制器100返回I2C NAK。
如果I2C主控制器100发起的后续I2C操作为I2C读操作,则I2C接口模块200向I2C主控制器100返回状态信息,此例中I2C接口模块200未接收到读命令包,因而I2C接口模块200不会发送读命令包到功能模块300,也不会从功能模块300接收读数据包,因此I2C接口模块200向I2C主控制器100返回的状态信息不来自于读数据包,本发明不规定此例中I2C接口模块200向I2C主控制器100返回的状态信息,但在一些实施例中状态信息可以包含但不限于体现I2C接口模块200未接收到读命令包。
根据本发明的实施例,I2C接口模块200包括超时计时器。
I2C主控制器100通过I2C写操作发送读命令包,I2C接口模块200在接收到读命令包后,拉低I2C时钟线500电平并且将读命令包发送到功能模块300,I2C接口模块200持续等待功能模块300返回的读数据包并且超时计时器计时。
当I2C接口模块200在超时之前未接收到读数据包,超时后I2C接口模块200停止拉低I2C时钟线电平,并且向I2C主控制器返回I2C ACK或者I2C NAK。
如果I2C主控制器200发起的后续I2C操作为I2C写操作,则I2C接口模块200向I2C主控制器100返回I2C NAK。
如果I2C主控制器100发起的后续I2C操作为I2C读操作,则I2C接口模块200向I2C主控制器100返回状态信息,此例中I2C接口模块200未接收到读数据包,因此I2C接口模块200向I2C主控制器100返回的状态信息不来自于读数据包,本发明不规定此例中I2C接口模块200向I2C主控制器100返回的状态信息,但在一些实施例中状态信息可以包含但不限于体现I2C接口模块200在超时之前未接收到读数据包。
数据读取方法的工作模式二。
根据本发明的实施例,提供一种I2C数据读取方法,使用本发明提供的I2C接口系统进行数据读取,包括:
I2C主控制器100发起I2C写操作将读命令包发送至I2C接口模块200;I2C接口模块200接收到读命令包后将读命令包发送到功能模块300。
功能模块300接收读命令包并执行读命令,当功能模块300完成读命令后,向I2C接口模块200返回读数据包,读数据包内包括读数据。
根据本发明的实施例,读数据包括从功能模块300读取的数据,或者功能模块300执行读命令所产生的读状态信息,或者既包括从功能模块300所读取的数据,也包括功能模块300执行读命令所产生的读状态信息。
I2C接口模块200接收到读命令包后,如果I2C主控制器100发起的后续I2C操作为I2C写操作,并且I2C接口模块200接收到功能模块300向I2C接口模块200返回的读数据包,I2C接口模块200向I2C主控制器100返回I2CNAK。
如果I2C主控制器100发起的后续I2C操作为I2C读操作,并且I2C接口模块200接收到功能模块300向I2C接口模块200返回的读数据包,I2C接口模块200向I2C主控制器100返回读数据。
如图22和图23所示,I2C主控制器100发起的序号为m的I2C操作为I2C写操作,将读命令包发送至I2C接口模块200,对于前N-1个写操作数据字节(BYTE(1)、…、BYTE(N-1)),每个写操作数据字节发送后,I2C接口模块200都向I2C主控制器100返回I2C ACK。
I2C接口模块200接收第N个写操作数据字节(BYTE(N))后(即I2C接口模块200接收完整的读命令包后),I2C接口模块200可能向I2C主控制器100返回I2C ACK或I2C NAK,具体通过I2C主控制器100与I2C接口模块200之间的约定来选择,I2C主控制器100与I2C接口模块200之间可以约定第N个写操作数据字节(BYTE(N))后无论I2C ACK或I2C NAK都表示第N个写操作数据字节(即完整读命令包)的成功接收,也可以约定I2C NAK表示第N个写操作数据字节(BYTE(N))没有被成功接收(即完整读命令包没有被成功接收),本发明的下述描述中第N个写操作数据字节(BYTE(N))后无论I2C接口模块200向I2C主控制器100返回I2C ACK或I2C NAK都表示第N个写操作数据字节(即完整读命令包)的成功接收。I2C主控制器100完成第N个写操作数据字节(BYTE(N))发送后,无论I2C接口模块200向I2C主控制器100返回I2C ACK或I2C NAK,I2C主控制器100终止序号为m的I2C操作(I2C写操作),并可以选择继续发起序号为m+1的I2C操作(后续I2C操作)。
如果序号为m+1的I2C操作(后续I2C操作)为I2C写操作,并且I2C接口模块200,接收到功能模块300向I2C接口模块200返回的读数据包(序号为m的I2C操作过程中对应的读数据包),则I2C接口模块200在接收到写地址字节后,向I2C主控制器100返回I2C NAK,主控制器100终止发起m+1的I2C操作(后续I2C操作/I2C写操作),如图22所示。
如果序号为m+1的I2C操作(后续I2C操作)为I2C读操作,并且I2C接口模块200接收到功能模块300向I2C接口模块200返回的读数据包(序号为m的I2C操作过程中对应的读数据包),I2C接口模块200在接收到读地址字节后,向I2C主控制器100返回I2C ACK,并向I2C主控制器100返回读数据(DATA),I2C主控制器可以选择在序号为m+1的I2C读操作后发起序号为m+2的I2C操作,I2C接口模块200在序号为m+1的I2C读操作后,继续接收I2C主控制器100发起的序号为m+2的I2C操作(指I2C接口模块200在序号为m+2的I2C操作中接收读地址字节或写地址字节后返回I2C ACK并继续序号为m+2的I2C操作),如图23所示。
根据本发明的实施例,当I2C接口模块200接收到的数据达到读命令包长度,则I2C接口模块200接收到读命令包,具体地,判定I2C接口模块200接收到读命令包的过程与数据读取方法的工作模式一中的判定过程相同,这里不再赘述。
根据本发明的实施例,读命令包还包含读命令包校验码,当I2C接口模块200接收到的数据达到读命令包长度,并且读命令包校验码验证正确,则I2C接口模块接收到读命令包,具体地,判定I2C接口模块200接收到读命令包的过程与数据读取方法的工作模式一中的判定过程相同,这里不再赘述。
根据本发明的实施例,当I2C接口模块200接收到的数据达到读命令包长度之前,I2C接口模块200接收到I2C START信号或I2C STOP信号,则I2C接口模块200结束当前读命令包的接收,I2C接口模块200未接收到读命令包。
如果I2C主控制器100发起的后续I2C操作为I2C写操作,则I2C接口模块200向I2C主控制器返回I2C NAK。
如果I2C主控制器100发起的后续I2C操作为I2C读操作,则I2C接口模块200向I2C主控制器返回状态信息。
I2C主控制器100发起后续I2C读操作后的过程与数据读取方法的工作模式一中的处理方式相同,这里不再赘述。
根据本发明的实施例,当I2C接口模块200接收到的数据达到读命令包长度,但读命令包校验码验证不正确,则I2C接口模块200结束当前读命令包的接收,I2C接口模块200未接收到读命令包。
如果I2C主控制器100发起的后续I2C操作为I2C写操作,则I2C接口模块200向I2C主控制器100返回I2C NAK。
如果I2C主控制器100发起的后续I2C操作为I2C读操作,则I2C接口模块200向I2C主控制器100返回状态信息。
I2C主控制器100发起后续I2C读操作后的过程与数据读取方法的工作模式一中的处理方式相同,这里不再赘述。
根据本发明的实施例,I2C接口模块200包括超时计时器。
I2C主控制器100通过I2C写操作发送读命令包,I2C接口模块200在接收到读命令包后将读命令包发送到功能模块300,I2C接口模块200持续等待功能模块300返回的读数据包并且超时计时器计时。
当I2C接口模块200在超时之前未接收到读数据包,超时后如果I2C主控制器100发起的后续I2C操作为I2C写操作,则I2C接口模块200向I2C主控制器100返回I2C NAK。
当I2C接口模块200在超时之前未接收到读数据包,超时后如果I2C主控制器100发起的后续I2C操作为I2C读操作,则I2C接口模块200向I2C主控制器100返回状态信息。
I2C主控制器100发起后续I2C读操作后的过程与数据读取方法的工作模式一中的处理方式相同,这里不再赘述。
如图24和图25所示,I2C主控制器100发起的序号为m的I2C操作为I2C写操作将读命令包发送至I2C接口模块200,当序号为m+1的I2C操作(后续I2C操作)为I2C写操作时,I2C接口模块200接收写地址字节后,I2C接口模块200向I2C主控制器100返回I2C NAK,主控制器100终止发起m+1的I2C操作(后续I2C操作/I2C写操作),I2C主控制器100发起序号为m+2的I2C操作(后续I2C操作)。
如果I2C主控制器100发起的序号为m+2的I2C操作(后续I2C操作)为I2C写操作,I2C接口模块200继续向I2C主控制器100返回I2C NAK,主控制器100终止发起m+2的I2C操作(后续I2C操作/I2C写操作),如图24所示。
如果I2C主控制器100发起的序号为m+2的I2C操作(后续I2C操作)为I2C读操作,I2C接口模块200接收读地址字节后,I2C接口模块200向I2C主控制器100返回I2C ACK并继续返回序号为m的I2C操作过程中对应的读数据包所包含的读数据(DATA),I2C主控制器可以选择在序号为m+2的I2C读操作后发起序号为m+3的I2C操作,I2C接口模块200在序号为m+2的I2C读操作后,继续接收I2C主控制器100发起的序号为m+3的I2C操作(指I2C接口模块200在序号为m+3的I2C操作中接收读地址字节或写地址字节后返回I2C ACK并继续序号为m+3的I2C操作),如图25所示。
根据本发明的实施例,当I2C主控制器100发起的后续I2C操作为I2C写操作时,如果I2C接口模块200,未接收到功能模块300向I2C接口模块200返回的读数据包,则I2C接口模块拉低I2C时钟线电平。
如果I2C接口模块200,接收到功能模块300向I2C接口模块200返回的读数据包,则I2C接口模块200停止拉低I2C时钟线电平,I2C接口模块200向I2C主控制器100返回I2CNAK。
当I2C主控制器100发起的后续I2C操作为I2C读操作时,如果I2C接口模块200,未接收到功能模块300向I2C接口模块100返回的读数据包,则I2C接口模块200拉低I2C时钟线电平。
如果I2C接口模块200,接收到功能模块300向I2C接口模块200返回的读数据包,则I2C接口模块200停止拉低I2C时钟线电平,并向I2C主控制器100返回读数据。
如图26和图27所示,I2C主控制器100发起的序号为m的I2C操作为I2C写操作将读命令包发送至I2C接口模块200,对于前N-1个写操作数据字节(BYTE(1)、…、BYTE(N-1)),每个写操作数据字节发送后,I2C接口模块200都向I2C主控制器100返回I2C ACK。
I2C接口模块200接收第N个写操作数据字节(BYTE(N))后(即I2C接口模块200接收完整的读命令包后),I2C接口模块200可能向I2C主控制器100返回I2C ACK或I2C NAK。
I2C主控制器100完成第N个读命令数据字节(BYTE(N))发送后,无论I2C接口模块200向I2C主控制器100返回I2C ACK或I2C NAK,I2C主控制器100终止序号为m的I2C操作(I2C写操作),并可以选择继续发起序号为m+1的I2C操作(后续I2C操作)。
当I2C主控制器100发起的序号为m+1的I2C操作(后续I2C操作)为I2C写操作时,如果I2C接口模块200,未接收到功能模块300向I2C接口模块200返回的读数据包(序号为m的I2C操作过程中对应的读数据包),则I2C接口模块200在接收写地址字节后拉低I2C时钟线500电平,暂停序号为m+1的I2C操作的进程,等待接收读数据包。
如果I2C接口模块200,接收到功能模块300向I2C接口模块200返回的读数据包(序号为m的I2C操作过程中对应的读数据包),I2C接口模块200停止拉低I2C时钟线500电平,I2C接口模块200向I2C主控制器100返回I2C NAK,主控制器100终止发起m+1的I2C操作(后续I2C操作/I2C写操作),如图26所示。
如图27所示,当I2C主控制器100发起的序号为m的I2C操作为I2C写操作,I2C主控制器100发起的序号为m+1的I2C操作为I2C读操作时,如果I2C接口模块200,未接收到功能模块300向I2C接口模块200返回的读数据包(序号为m的I2C操作过程中对应的读数据包),则I2C接口模块200在接收读地址字节后拉低I2C时钟线电平,暂停序号为m+1的I2C操作的进程,等待接收读数据包。
如果I2C接口模块200,接收到功能模块300向I2C接口模块200返回的读数据包(序号为m的I2C操作过程中对应的读数据包),则I2C接口模块200停止拉低I2C时钟线电平,并向I2C主控制器100返回I2C ACK及读数据包所包含的读数据(DATA),I2C主控制器100接收到读数据(DATA)后,终止序号为m+1的I2C操作(后续I2C操作/I2C读操作)。
尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内对上述实施例进行的变化、修改、替换和变型都属于本发明的保护范围。
Claims (35)
1.一种I2C接口系统,其特征在于,所述I2C接口系统包括I2C接口模块,以及至少一个功能模块;
所述I2C接口模块通过I2C时钟线和I2C数据线连接I2C主控制器;所述功能模块连接所述I2C接口模块。
2.一种I2C数据写入方法,其特征在于,使用权利要求1所述的I2C接口系统进行数据写入,包括:
I2C主控制器发起I2C写操作将写命令包发送至I2C接口模块;所述I2C接口模块接收到所述写命令包后拉低I2C时钟线电平,并将所述写命令包发送到功能模块;
所述功能模块接收所述写命令包并执行写命令,当所述功能模块完成写命令后,向所述I2C接口模块返回写状态包;
当所述I2C接口模块接收到写状态包并且写状态包的状态信息为成功时,所述I2C接口模块停止拉低I2C时钟线电平,并且向所述I2C主控制器返回I2C ACK;
当所述I2C接口模块接收到写状态包并且写状态包的状态信息为失败时,所述I2C接口模块停止拉低I2C时钟线电平,并且向所述I2C主控制器返回I2C NAK。
3.根据权利要求2所述的数据写入方法,其特征在于,当所述I2C接口模块接收到的数据达到写命令包长度时,则所述I2C接口模块接收到所述写命令包。
4.根据权利要求2所述的数据写入方法,其特征在于,所述写命令包还包含写命令包校验码;
当所述I2C接口模块接收到的数据达到写命令包长度,并且写命令包校验码验证正确,则所述I2C接口模块接收到所述写命令包。
5.根据权利要求2所述的数据写入方法,其特征在于,当所述I2C接口模块接收到写状态包并且写状态包的状态信息为成功,所述I2C接口模块停止拉低I2C时钟线电平,并且向所述I2C主控制器返回I2C ACK,
然后所述I2C接口模块继续接收所述I2C主控制器发起的后续I2C操作。
6.根据权利要求2所述的数据写入方法,其特征在于,当所述I2C接口模块接收到写状态包并且写状态包的状态信息为失败,所述I2C接口模块停止拉低I2C时钟线电平,并且向所述I2C主控制器返回I2C NAK,
如果所述I2C主控制器发起的后续I2C操作为I2C写操作,则所述I2C接口模块向所述I2C主控制器返回I2C NAK;
如果所述I2C主控制器发起的后续I2C操作为I2C读操作,则所述I2C接口模块向所述I2C主控制器返回写状态包的状态信息。
7.根据权利要求3所述的数据写入方法,其特征在于,当所述I2C接口模块接收到的数据达到写命令包长度之前,所述I2C接口模块接收到I2CSTART信号或I2C STOP信号,则所述I2C接口模块结束当前写命令包的接收,所述I2C接口模块未接收到所述写命令包;
如果所述I2C主控制器发起的后续I2C操作为I2C写操作,则所述I2C接口模块向所述I2C主控制器返回I2C NAK;
如果所述I2C主控制器发起的后续I2C操作为I2C读操作,则所述I2C接口模块向所述I2C主控制器返回状态信息。
8.根据权利要求4所述的数据写入方法,其特征在于,当所述I2C接口模块接收到的数据达到写命令包长度,但写命令包校验码验证不正确,则所述I2C接口模块结束当前写命令包的接收,所述I2C接口模块未接收到所述写命令包;
如果所述I2C主控制器发起的后续I2C操作为I2C写操作,则所述I2C接口模块向所述I2C主控制器返回I2C NAK;
如果所述I2C主控制器发起的后续I2C操作为I2C读操作,则所述I2C接口模块向所述I2C主控制器返回状态信息。
9.根据权利要求2所述的数据写入方法,其特征在于,所述I2C接口模块包括超时计时器;
当所述I2C接口模块在超时之前未接收到写状态包,超时后所述I2C接口模块停止拉低I2C时钟线电平,并且向所述I2C主控制器返回I2C NAK;
如果所述I2C主控制器发起的后续I2C操作为I2C写操作,则所述I2C接口模块向所述I2C主控制器返回I2C NAK;
如果所述I2C主控制器发起的后续I2C操作为I2C读操作,则所述I2C接口模块向所述I2C主控制器返回状态信息。
10.一种I2C数据写入方法,其特征在于,使用权利要求1所述的I2C接口系统进行数据写入,包括:
I2C主控制器发起I2C写操作将写命令包发送至I2C接口模块;所述I2C接口模块接收到所述写命令包后将所述写命令包发送到功能模块;
所述功能模块接收所述写命令包并执行写命令,当所述功能模块完成写命令后,向所述I2C接口模块返回写状态包;
在所述I2C接口模块接收到所述写命令包后,
如果所述I2C主控制器发起的后续I2C操作为I2C写操作,并且所述I2C接口模块,接收到所述功能模块向所述I2C接口模块返回的写状态包并且写状态包的状态信息为成功,则所述I2C接口模块接收所述I2C主控制器发起的后续I2C写操作;
如果所述I2C主控制器发起的后续I2C操作为I2C写操作,并且所述I2C接口模块,接收到所述功能模块向所述I2C接口模块返回的写状态包并且写状态包的状态信息为失败,则所述I2C接口模块向所述I2C主控制器返回I2CNAK。
11.根据权利要求10所述的数据写入方法,其特征在于,当所述I2C接口模块接收到的数据达到写命令包长度,则所述I2C接口模块接收到所述写命令包。
12.根据权利要求10所述的数据写入方法,其特征在于,所述写命令包还包含写命令包校验码;
当所述I2C接口模块接收到的数据达到写命令包长度,并且写命令包校验码验证正确,则所述I2C接口模块接收到所述写命令包。
13.根据权利要求10所述的数据写入方法,其特征在于,当所述I2C主控制器发起的后续I2C操作为I2C读操作时,
则所述I2C接口模块接收到所述功能模块向所述I2C接口模块返回的写状态包后,所述I2C接口模块向所述I2C主控制器返回写状态包的状态信息。
14.根据权利要求11所述的数据写入方法,其特征在于,当所述I2C接口模块接收到的数据达到写命令包长度之前,所述I2C接口模块接收到I2C START信号或I2C STOP信号,则所述I2C接口模块结束当前写命令包的接收,所述I2C接口模块未接收到所述写命令包;
如果所述I2C主控制器发起的后续I2C操作为I2C写操作,则所述I2C接口模块向所述I2C主控制器返回I2C NAK;
如果所述I2C主控制器发起的后续I2C操作为I2C读操作,则所述I2C接口模块向所述I2C主控制器返回状态信息。
15.根据权利要求12所述的数据写入方法,其特征在于,当所述I2C接口模块接收到的数据达到写命令包长度,但写命令包校验码验证不正确,则所述I2C接口模块结束当前写命令包的接收,所述I2C接口模块未接收到所述写命令包;
如果所述I2C主控制器发起的后续I2C操作为I2C写操作,则所述I2C接口模块向所述I2C主控制器返回I2C NAK;
如果所述I2C主控制器发起的后续I2C操作为I2C读操作,则所述I2C接口模块向所述I2C主控制器返回状态信息。
16.根据权利要求10所述的数据写入方法,其特征在于,所述I2C接口模块包括超时计时器;
当所述I2C接口模块在超时之前未接收到写状态包,超时后如果所述I2C主控制器发起的后续I2C操作为I2C写操作,则所述I2C接口模块向所述I2C主控制器返回I2C NAK;
当所述I2C接口模块在超时之前未接收到写状态包,超时后如果所述I2C主控制器发起的后续I2C操作为I2C读操作,则所述I2C接口模块向所述I2C主控制器返回状态信息。
17.根据权利要求10所述的数据写入方法,其特征在于,当所述I2C主控制器发起的后续I2C操作为I2C写操作时,
如果所述I2C接口模块,未接收到所述功能模块向所述I2C接口模块返回的写状态包,则所述I2C接口模块拉低I2C时钟线电平;
如果所述I2C接口模块,接收到所述功能模块向所述I2C接口模块返回的写状态包并且写状态包的状态信息为成功,则所述I2C接口模块停止拉低I2C时钟线电平,并接收所述I2C主控制器发起的后续I2C写操作;
如果所述I2C接口模块,接收到所述功能模块向所述I2C接口模块返回的写状态包并且写状态包的状态信息为失败,则所述I2C接口模块停止拉低I2C时钟线电平,并向所述I2C主控制器返回I2C NAK。
18.根据权利要求10所述的数据写入方法,其特征在于,当所述I2C主控制器发起的后续I2C操作为I2C读操作时,
如果所述I2C接口模块,未接收到所述功能模块向所述I2C接口模块返回的写状态包,则所述I2C接口模块拉低I2C时钟线电平;
如果所述I2C接口模块,接收到所述功能模块向所述I2C接口模块返回的写状态包,则所述I2C接口模块停止拉低I2C时钟线电平,并向所述I2C主控制器返回写状态包的状态信息。
19.一种I2C数据读取方法,其特征在于,使用权利要求1所述的I2C接口系统进行数据读取,包括:
I2C主控制器发起I2C写操作将读命令包发送至I2C接口模块;所述I2C接口模块接收到所述读命令包后拉低I2C时钟线电平,并将所述读命令包发送到功能模块;
所述功能模块接收所述读命令包并执行读命令,当所述功能模块完成读命令后,向所述I2C接口模块返回读数据包;所述读数据包内包括读数据;
当所述I2C接口模块接收到读数据包,所述I2C接口模块停止拉低I2C时钟线电平。
20.根据权利要求19所述的数据读取方法,其特征在于,当所述I2C接口模块接收到的数据达到读命令包长度时,则所述I2C接口模块接收到所述读命令包。
21.根据权利要求19所述的数据读取方法,其特征在于,所述读命令包还包含读命令包校验码。
当所述I2C接口模块接收到的数据达到读命令包长度,并且读命令包校验码验证正确,则所述I2C接口模块接收到所述读命令包。
22.根据权利要求19所述的数据读取方法,其特征在于,当所述I2C接口模块接收到读数据包,所述I2C接口模块停止拉低I2C时钟线电平,并且向所述I2C主控制器返回I2C ACK或者I2C NAK;
如果所述I2C主控制器发起的后续I2C操作为I2C写操作,则所述I2C接口模块向所述I2C主控制器返回I2C NAK;
如果所述I2C主控制器发起的后续I2C操作为I2C读操作,则所述I2C接口模块向所述I2C主控制器返回读数据。
23.根据权利要求20所述的数据读取方法,其特征在于,当所述I2C接口模块接收到的数据达到读命令包长度之前,所述I2C接口模块接收到I2C START信号或I2C STOP信号,则所述I2C接口模块结束当前读命令包的接收,所述I2C接口模块未接收到所述读命令包;
如果所述I2C主控制器发起的后续I2C操作为I2C写操作,则所述I2C接口模块向所述I2C主控制器返回I2C NAK;
如果所述I2C主控制器发起的后续I2C操作为I2C读操作,则所述I2C接口模块向所述I2C主控制器返回状态信息。
24.根据权利要求21所述的数据读取方法,其特征在于,当所述I2C接口模块接收到的数据达到读命令包长度,但读命令包校验码验证不正确,则所述I2C接口模块结束当前读命令包的接收,所述I2C接口模块未接收到所述读命令包;
如果所述I2C主控制器发起的后续I2C操作为I2C写操作,则所述I2C接口模块向所述I2C主控制器返回I2C NAK;
如果所述I2C主控制器发起的后续I2C操作为I2C读操作,则所述I2C接口模块向所述I2C主控制器返回状态信息。
25.根据权利要求19所述的数据读取方法,其特征在于,所述I2C接口模块包括超时计时器;
当所述I2C接口模块在超时之前未接收到读数据包,超时后所述I2C接口模块停止拉低I2C时钟线电平,并且向所述I2C主控制器返回I2C ACK或者I2C NAK;
如果所述I2C主控制器发起的后续I2C操作为I2C写操作,则所述I2C接口模块向所述I2C主控制器返回I2C NAK;
如果所述I2C主控制器发起的后续I2C操作为I2C读操作,则所述I2C接口模块向所述I2C主控制器返回状态信息。
26.根据权利要求19所述的数据读取方法,其特征在于,所述读数据包括从功能模块读取的数据,或者功能模块执行读命令所产生的读状态信息,或者既包括从功能模块所读取的数据,也包括功能模块执行读命令所产生的读状态信息。
27.一种I2C数据读取方法,其特征在于,使用权利要求1所述的I2C接口系统进行数据读取,包括:
I2C主控制器发起I2C写操作将读命令包发送至I2C接口模块;所述I2C接口模块接收到所述读命令包后将所述读命令包发送到功能模块;
所述功能模块接收所述读命令包并执行读命令,当所述功能模块完成读命令后,向所述I2C接口模块返回读数据包;所述读数据包内包括读数据;
在所述I2C接口模块接收到读命令包后,
如果所述I2C主控制器发起的后续I2C操作为I2C写操作,并且所述I2C接口模块,接收到所述功能模块向所述I2C接口模块返回的读数据包,所述I2C接口模块向所述I2C主控制器返回I2C NAK;
如果所述I2C主控制器发起的后续I2C操作为I2C读操作,并且所述I2C接口模块,接收到所述功能模块向所述I2C接口模块返回的读数据包,所述I2C接口模块向所述I2C主控制器返回读数据。
28.根据权利要求27所述的数据读取方法,其特征在于,当所述I2C接口模块接收到的数据达到读命令包长度时,则所述I2C接口模块接收到所述读命令包。
29.根据权利要求27所述的数据读取方法,其特征在于,所述读命令包还包含读命令包校验码。
当所述I2C接口模块接收到的数据达到读命令包长度,并且读命令包校验码验证正确,则所述I2C接口模块接收到所述读命令包。
30.根据权利要求28所述的数据读取方法,其特征在于,当所述I2C接口模块接收到的数据达到读命令包长度之前,所述I2C接口模块接收到I2C START信号或I2C STOP信号,则所述I2C接口模块结束当前读命令包的接收,所述I2C接口模块未接收到所述读命令包;
如果所述I2C主控制器发起的后续I2C操作为I2C写操作,则所述I2C接口模块向所述I2C主控制器返回I2C NAK;
如果所述I2C主控制器发起的后续I2C操作为I2C读操作,则所述I2C接口模块向所述I2C主控制器返回状态信息。
31.根据权利要求29所述的数据读取方法,其特征在于,当所述I2C接口模块接收到的数据达到读命令包长度,但读命令包校验码验证不正确,则所述I2C接口模块结束当前读命令包的接收,所述I2C接口模块未接收到所述读命令包;
如果所述I2C主控制器发起的后续I2C操作为I2C写操作,则所述I2C接口模块向所述I2C主控制器返回I2C NAK;
如果所述I2C主控制器发起的后续I2C操作为I2C读操作,则所述I2C接口模块向所述I2C主控制器返回状态信息。
32.根据权利要求27所述的数据读取方法,其特征在于,所述I2C接口模块包括超时计时器;
当所述I2C接口模块在超时之前未接收到读数据包,超时后如果所述I2C主控制器发起的后续I2C操作为I2C写操作,则所述I2C接口模块向所述I2C主控制器返回I2C NAK;
当所述I2C接口模块在超时之前未接收到读数据包,超时后如果所述I2C主控制器发起的后续I2C操作为I2C读操作,则所述I2C接口模块向所述I2C主控制器返回状态信息。
33.根据权利要求27所述的数据读取方法,其特征在于,所述读数据包括从功能模块读取的数据,或者功能模块执行读命令所产生的读状态信息,或者既包括从功能模块所读取的数据,也包括功能模块执行读命令所产生的读状态信息。
34.根据权利要求27所述的数据读取方法,其特征在于,当所述I2C主控制器发起的后续I2C操作为I2C写操作时,
如果所述I2C接口模块,未接收到所述功能模块向所述I2C接口模块返回的读数据包,则所述I2C接口模块拉低I2C时钟线电平;
如果所述I2C接口模块,接收到所述功能模块向所述I2C接口模块返回的读数据包,则所述I2C接口模块停止拉低I2C时钟线电平,所述I2C接口模块向所述I2C主控制器返回I2CNAK。
35.根据权利要求27所述的数据读取方法,其特征在于,当所述I2C主控制器发起的后续I2C操作为I2C读操作时,
如果所述I2C接口模块,未接收到所述功能模块上一次向所述I2C接口模块返回的读数据包,则所述I2C接口模块拉低I2C时钟线电平;
如果所述I2C接口模块,接收到所述功能模块向所述I2C接口模块返回的读数据包,则所述I2C接口模块停止拉低I2C时钟线电平,并向所述I2C主控制器返回读数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311037009.5A CN117201222B (zh) | 2023-08-16 | 2023-08-16 | I2c接口系统、数据写入方法以及数据读取方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311037009.5A CN117201222B (zh) | 2023-08-16 | 2023-08-16 | I2c接口系统、数据写入方法以及数据读取方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117201222A true CN117201222A (zh) | 2023-12-08 |
CN117201222B CN117201222B (zh) | 2024-06-21 |
Family
ID=88984111
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311037009.5A Active CN117201222B (zh) | 2023-08-16 | 2023-08-16 | I2c接口系统、数据写入方法以及数据读取方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117201222B (zh) |
Citations (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1558332A (zh) * | 2004-01-18 | 2004-12-29 | 中兴通讯股份有限公司 | 一种实现自动读写内部集成电路设备的装置和方法 |
US6874052B1 (en) * | 2000-09-29 | 2005-03-29 | Lucent Technologies Inc. | Expansion bridge apparatus and method for an I2C bus |
US20050239503A1 (en) * | 2004-04-26 | 2005-10-27 | Dressen David W | Bi-directional serial interface for communication control |
CN101158932A (zh) * | 2007-08-31 | 2008-04-09 | 上海广电(集团)有限公司中央研究院 | 通过i2c接口访问现场可编程门阵列内部存储器的方法 |
CN102023953A (zh) * | 2009-09-17 | 2011-04-20 | 研祥智能科技股份有限公司 | 具有多路i2c总线的系统的控制方法 |
CN103530257A (zh) * | 2013-10-18 | 2014-01-22 | 浪潮电子信息产业股份有限公司 | 一种动态自适应传输路径优化sas信号质量的方法 |
CN104346310A (zh) * | 2013-08-05 | 2015-02-11 | 豪威科技(上海)有限公司 | 一种高性能i2c从机数据交换电路及方法 |
CN104598418A (zh) * | 2015-01-27 | 2015-05-06 | 北京奥普维尔科技有限公司 | 一种基于fpga的控制i2c通信的系统及方法 |
CN105279130A (zh) * | 2015-10-22 | 2016-01-27 | 北方工业大学 | 一种对同地址的多个i2c器件进行操作的方法 |
CN110765032A (zh) * | 2019-10-31 | 2020-02-07 | 英业达科技有限公司 | 基于系统管理总线接口对i2c存储器进行读写的方法 |
CN211376201U (zh) * | 2019-11-29 | 2020-08-28 | 深圳市国微电子有限公司 | 一种命令读写装置、存储器 |
CN113031486A (zh) * | 2021-03-18 | 2021-06-25 | 深圳市度信科技有限公司 | 基于fpga的i3c逻辑控制器实现方法、i3c读写测试装置和系统 |
CN214474979U (zh) * | 2021-04-08 | 2021-10-22 | 深圳市奔创信息技术有限公司 | I2c通信电路及装置 |
CN114996184A (zh) * | 2022-06-13 | 2022-09-02 | 南京观海微电子有限公司 | 兼容实现spi或i2c从机的接口模块及数据传输方法 |
US20230132069A1 (en) * | 2021-09-28 | 2023-04-27 | Texas Instruments Incorporated | Serial Communications Module With CRC |
-
2023
- 2023-08-16 CN CN202311037009.5A patent/CN117201222B/zh active Active
Patent Citations (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6874052B1 (en) * | 2000-09-29 | 2005-03-29 | Lucent Technologies Inc. | Expansion bridge apparatus and method for an I2C bus |
CN1558332A (zh) * | 2004-01-18 | 2004-12-29 | 中兴通讯股份有限公司 | 一种实现自动读写内部集成电路设备的装置和方法 |
US20050239503A1 (en) * | 2004-04-26 | 2005-10-27 | Dressen David W | Bi-directional serial interface for communication control |
CN101158932A (zh) * | 2007-08-31 | 2008-04-09 | 上海广电(集团)有限公司中央研究院 | 通过i2c接口访问现场可编程门阵列内部存储器的方法 |
CN102023953A (zh) * | 2009-09-17 | 2011-04-20 | 研祥智能科技股份有限公司 | 具有多路i2c总线的系统的控制方法 |
CN104346310A (zh) * | 2013-08-05 | 2015-02-11 | 豪威科技(上海)有限公司 | 一种高性能i2c从机数据交换电路及方法 |
CN103530257A (zh) * | 2013-10-18 | 2014-01-22 | 浪潮电子信息产业股份有限公司 | 一种动态自适应传输路径优化sas信号质量的方法 |
CN104598418A (zh) * | 2015-01-27 | 2015-05-06 | 北京奥普维尔科技有限公司 | 一种基于fpga的控制i2c通信的系统及方法 |
CN105279130A (zh) * | 2015-10-22 | 2016-01-27 | 北方工业大学 | 一种对同地址的多个i2c器件进行操作的方法 |
CN110765032A (zh) * | 2019-10-31 | 2020-02-07 | 英业达科技有限公司 | 基于系统管理总线接口对i2c存储器进行读写的方法 |
CN211376201U (zh) * | 2019-11-29 | 2020-08-28 | 深圳市国微电子有限公司 | 一种命令读写装置、存储器 |
CN113031486A (zh) * | 2021-03-18 | 2021-06-25 | 深圳市度信科技有限公司 | 基于fpga的i3c逻辑控制器实现方法、i3c读写测试装置和系统 |
CN214474979U (zh) * | 2021-04-08 | 2021-10-22 | 深圳市奔创信息技术有限公司 | I2c通信电路及装置 |
US20230132069A1 (en) * | 2021-09-28 | 2023-04-27 | Texas Instruments Incorporated | Serial Communications Module With CRC |
CN114996184A (zh) * | 2022-06-13 | 2022-09-02 | 南京观海微电子有限公司 | 兼容实现spi或i2c从机的接口模块及数据传输方法 |
Non-Patent Citations (4)
Title |
---|
JASMINE CHHIKARA: "Implementing Communication Bridge between I2C and APB", 2015 IEEE INTERNATIONAL CONFERENCE ON COMPUTATIONAL INTELLIGENCE & COMMUNICATION TECHNOLOGY, 2 April 2015 (2015-04-02) * |
李永峰, 国澄明, 何晓成: "在数字信号处理器上实现I~2C接口", 红外与激光工程, no. 03, 25 June 2003 (2003-06-25) * |
毕立恒;刘许亮;: "一种新型I2C总线控制器的设计", 中国新技术新产品, no. 20, 25 October 2009 (2009-10-25) * |
郑采君;: "基于CPLD的I~2C总线接口设计", 电子设计工程, no. 02, 20 January 2011 (2011-01-20) * |
Also Published As
Publication number | Publication date |
---|---|
CN117201222B (zh) | 2024-06-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7461318B2 (en) | Communication system realizing USB communications between a host computer and its peripheral device and a communication controller transmitting a USB signal under the USB standard | |
US8667194B2 (en) | Two-wire interface in which a master component monitors the data line during the preamble generation phase for synchronization with one or more slave components | |
EP1825382B1 (en) | Low protocol, high speed serial transfer for intra-board or inter-board data communication | |
RU2596582C2 (ru) | Способ и устройство для адаптируемой к размерам памяти последовательной передачи данных | |
EP0076880A1 (en) | A local area contention network data communication system | |
US20050239503A1 (en) | Bi-directional serial interface for communication control | |
CN109074294B (zh) | 通信装置和通信系统 | |
JP3996928B2 (ja) | 破損データを処理する方法 | |
CN112084137B (zh) | 一种SerDes高鲁棒收发电路 | |
CN109154925B (zh) | 通信设备、通信方法、程序和通信系统 | |
JP2009244991A (ja) | データ通信方法、データ通信システム、電子制御ユニット、及び回路基板 | |
CN117201222B (zh) | I2c接口系统、数据写入方法以及数据读取方法 | |
US20120331196A1 (en) | Restoring stability to an unstable bus | |
CN117171083B (zh) | 基于nak的自适应修复pcie接口互连链路的系统 | |
CN112463693A (zh) | 基于m-lvds总线的多板卡通信系统及方法 | |
CN109155689B (zh) | 通信设备、通信方法、程序和通信系统 | |
US20210173808A1 (en) | Early parity error detection on an i3c bus | |
CN109075902B (zh) | 通信装置、通信方法、程序和通信系统 | |
CN101488825B (zh) | 数据传输的检错方法与系统 | |
CN114337938B (zh) | 一种数据传输方法、数据重传方法、装置和相关设备 | |
US20080279289A1 (en) | Transmitter, receiver, method for transmitting, method for receiving, fixed length serial burst data transfer system, semiconductor device, and hybrid semiconductor device | |
CN115706661A (zh) | 同步高速信令互连 | |
CN117290274A (zh) | 一种基于i2c从设备的i2c接口系统及数据读写方法 | |
US7287208B2 (en) | Two-wire interface having embedded per frame reliability information | |
CN117520241A (zh) | 一种spi接口系统、spi数据写入方法及spi数据读取方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |