与双线总线相关的时间条件的检测的制作方法

文档序号:17358007发布日期:2019-04-09 21:51阅读:169来源:国知局
与双线总线相关的时间条件的检测的制作方法

本公开总体上涉及电子电路,并且更具体地涉及能够连接到i2c双线总线的电路。



背景技术:

i2c总线是一种双线总线,其包括分别旨在串行传输数据和传输同步信号的两个导体。smb或smbus(系统管理总线)是特定的i2c总线,其进一步提供与同步信号的低状态的持续时间相关的时间条件的检测。更具体地,smb标准提供检测同步信号是否保持在低状态的时间长于给定时间段。



技术实现要素:

本公开的实施例克服了用于检测与i2c总线、特别是smb的同步信号的低状态的持续时间相关的时间条件的现有方法和/或电路的全部或部分缺点。

另一实施例更具体地涉及在i2c总线上的字节的传输期间检测与i2c总线、特别是smb的同步信号的低状态的持续时间相关的时间条件。

另一实施例消除了电路的制造分散,该电路验证与i2c总线、更特别地是smb的同步信号的低状态的持续时间相关的时间条件。

因此,实施例提供了方法,其中将表示总线的同步信号的低状态的持续时间的值与存储在存储器中的阈值进行比较,所述值在第一比较中表示所述信号的低状态的最长持续时间。

根据实施例,在第一比较中,所述值表示在所述第一比较之前已经发生的所述信号的低状态的最长持续时间。

根据实施例,第一比较在从存储器读取阈值之后被执行,所述读取与同步信号同步地执行。

根据实施例,存储器是非易失性存储器。

根据实施例,存储在存储器中的阈值在校准阶段期间被确定。

根据实施例,总线是i2c总线,例如smb。

根据实施例,阈值表示在25ms到35ms的范围内的持续时间。

根据实施例,在所述总线已经设置为操作之后,在总线上的字节的第一传输期间从存储器读取阈值。

根据实施例,第一比较应当在所述总线上传输对所述字节的确认的时间之前执行。

根据实施例,第一比较在所述字节的最后一位的传输与上述时间之间执行。

另一实施例还提供了能够实施上述方法的设备。

根据实施例,该设备包括振荡器和计数器,计数器被配置为在所述信号的每个低状态期间对振荡器的周期数进行计数,所述值是基于针对每个低状态而计数的周期数来确定的。

根据实施例,在第一比较之前的所述信号的每个低状态之后,如果所述周期数大于所述值,则用在低状态期间计数的周期数来更新所述值。

根据实施例,存储器、振荡器和计数器还实施存在检测功能。

根据实施例,存储器是eeprom型存储器,振荡器和计数器属于用于写入所述存储器的电路。

附图说明

在下面结合附图对特定实施例的非限制性描述中详细讨论前述和其它特征和优点,在附图中:

图1是包括连接到i2c总线的电路的电子系统的框形式的简化表示;

图2示出了非常示意性地示出图1的电子系统的两个电路之间的根据i2c协议的通信的时序图;

图3是示出检测与图1的总线的同步信号的低状态的持续时间相关的时间条件的方法的实施例的流程图;以及

图4是示出图3的方法的更详细实施例的时序图。

具体实施方式

在不同的附图中,相同的元件用相同的附图标记表示。为清楚起见,仅示出并且详细描述了对理解所描述的实施例有用的那些步骤和元件。特别地,没有详细描述smb的操作,所描述的实施例与smb的一般操作兼容。此外,没有描述连接到smb的设备或电路的操作,所描述的实施例与旨在连接到smb的常用设备或电路兼容。

在以下描述中,smb根据于2014年12月20日发布的并且在地址http://smbus.org/specs/smbus_3_0_20141220.pdf处可获取的“系统管理总线”或smbus标准来指定总线。

图1是以框的形式的包括连接到i2c总线7的电路1、3、5的电子系统的简化表示。总线7包括用于传输二进制数据信号sda的导体9以及用于传输二进制同步信号scl的导体11。每个电路1、3、5连接到导体9和11。每个电路1、3、5还连接到被设置为参考电位、通常是地gnd的导体13。电路1、3、5和连接到总线i2c或属于同一电子电路的其它电路可以在相同电压或不同电压下供电。例如,电路1、3和5连接到导体15,导体15被设置为相对于地gnd为正的电源电位vdd。导体9和11分别通过上拉电阻器rp连接到导体15。因此,在空闲状态下,信号sda和scl处于接近电位vdd的电位,电位vdd表示信号sda和scl的两个二进制状态(高状态)之一,信号sda和scl的另一二进制状态(低状态)由地电位gnd表示。

