一种扩展I<sup>2</sup>C总线的方法及I<sup>2</sup>C总线扩展装置的制作方法

文档序号:6610037阅读:367来源:国知局
专利名称:一种扩展I<sup>2</sup>C总线的方法及I<sup>2</sup>C总线扩展装置的制作方法
技术领域
本发明涉及一种I2C(Inter-Integrated Circuit)总线技术,具体涉及一种扩展I2C总线的方法及I2C总线扩展装置。

背景技术
I2C总线是飞利浦(Philips)公司定义的同步串行数据传输总线,是一种2线串行接口总线,其中包括2路信号线,分别为串行数据线(SDA)和串行时钟线(SCL)。I2C总线上只有一个主设备,但可挂接多个从设备。同一I2C总线上挂接的多个设备,通过各自的设备地址来区分。在一条总线中,同类设备的地址是不能相同的,否则将导致总线冲突,读写异常,无法完成对应的功能。
在现有的硬件系统中,I2C常被用于设备配置,例如采用一个处理控制芯片通过I2C总线去配置其下挂接的设备。以常用的媒体处理设计来说,多数媒体处理采用一片数字信号处理芯片完成媒体数据的处理,同时通过I2C总线配置音、视频的编解码芯片。在此类设计中往往需要使用较多的音、视频编解码芯片,而多数音、视频编解码芯片的I2C设备地址只有两种配置,因此,当一条I2C总线所带的从设备较多,或者从设备的设备地址可配置性较差(有的I2C设备的设备地址只有两种设置),如果不做任何措施,从设备的设备地址就会发生冲突,比如一条I2C总线上需要挂接3个某芯片,而该芯片的I2C设备地址只有两种配置,这种情况下便会由于设备地址冲突而造成设计无法实现的后果。
为解决上述问题,可以通过将设备地址冲突的I2C器件划分到不同的I2C总线,即通过扩展I2C总线来解决I2C设备地址冲突问题。现有技术中,常用的扩展I2C总线的方法是,采用额外的I2C总线驱动器件(如buffer或HUB),将一条I2C总线扩展成若干条I2C总线,从而将器件地址冲突的I2C器件划分到不同的I2C总线。
现有技术扩展I2C总线的方法的缺点在于,在该方法中,首先必须采用额外的I2C总线驱动器件。并且,由于I2C总线信号SDA是双向信号,为了确定信号的方向,还需要采用复杂的模拟检测电路,用于检测驱动器件两侧的SDA信号管脚中哪一侧信号被驱动为低(I2C信号是低有效信号),从而将另一侧SDA信号设置为低。这种模拟检测电路使得器件成本较大,并且采用额外的器件将增加PCB布局、布线的面积,这对成本和PCB面积敏感的设备设计来说具有明显的缺陷。