i2c协议设置,对于总线7上的传输,电路中的一个电路(例如,电路1)被用作主设备(md)并且施加同步信号scl。然后,连接到总线的其它电路(例如,3和5)具有从设备(sd)的状态以接收由电路1传输的数据。这些数据可以指向多个从电路或指向这些电路中的单个电路。根据通信方向,相同的电路现在可以具有主功能,并且然后具有从功能。

图2示出了非常示意性地示出图1的电子系统的两个电路之间的根据i2c协议的通信的时序图。未按比例绘制的时序图表示信号scl和信号sda的形状的示例。

i2c协议通过在信号scl处于高状态的同时将信号sda切换到低状态(时间t0)来定义通信开始条件start。这种切换是由电路中的一个电路引起的,所述电路中的一个电路采用通信的主状态。不同的从电路监测信号scl和sda的相应状态,并且检测指示通信将开始的条件start。

然后,主电路(这里是电路1)传输第一字节。为此,在时间t0后的时间t1处将信号scl切换为低电平之后,根据要传输的字节的第一位b7的状态,主电路1在时间t1之后的时间t2处施加信号sda的状态,并且然后在时间t2之后的时间t3处将信号scl释放到高状态。在信号scl的下一上升沿期间,在时间t3处,由从电路(这里是电路3和电路5)读取信号sda的状态。在时间t3之后的时间t4处,当信号scl返回到低状态时,主电路1继续利用下一位b6、b5......b0进行操作,直到整个字节已经被传输。最常见的是,由主电路1发送的第一字节包括标识收信电路的7个地址位,后面跟着指示主电路期望的操作(读/写)的位。不同的从电路检测传输的数据,并且特别地,基于形成收信地址的第一字节确定下一字节(或者下面的多个字节)是否是针对它们的。

在第一字节的最后一位b0(时间t5)结束时,当主电路将信号scl置于低状态时,它将信号sda释放到高状态。由传输的地址标识的从电路(例如,电路3)通过在时间t5之后的时间t6处将信号sda切换到低状态来确认(ack)传输的字节。在时间t6之后的时间t7处,在信号scl的下一上升沿处,由主电路1检测信号sda的这个低状态。在时间t7之后的时间t8处,当信号scl切换回低状态时,主电路1可以传输下一字节,依此类推,直到通信结束。

一旦传输了下一字节(或者下面的多个字节),在每个字节的传输之后已经从从电路3接收到确认ack,主电路1通过在信号scl处于高状态的同时将信号sda释放到高状态(时间t9)来施加停止条件stop。监测信号scl和sda的不同从电路3和5检测指示通信结束的状态stop。然后,将连接到总线的电路1、3和5置于它们等待新通信(换言之,等待新的条件start)的状态。例如,每个电路1、3、5包括用于在总线7上读/写的接口,该接口然后被设置为等待新条件start的这种状态。

在主电路对字节的传输之后没有从电路发送确认的情况下(图2中未示出),信号sda在字节的最后一位的传输之后保持在高状态。主电路1在信号scl的下一上升沿处检测到没有确认ack。然后,它可以传输新的条件start,也称为条件restart或条件stop。

除了上述操作之外,smb协议还提供了检测信号scl何时在低状态下保持阻塞的时间长于给定的最大时间段dmax,给定的最大时间段dmax对于连接到总线的所有电路是相同的。时间段dmax在25到35ms的范围内,例如30ms,并且在图2中表示为在时间t10到t11之间的图示。

为了验证信号scl的每个低状态的持续时间保持低于所选择的时间段dmax,设置连接到总线的每个电路包括能够针对信号scl的每个低状态供应表示这个低状态的持续时间的值的电路,然后,这个值与表示时间段dmax的阈值进行比较。例如,信号scl的低状态的持续时间可以由在这个低状态期间计数的振荡器的周期数表示,然后,将这个周期数同与时间段dmax(即表示时间段dmax的阈值)相对应的振荡器的周期数进行比较。

可以设置,对于所选择的时间段dmax,表示时间段dmax的阈值对于多个电路是相同的。例如,这些电路中的每个电路可以包括寄存器,寄存器的内容被初始化为包含阈值。然后,一旦电路通电,阈值将是可用的。然而,由于相同电路之间的制造分散,表示信号scl的低状态的相同持续时间的值可能在电路之间是不同的。这可能导致电路检测到这个低状态scl的持续时间超过所选择的时间段dmax,而另一电路尽管可能相同但是未检测到这种情况。

因此,被提供以针对每个电路校准阈值timeout以考虑相同电路之间的制造分散,经校准的阈值然后存储在电路的非易失性存储器中。可以设置,一旦电路通电,存储在存储器中的经校准的阈值就被读出,但是这将需要特定的读出设备和特定于该读出设备的同步信号。

在上述实施例中,提供了初始化阶段,在初始化阶段期间从非易失性存储器读出表示时间段dmax的阈值,这个初始化阶段在连接到总线的每个电路中实施。初始化阶段在总线上的字节的传输开始的同时开始,并且在应当生成这个字节的确认ack之前结束。换言之,初始化阶段在字节的传输期间发生。更具体地,初始化阶段在连接到总线的电路已经通电之后、在总线上的第一字节的传输期间实施。

作为示例,初始化阶段的开始与指示通信开始的条件start的检测相对应,并且初始化阶段在这个通信的第一字节的传输期间执行。

在初始化阶段,表示时间段dmax的阈值与信号scl同步地从存储器读取,同时确定表示信号scl的低状态的最长持续时间的值。在初始化阶段结束时,如果所确定的值大于读取阈值,则信号scl的低状态中的至少一个已持续的时间长于时间段dmax。然后,将每个电路置于与接收到条件stop相同的状态,例如,通过重新设置其总线读/写接口,并且用于在初始化阶段期间生成所传输的字节的确认ack的电路将不生成针对这个字节的确认ack。因此,当在表示时间段dmax的阈值的读取之前测量信号scl的低状态的第一持续时间时,对信号scl的低状态的持续时间已经超过阈值时间段dmax的这一事实的验证被执行。这使得能够简化从存储器读取阈值,然后这个读取可以以与传统上从存储器读取数据的方式相同的方式与信号scl同步地执行。实际上,如果在应当生成字节的确认ack之前传输新的条件start,则可以中断字节在总线上的传输。在这种情况下,如果初始化阶段正在进行,则它被中断和取消,并且在下一次在总线上传输字节时实施新的初始化阶段。

这里的优点在于,在字节、优选地是在连接到总线的电路通电之后传输的第一字节的传输期间,如果在这个传输期间信号scl的至少一个低状态持续的时间长于时间段dmax,在应当生成所传输的字节的确认ack之前,这没有影响,特别是对于主电路。优点还在于,与信号scl同步地从存储器中读取表示时间段dmax的阈值已经在应当生成这个字节的确认ack之前结束。

很多旨在连接到smb的电路已经包括例如eeprom类型的非易失性存储器以及用于从这个存储器进行读取、与信号scl同步的电路。然后,优点在于,表示时间段dmax的阈值可以存储在这个现有存储器中,并且可以由用于从这个存储器进行读取的电路读出,而不使用特定的读出电路。包括例如eeprom类型的非易失性存储器和用于从这个存储器进行读取的设备的电路的具体示例是实施存在检测功能的电路,这个功能通常用“串行存在检测”的首字母缩略词spd表示。这个功能例如通过提供eeprom针对dram型(动态随机存取存储器)存储器电路来实施,eeprom中存储有关dram的操作的信息,例如,与对这个dram的访问时间有关的信息。

图3是示出检测与图1的总线的同步信号的低状态的持续时间有关的时间条件的方法的实施例的流程图,该方法例如由连接到总线的电路1、3和5中的每个电路来实施。

该方法从初始化阶段303开始,在初始化阶段303期间,在步骤305(readtimeout,即读取timeout)中,从存储器读出表示时间段dmax的阈值timeout,步骤305(readtimeout)与在初始化阶段303期间确定表示处于信号scl的低状态的最长持续时间的值的步骤307、309、311、313、315和317并行执行。如前所述,这个初始化阶段与在总线上传输字节(例如,在到总线的电路通电之后所传输的第一字节)的开始同时开始。

在初始化阶段303,在初始化阶段303开始后的信号scl的第一低状态之前(在图2中的时间t0到t1之间)执行的步骤307(initvalue,即初始化value)中,值value被初始化,例如为零。步骤307之后是检测将信号scl切换到低状态的步骤309(scllow?,即scl为低?)。当信号scl切换到低状态时(框309的输出y),在下一步骤311(determinedscl,即确定dscl)中确定表示这个低状态的持续时间的值dscl。步骤311之后是步骤313(dscl>value?),其中值dscl与值value进行比较。如果值dscl大于值value(框313的输出y),则在步骤317(endinitialization?,即结束初始化?)之前的下一步骤315(value=dscl)中,用值dscl来更新值value。否则(框313的输出n),步骤313之后紧接着是步骤317。