发明内容
本发明所要解决的技术问题是提供一种扩展I2C总线的方法及I2C总线扩展装置,用以将一级I2C总线扩展为多条I2C总线。
为解决上述技术问题,本发明提供方案如下 一种I2C总线扩展装置,将主设备处的一级I2C总线扩展为多条二级I2C总线,该装置包括 时钟扩展模块,用于将一级I2C总线中的串行时钟线SCL信号扩展成多个SCL信号后,分发至各二级I2C总线的SCL上; 方向控制模块,用于根据被选通的一、二级I2C总线上的当前操作状态,确定SDA信号的方向; 数据控制模块,用于根据主设备发出的选择信号,选通一级I2C总线的串行数据线SDA与其中一条二级I2C总线的SDA的连接,还用于根据方向控制模块确定的SDA信号方向设置SDA信号的方向。
本发明所述的装置,其中, 所述方向控制模块,进一步用于将所述确定的SDA信号方向携带在方向控制信号中发送给所述数据控制模块; 所述数据控制模块,进一步用于根据所述方向控制模块发送的方向控制信号设置SDA信号的方向。
本发明所述的装置,其中,所述方向控制模块,具体根据已选通的一、二级I2C总线的开始、停止、设备地址、字地址、读操作、写操作、数据读写以及响应状态,确定SDA信号方向。
本发明所述的装置,其中,所述方向控制模块,在写操作过程的响应时刻,确定SDA信号方向为从设备到主设备方向,在写操作过程的其他状态中确定SDA信号方向为主设备到从设备方向;在读操作过程中的响应时刻和读数据期间,确定SDA信号方向为从设备到主设备方向,在写操作过程的其他状态确定SDA信号为主设备到从设备方向。
本发明所述的装置,其中,所述方向控制模块具体包括 开始判断模块,用于判断被选通的一、二级I2C总线的当前状态是否为开始状态,并向读写判断模块和响应判断模块输出开始状态信号,并在当前状态为开始状态时,在开始状态信号上输出一个负脉冲; 结束判断模块,用于判断被选通的一、二级I2C总线的当前状态是否为结束状态,并向方向判断模块输出停止状态信号,并在当前状态为结束状态时,在停止状态信号上输出一个负脉冲; 读写判断模块,用于根据开始状态后SDA信号第8比特的值,判断被选通的一、二级I2C总线的当前操作是写操作还是读操作,并向方向控制模块发送读写信号,并在当前操作为写操作时,将所述读写信号置0,在当前操作为读操作时,将所述读写信号置1,并在保持一个SCL信号周期后重新置0; 响应判断模块,用于根据接收到的开始状态信号、SCL信号和SDA信号,判断主设备是否收到有效的响应信号,并向所述方向控制模块发送响应状态信号,并在主设备收到无效的响应信号时,将所述响应状态信号置1,并在保持一个SCL信号周期后重新置0; 方向判断模块,用于根据接收到的停止状态信号、读写信号、响应状态信号和SCL信号,判断被选通的一、二级I2C总线的当前操作状态,输出用于控制被选通的一、二级I2C总线之间的SDA信号方向的方向控制信号。
本发明所述的装置,其中,所述方向判断模块,进一步用于设置方向控制信号初始值为0; 设置一第三计数器,从开始状态开始对SCL信号下降沿触发计数,如果读写信号一直为0,当第三计数器计到9时,将方向控制信号置1,并在保持一个SCL时间周期后重新置0,并在下一个计数触发时将第二计数器复位为1后继续计数并重复上述操作,直到出现停止状态;如果在第三计数器计数期间读写信号变为1,则将所述方向控制信号置为1,直到检测到无效的响应信号时,将所述方向控制信号置0。
本发明所述的装置,其中,所述时钟扩展模块、方向控制模块和数据控制模块通过复杂可编程逻辑器件CPLD或现场可编程逻辑器件FPGA实现。
一种扩展I2C总线的方法,将主设备的一级I2C总线扩展为多条二级I2C总线,包括 步骤A,将主设备的一级I2C总线中的SCL信号发送至各二级I2C总线的SCL上; 步骤B,主设备确定当前需要选通的二级I2C总线,选通一级I2C总线的SDA与所述需要连通的二级I2C总线的SDA的连接; 步骤C,根据被选通的一、二级I2C总线上的当前操作状态,设置SDA信号方向,进行I2C总线的读写操作。
本发明所述的方法,其中,所述步骤C具体包括 步骤C1,设置一第一计数器,从所述被选通的一、二级I2C总线的开始状态开始对SCL信号上升沿触发计数,在计数到8时,如果当前SDA信号的值为0,则判断I2C总线处于写操作过程中,如果当前SDA信号的值为1,则判断I2C总线处于读操作过程中; 步骤C2,设置一第二计数器,从所述被选通的一、二级I2C总线的开始状态开始对SCL信号上升沿触发计数,当计数到9后在下一个计数触发时将第二计数器复位为1并继续计数;同时,在计数到9时,如果当前SDA信号的值为0,则判断当前响应信号有效,否则,判断当前响应信号无效; 步骤C3,设置SDA信号的初始方向为主设备到从设备;并设置一第三计数器,从所述被选通的一、二级I2C总线的开始状态开始对SCL信号下降沿触发计数,如果所述被选通的一、二级I2C总线当前处于写操作过程中,则在第三计数器计到9时,将SDA信号方向设置为从设备到主设备,并在保持一个SCL周期后将SDA信号方向恢复为初始方向,并在下一个计数触发时将第三计数器复位为1后继续计数,直到出现停止状态;如果所述被选通的一、二级I2C总线当前处于读操作过程中,则设置SDA信号方向为从设备到主设备,直到出现当前响应信号无效后,将SDA信号方向恢复为初始方向。
从以上所述可以看出,本发明提供的扩展I2C总线的方法及I2C总线扩展装置,将一级I2C总线扩展为多条二级I2C总线,并根据I2C总线的当前操作状态设置已选通的一、二级I2C总线之间的SDA信号方向,从而实现了I2C总线的扩展。本发明无需使用模拟检测电路,并且,本发明所需硬件资源较少,可以利用大多数设备中已有的可编程器件资源实现本发明,从而能降低设备成本,节约了PCB布局、布线的空间,这对于成本和PCB面积敏感的设备设计尤其有利。