步骤317包括验证初始化阶段是否已经结束。如果初始化阶段303尚未结束(框317的输出n),则再次执行步骤309、311、313、317和可能的315。因此,在初始化阶段期间,对于信号scl的每个周期,将包括步骤309、311、313、315和317的循环执行一次。如果初始化阶段303已经结束(框317的输出y),则在下一步骤319(value<timeout?)中将值value与阈值timeout进行比较。根据实施例,初始化阶段303在初始化阶段303开始之后的信号scl的第八上升沿处结束。在备选实施例中,初始化阶段303在信号scl的给定上升沿结束,针对该给定上升沿,已知表示时间段dmax的阈值的读取已经结束,这个给定上升沿在初始化阶段303开始后的信号scl的第八上升沿之前。

在第一比较319期间,值value表示在初始化阶段303期间处于信号scl的低状态的最长持续时间。在初始化阶段303在初始化阶段303开始后的信号scl的第八上升沿处结束的情况下,该第一比较319例如在该第八上升沿后的信号scl的下降沿之前被执行,使得在应当生成在初始化阶段期间传输的字节的确认ack的时间(图2中的时间t6)之前该第一比较319的结果是已知的。在初始化阶段303在这个初始化阶段开始后的信号scl的第八上升沿之前的信号scl的给定上升沿处结束的情况下,第一比较319例如在这个给定上升沿与信号scl的下一下降沿之间执行。

如果在步骤319中,值value大于阈值timeout(框319的输出y),则在初始化阶段303期间的信号scl的至少一个低状态已持续的时间长于时间段dmax。在下一步骤321(reset,即重置)中,然后,将实施该方法的电路置于与其已经接收到条件stop相同的状态。否则(框319的输出n),在图3所示的实施例中,该电路验证信号scl的每个下一低状态是否持续比时间段dmax更长。为了实现这一点,在紧接步骤319的步骤309'(scllow?,即scl为低?)中检测信号scl切换到低状态,并且当信号scl切换到低状态时(框309'的输出y),在下一步骤311'(determinedscl,即确定dscl)中确定这个低状态的值dscl,步骤311'例如与步骤311相同。然后,在再次执行步骤319之前,在步骤315'(value=dscl)中用值dscl来更新值value,其中值value现在表示信号scl的最后的低状态的持续时间。

在备选实施例中,步骤315'被替换为将阈值timeout直接与在前一步骤311'中确定的值dscl进行比较的步骤。如果值dscl大于阈值timeout,则下一步骤是步骤321,否则下一步骤是步骤309'。

在另一备选实施例中,在步骤311'与315'之间提供与步骤313类似或相同的步骤,使得仅当值dscl表示已经发生的信号slc的低状态的最长持续时间时,值value才用最后的值dscl进行更新。

在另一备选实施例中,针对在总线上传输的每个字节执行初始化阶段303。优选地,每个初始化阶段然后在这个初始化阶段开始后的第八上升沿处结束。此外,在该变型中,优选地设置初始化阶段303包括两个附加步骤。两个附加步骤中的第一步骤例如在步骤317与319之间执行,并且包括修改标志的状态以指示已经读取了阈值。这两个附加步骤中的第二步骤例如仅在步骤305(图3中的右侧分支)之前执行并且包括验证标志的状态,使得如果标志指示在前一初始化阶段303期间已经读取了阈值timeout,则不执行步骤305。因此,阈值timeout将仅在第一初始化阶段303处被读取一次,这使得能够限制对其中存储有阈值timeout的存储器的读取访问,并且因此减少了实施初始化阶段303的电路的电力消耗。优选地,第一初始化阶段开始于检测条件start,在该第一初始化阶段期间读取阈值timeout。因此,优点在于,从存储器读取阈值timeout在由标识收信电路的地址和指示期望操作(读/写)的位形成的字节的传输期间被执行,这使得能够避免在要在总线上传输数据的同时从存储器读取阈值。作为示例,标志对应于具有指示尚未读取阈值timeout的第一二进制状态并且具有指示已经读取阈值timeout的第二二进制状态的位。

尽管图3中未示出,但如果在初始化阶段303期间传输新的条件start,如前所述,则这个初始化阶段被中断和取消,并且在字节的下一传输期间实施新的初始化阶段303。

在下面的描述中,实施图3的方法的每个电路包括振荡器和与该振荡器同步的计数器的情况被考虑,由振荡器提供的信号的周期短于电路旨在连接到的总线的信号scl的周期。对于信号scl的每个低状态,值dscl然后对应于在这个低状态期间计数的该振荡器的周期数。通过计数在时间段dmax期间该振荡器的周期数,借助于该电路的振荡器和计数器确定该电路的经校准的阈值timeout。然后,经校准的阈值timeout等于在时间段dmax期间计数的周期数,即,等于在时间段dmax结束时的计数器的内容,并且被记录在电路存储器中。对于旨在连接到同一总线的每个电路,利用相同的时间段dmax实施该校准阶段。

图4是示出例如用eeprom型存储器实施的图3的方法的更详细实施例的时序图。图4的方法包括已经结合图3描述的用相同的附图标记表示的步骤,这些步骤将不再描述。

在这个实施例中,从存储器(这里是eeprom型非易失性存储器)读取阈值timeout的步骤305之后是将阈值timeout写入第一寄存器rega的步骤501(rega=timeout)。信号scl的低状态的持续时间由振荡器的周期数表示,振荡器的周期数通过与振荡器相关联的计数器c进行计数(例如,用于写入eeprom的电路的振荡器和计数器)。与图3相比,步骤311被替换为等效步骤503、505和507。在步骤503中,紧接在检测到信号scl的低状态(框309的输出y)之后,将计数器c初始化为零(c=0),并且然后,在下一步骤505(incc)中,将计数器c与振荡器同步地递增一次。在步骤505之后,步骤507(sclhigh?,即scl为高?)包括验证信号scl是否已经切换到高状态。如果不是(框507的输出n),则信号scl仍然处于低状态,并且再次执行递增计数器的步骤505。否则(框507的输出y),信号scl处于高状态,并且然后计数器c的内容表示信号scl的最后的低状态的持续时间。类似地,步骤311'(图3)被替换为等效步骤503'、505'和507',步骤503',505'和507'分别与步骤503、505和507相同。

此外,在这个实施例中,关于图3描述的值value对应于第二寄存器regb的内容。因此,步骤307(图3)被替换为初始化寄存器regb的等效步骤509(regb=0),并且步骤313被替换为将计数器c的内容与寄存器regb的内容进行比较的等效步骤511(c>regb?)。在步骤511中,如果计数器c的内容大于寄存器regb的内容(框511的输出y),则在下一步骤513(regb=c)中用计数器c的内容来更新寄存器regb。类似地,步骤315'(图3)被替换为与步骤513相同的等效步骤513'。此外,将值value与阈值timeout进行比较的步骤319被替换为将寄存器regb的内容与寄存器rega的内容进行比较的等效步骤515(regb>rega?)。

在初始化阶段303的开始处,例如正好在步骤509之前,如本文中的情况那样,执行将循环变量i初始化为零的步骤517(i=0),可以理解,步骤517可以与步骤509并行执行或者刚好在步骤509之后执行。对于信号scl的上升沿的每次检测(框507的输出y),循环变量i在步骤519(i=i+1)中递增,步骤519例如在步骤507与511之间执行。

在这个实施例中,初始化阶段303在该初始化开始后的信号scl的第八上升沿处结束。然后,步骤317被替换为等效步骤521(i=8?),步骤521包括验证变量i是否等于8,即,信号scl的第八上升沿是否刚刚发生,这标记初始化阶段303的结束。

因此,在初始化阶段303之后的第一比较515期间,有效地将表示处于低状态的最长持续时间并且存储在寄存器regb中的值value与从存储器读取并且存储在寄存器rega中的阈值timeout进行比较。

关于图3描述的备选实施例可以转换为关于图4描述的实施例。

已经描述了特定实施例。本领域技术人员将容易想到各种改变、修改和改进。特别地,图1的电子系统可以包括与该图中所示的电路不同的多个电路。

能够实现图3和图4的方法的电路不限于包括eeprom型非易失性存储器及其读出电路的电路,基于以上描述来设计能够实现这种方法的其它电路在本领域技术人员的能力范围内。

适应图3和4的方法的步骤数和/或步骤也在本领域技术人员的能力范围内。例如,初始化计数器c的步骤503可以在步骤309之前、在步骤501与步骤309之间执行,同时初始化阶段303尚未结束(框501的分支n)。此外,先前描述的方法和校准阶段还可以适用于信号scl的每个低状态的持续时间由利用向下计数器而不是用计数器所确定的值来表示的情况,并且更一般地适用于除了通过振荡器周期数之外还可以通过例如电压水平来表示持续时间的情况。

这样的改变、修改和改进旨在成为本公开的一部分,并且旨在落入本发明的精神和范围内。因此,前面的描述仅是示例性的,而不是限制性的。本发明仅受以下权利要求及其等同物限定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1