图1为本发明实施例所述I2C总线扩展装置应用示意图; 图2为I2C总线开始、停止状态的示意图; 图3为I2C总线写操作过程中的SDA的时序图; 图4为I2C总线读操作过程中的SDA的时序图; 图5为本发明实施例中方向控制模块的原理框图; 图6为本发明实施例中写操作过程中方向控制模块中的信号关系图; 图7为本发明实施例中读操作过程中方向控制模块中的信号关系图。

具体实施例方式 本发明提供了一种扩展I2C总线的方法和I2C总线扩展装置,通过可编程器件扩展I2C总线,以下结合附图通过具体实施例对本发明做详细的说明。
请参照图1所示,为本发明实施例所述I2C总线扩展装置应用示意图,其中主设备到I2C总线扩展装置的I2C总线称为一级I2C总线,I2C总线扩展装置到从设备的I2C总线称为二级I2C总线。图1中通过I2C总线扩展装置将主设备的一条I2C总线(一级I2C总线)扩展为两条I2C总线(二级I2C总线1和2),在二级I2C总线上挂接多个从设备,以实现I2C总线的扩展。这里,可以根据实际需要,选择合适的二级I2C总线的数量。
图1中,所述I2C总线扩展装置具体包括时钟扩展模块、数据扩展模块和方向控制模块,以下分别说明各模块的具体功能。
时钟扩展模块,用于将一级I2C总线中的SCL信号扩展成多个SCL信号后,分发至各二级I2C总线的SCL上。由于SCL信号是由主设备发送至从设备的单向信号,因此,这里只需将主设备发出的SCL信号扩展成多路后再分发至各从设备。
数据控制模块,用于根据主设备发出的选择信号,选通一级I2C总线的SDA(主设备的SDA)与其中一条二级I2C总线的SDA的连接,并根据方向控制模块发送的方向控制信号,设置所述选通的一、二级I2C总线之间的SDA信号方向。例如,在图1中,由于二级I2C总线只有2条,因此,只需要1条选择信号。例如,当选择信号为0时,选通其中一条二级I2C总线的SDA与主设备的SDA连通,而当选择信号为1时,则选择另外一条二级I2C总线的SDA。相应的,当二级I2C总线的数量增加时,可以通过增加选择信号的数量,使得各条二级I2C总线能分别对应选择信号不同的值,以实现通过选择信号能够分别选择所有的二级I2C总线的SDA。
方向控制模块,用于根据被选通的一、二级I2C总线上的当前操作状态,确定方向控制信号并发送至数据控制模块,用于控制上述已连通的一、二级I2C总线之间的SDA信号方向。这里,所述操作状态包括开始(start)、停止(stop)、设备地址(device address)、字地址(word address)、读操作(READ)、写操作(WRITE)、数据读写(DATA)和响应(ACK)等状态。由于SDA信号是双向信号,其方向与当前操作状态相关,因此,本发明根据总线上的当前操作状态,控制被选通的一级I2C总线与二级I2C总线之间的SDA信号方向。
以下说明所述方法控制模块的具体实现 为了更好的理解本发明,首先介绍I2C总线标准读、写操作的时序。请参照图2,为I2C总线开始(start)、停止(stop)状态的示意图,由图2可以看出,当SCL信号为高电平,并且SDA信号出现下降沿时,I2C总线当前状态为开始状态;当SCL信号为高电平,并且SDA信号出现上升沿时,I2C总线当前状态为结束状态。请再参照图3和图4,分别为I2C总线写操作和读操作过程中的SDA的时序图。其中,在开始(start)、停止(stop)、设备地址(deviceaddress)、字地址(word address)和读/写(R/W)状态,SDA上均为主设备向从设备发送数据,而在响应(ACK)状态为从设备向主设备发送响应数据。并且,在写操作过程中,SDA上的数据(DATA)方向为主设备到从设备,读操作过程中,SDA上的数据(DATA)方向为从设备到主设备。由此可知,在写操作过程中只有ACK时刻,SDA的方向为从设备到主设备方向,其他时候都是主设备到从设备方向;在读操作过程中,ACK时刻和读数据期间,SDA的方向为从设备到主设备方向,其他时候都是主设备到从设备方向。
请参照图5所示,为本发明实施例中方向控制模块的原理框图,图6和图7分别为本发明实施例中写操作和读操作过程中方向控制模块中的信号关系图。图5中,所述方向控制模块具体包括开始判断模块、结束判断模块、读写判断模块、响应判断模块和方向判断模块,其中, 所述开始判断模块,用于判断被选通的一、二级I2C总线的当前状态是否为开始状态,并向读写判断模块和响应判断模块输出开始状态信号(S_START),并在当前状态为开始状态时,在开始状态信号上输出一个负脉冲(持续时间可为1us)。这里,开始判断模块具体是根据I2C总线的SCL和SDA信号,在SCL信号为高电平,并且SDA信号出现下降沿时,判断I2C总线当前状态为开始状态。
所述结束判断模块,用于判断被选通的一、二级I2C总线的当前状态是否为结束状态,并向方向判断模块输出停止状态信号(S_STOP),并在当前状态为结束状态时,在停止状态信号上输出一个负脉冲(持续时间可为1us)的停止状态信号(S_STOP)。这里,结束判断模块具体是根据I2C总线的SCL和SDA信号,在SCL信号为高电平,并且SDA信号出现上升沿时,判断I2C总线当前状态为结束状态。
所述读写判断模块,用于根据开始状态后SDA的第8比特的值,判断被选通的一、二级I2C总线的当前操作是写操作(WRITE)还是读操作(READ),并向方向控制模块发送读写信号(R/W),并在当前操作为写操作时,将读写信号(R/W)置0,在当前操作为读操作时,将读写信号置1,并在保持一个SCL信号周期后重新置0。这里,读写判断模块具体是根据SCL、SDA信号和开始状态信号,判断当前操作状态由于读写状态是由SDA信号在开始状态之后第8位的值决定,当为1表示读操作,0表示写操作,因此,设置读写信号初始值为0,设置一第一计数器(CNT1),从开始状态开始对SCL信号上升沿触发计数(START状态时第一计数器计数值为0),当第一计数器计到8时,判断当前SDA信号的值,从而确定读写信号的值。当CNT1计到8时,若SDA信号为0,则R/W为0不变,若SDA信号为1,则将R/W置为1,并保持一个SCL周期的时间。请参照图6和图7中R/W信号的时序图(图6中s1标注处、图7中s1、s2标注处,其中,s1处R/W为0,s2处将R/W置1并保持一个SCL周期)。
所述响应判断模块,用于根据接收到的开始状态信号、SCL信号和SDA信号,判断主设备是否收到有效的响应(ACK)信号,并向所述方向控制模块发送响应状态信号(ACK_ACT),并在主设备收到无效的响应信号时,将响应状态信号置1,在保持一个SCL信号周期后重新置0。这里,响应判断模块具体是根据SCL、SDA信号和开始状态信号,判断主设备是否收到有效的响应信号设置响应状态信号初始值为0,同时设置一第二计数器(CNT2),用于从START状态开始对SCL信号上升沿触发计数(START状态时第二计数器计数值为0),当第二计数器计到9时,判断当前SDA信号的值(如果SDA为低电平,则响应信号有效,否则无效,),从而确定ACK信号是否有效,并在下一个计数触发时将第二计数器复位为1后继续计数。(图6中s3标注处为第二计数器CNT2计到9时,判断ACK信号无效,从而将ACK_ACT信号置1并保持一个SCL周期)。
所述方向判断模块,用于根据接收到的停止状态信号、读写信号、响应状态信号和SCL信号,判断被选通的一、二级I2C总线的当前操作状态,输出用于控制被选通的一、二级I2C总线之间的SDA信号方向的方向控制信号(DIR)。当DIR信号为低电平(0)时,SDA信号方向为主设备到从设备,否则,SDA信号方向为从设备到主设备。这里,具体是根据读写信号R/W信号、SCL信号、响应状态信号ACK_ACT和停止状态信号S_STOP,判断I2C总线的当前操作状态设置方向控制信号初始值为0,设置一第三计数器,从START状态开始对SCL信号下降沿触发计数(START状态时第三计数器计数值为0),如果读写信号R/W信号一直为0,当第三计数器计到9时,将DIR信号置1,并在保持一个SCL时间周期后重新置0,并在下一个计数触发时将第三计数器复位为1后继续计数(计到9便执行相应操作),直到出现停止状态(S_STOP上出现负脉冲信号);如果在第三计数器计数期间R/W信号变为1,则将DIR置为1,直到检测到无效的响应信号(响应状态信号ACK_ACT为1)时,将DIR置0。并且。在第三计数器计数过程中,一旦出现响应状态信号ACK_ACT为1,便将DIR信号置0。(请参见图5、图6中DIR信号时序图,其中,s3处为无效响应信号,ACK_ACT信号置1。) 以上说明了本发明是如何扩展I2C总线的,并详细说明了SDA信号方向判断的实现。本发明将主设备的一条I2C总线扩展成多条二级I2C总线用来挂接I2C从设备,主设备通过选择信号选择所需连通的二级I2C总线,解决了I2C从设备地址冲突的问题。需要指出的是,在现有的大多数系统中都具有可编程的逻辑器件,如复杂可编程逻辑器件(Complex Programmable Logic Device,CPLD)、现场可编程逻辑器件(Field Programmable Gate Array,FPGA)等,因此可以通过利用设备系统中已有的可编程器件资源,实现所述I2C总线扩展装置,以减少硬件器件,降低设备成本,节约PCB布局、布线空间。
基于上述I2C总线扩展装置,本发明还提供了一种扩展I2C总线的方法,用于将主设备的一级I2C总线扩展为多条二级I2C总线,该方法包括以下步骤 步骤11,将主设备的一级I2C总线中的SCL信号发送至各二级I2C总线的SCL上; 步骤12,主设备确定当前需要选通的二级I2C总线,选通一级I2C总线的SDA与所述需要连通的二级I2C总线的SDA的连接; 步骤13,根据被选通通的一、二级I2C总线上的当前操作状态,设置SDA信号方向,进行I2C总线的读写操作。这里,所述操作状态包括开始(start)、停止(stop)、设备地址(device address)、字地址(word address)、读操作(READ)、写操作(WRITE)和响应(ACK)等状态。所述根据当前操作状态设置SDA信号方向是,在写操作过程中只有ACK时刻,SDA的方向为从设备到主设备方向,其他时候都是主设备到从设备方向;在读操作过程中,ACK时刻和读数据期间,SDA的方向为从设备到主设备方向,其他时候都是主设备到从设备方向。
上述步骤13又具体包括以下步骤 步骤131,设置一第一计数器,从所述被选通的一、二级I2C总线的开始状态开始对SCL信号上升沿触发计数,在计数到8时,如果当前SDA信号的值为0,则判断I2C总线处于写操作过程中,如果当前SDA信号的值为1,则判断I2C总线处于读操作过程中; 步骤132,设置一第二计数器,从所述被选通的一、二级I2C总线的开始状态开始对SCL信号上升沿触发计数;当计数到9后,在下一个计数触发时将第二计数器复位为1并继续计数;同时,在计数到9时,如果当前SDA信号的值为0,则判断当前响应信号有效,否则,判断当前响应信号无效; 步骤133,设置SDA信号的初始方向为主设备到从设备;并设置一第三计数器,从所述被选通的一、二级I2C总线的开始状态开始对SCL信号下降沿触发计数,如果所述被选通的一、二级I2C总线当前处于写操作过程中,则在第三计数器计到9时,将SDA信号方向设置为从设备到主设备,并在保持一个SCL周期后将SDA信号方向恢复为初始方向,并在下一个计数触发时将第三计数器复位为1后继续计数,直到出现停止状态;如果所述被选通的一、二级I2C总线当前处于读操作过程中,则设置SDA信号方向为从设备到主设备,直到出现当前响应信号无效后,将SDA信号方向恢复为初始方向。
综上所述,本发明实施例所述扩展I2C总线的方法及I2C总线扩展装置,将一级I2C总线扩展为多条二级I2C总线,并根据I2C总线的当前操作状态设置已选通的一、二级I2C总线之间的SDA信号方向,从而实现了I2C总线的扩展。
本发明所述的扩展I2C总线的方法及I2C总线扩展装置,并不仅仅限于说明书和实施方式中所列运用,它完全可以被适用于各种适合本发明之领域,对于熟悉本领域的人员而言可容易地实现另外的优点和进行修改,因此在不背离权利要求及等同范围所限定的一般概念的精神和范围的情况下,本发明并不限于特定的细节、代表性的设备和这里示出与描述的图示示例。
权利要求
1.一种I2C总线扩展装置,将主设备处的一级I2C总线扩展为多条二级I2C总线,其特征在于,该装置包括
时钟扩展模块,用于将一级I2C总线中的串行时钟线SCL信号扩展成多个SCL信号后,分发至各二级I2C总线的SCL上;
方向控制模块,用于根据被选通的一、二级I2C总线上的当前操作状态,确定SDA信号的方向;
数据控制模块,用于根据主设备发出的选择信号,选通一级I2C总线的串行数据线SDA与其中一条二级I2C总线的SDA的连接,还用于根据方向控制模块确定的SDA信号方向设置SDA信号的方向。
2.如权利要求1所述的装置,其特征在于,
所述方向控制模块,进一步用于将所述确定的SDA信号方向携带在方向控制信号中发送给所述数据控制模块;
所述数据控制模块,进一步用于根据所述方向控制模块发送的方向控制信号设置SDA信号的方向。
3.如权利要求1所述的装置,其特征在于,所述方向控制模块,具体根据已选通的一、二级I2C总线的开始、停止、设备地址、字地址、读操作、写操作、数据读写以及响应状态,确定SDA信号方向。
4.如权利要求3所述的装置,其特征在于,所述方向控制模块,在写操作过程的响应时刻,确定SDA信号方向为从设备到主设备方向,在写操作过程的其他状态中确定SDA信号方向为主设备到从设备方向;在读操作过程中的响应时刻和读数据期间,确定SDA信号方向为从设备到主设备方向,在写操作过程的其他状态确定SDA信号为主设备到从设备方向。
5.如权利要求4所述的装置,其特征在于,所述方向控制模块具体包括
开始判断模块,用于判断被选通的一、二级I2C总线的当前状态是否为开始状态,并向读写判断模块和响应判断模块输出开始状态信号,并在当前状态为开始状态时,在开始状态信号上输出一个负脉冲;
结束判断模块,用于判断被选通的一、二级I2C总线的当前状态是否为结束状态,并向方向判断模块输出停止状态信号,并在当前状态为结束状态时,在停止状态信号上输出一个负脉冲;
读写判断模块,用于根据开始状态后SDA信号第8比特的值,判断被选通的一、二级I2C总线的当前操作是写操作还是读操作,并向方向控制模块发送读写信号,并在当前操作为写操作时,将所述读写信号置0,在当前操作为读操作时,将所述读写信号置1,并在保持一个SCL信号周期后重新置0;
响应判断模块,用于根据接收到的开始状态信号、SCL信号和SDA信号,判断主设备是否收到有效的响应信号,并向所述方向控制模块发送响应状态信号,并在主设备收到无效的响应信号时,将所述响应状态信号置1,并在保持一个SCL信号周期后重新置0;
方向判断模块,用于根据接收到的停止状态信号、读写信号、响应状态信号和SCL信号,判断被选通的一、二级I2C总线的当前操作状态,输出用于控制被选通的一、二级I2C总线之间的SDA信号方向的方向控制信号。
6.如权利要求5所述的装置,其特征在于,所述方向判断模块,进一步用于设置方向控制信号初始值为0;
设置一第三计数器,从开始状态开始对SCL信号下降沿触发计数,如果读写信号一直为0,当第三计数器计到9时,将方向控制信号置1,并在保持一个SCL时间周期后重新置0,并在下一个计数触发时将第二计数器复位为1后继续计数并重复上述操作,直到出现停止状态;如果在第三计数器计数期间读写信号变为1,则将所述方向控制信号置为1,直到检测到无效的响应信号时,将所述方向控制信号置0。
7.如权利要求1所述的装置,其特征在于,所述时钟扩展模块、方向控制模块和数据控制模块通过复杂可编程逻辑器件CPLD或现场可编程逻辑器件FPGA实现。
8.一种扩展I2C总线的方法,将主设备的一级I2C总线扩展为多条二级I2C总线,其特征在于包括
步骤A,将主设备的一级I2C总线中的SCL信号发送至各二级I2C总线的SCL上;
步骤B,主设备确定当前需要选通的二级I2C总线,选通一级I2C总线的SDA与所述需要连通的二级I2C总线的SDA的连接;
步骤C,根据被选通的一、二级I2C总线上的当前操作状态,设置SDA信号方向,进行I2C总线的读写操作。
9.如权利要求8所述的方法,其特征在于,所述步骤C具体包括
步骤C1,设置一第一计数器,从所述被选通的一、二级I2C总线的开始状态开始对SCL信号上升沿触发计数,在计数到8时,如果当前SDA信号的值为0,则判断I2C总线处于写操作过程中,如果当前SDA信号的值为1,则判断I2C总线处于读操作过程中;
步骤C2,设置一第二计数器,从所述被选通的一、二级I2C总线的开始状态开始对SCL信号上升沿触发计数,当计数到9后在下一个计数触发时将第二计数器复位为1并继续计数;同时,在计数到9时,如果当前SDA信号的值为0,则判断当前响应信号有效,否则,判断当前响应信号无效;
步骤C3,设置SDA信号的初始方向为主设备到从设备;并设置一第三计数器,从所述被选通的一、二级I2C总线的开始状态开始对SCL信号下降沿触发计数,如果所述被选通的一、二级I2C总线当前处于写操作过程中,则在第三计数器计到9时,将SDA信号方向设置为从设备到主设备,并在保持一个SCL周期后将SDA信号方向恢复为初始方向,并在下一个计数触发时将第三计数器复位为1后继续计数,直到出现停止状态;如果所述被选通的一、二级I2C总线当前处于读操作过程中,则设置SDA信号方向为从设备到主设备,直到出现当前响应信号无效后,将SDA信号方向恢复为初始方向。
全文摘要
本发明提供一种扩展I2C总线的方法及I2C总线扩展装置,将主设备处的一级I2C总线扩展为多条二级I2C总线,该装置包括时钟扩展模块,用于将一级I2C总线中的串行时钟线SCL信号扩展成多个SCL信号后,分发至各二级I2C总线的SCL上;数据控制模块,用于根据主设备发出的选择信号,选通一级I2C总线的串行数据线SDA与其中一条二级I2C总线的SDA的连接,并根据方向控制模块确定的SDA信号方向设置SDA信号的方向;方向控制模块,用于根据被选通的一、二级I2C总线上的当前操作状态,确定SDA信号的方向。本发明提供的扩展I2C总线的方法及I2C总线扩展装置,实现了I2C总线的扩展。
文档编号G06F13/40GK101324875SQ200710118808
公开日2008年12月17日 申请日期2007年6月11日 优先权日2007年6月11日
发明者李桂生, 朱焰赤, 李小贝 申请人:大唐移动通信设备有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1