背景技术
I2C(Inter-Integrated Circuit,内部整合电路)总线是由PHILIPS公司开发的一种简单的双向两线总线,用于IC(Integrated Circuit集成电路板)之间的有限控制,包括I2C的串行时钟线(SCL)和I2C的串行数据线(SDA)两根线。
根据I2C规范,时钟线SCL的实现方法是“线与”,如图1所示,同一路SCL上任何一个设备如果输出低电平,则会驱动这一路SCL为低电平,该路SCL上的所有设备都释放总线时,该路时钟线SCL通过上拉电阻变为高电平,也就是说,SCL线被有最长低电平周期的器件保持低电平,此时,低电平周期短的器件会进入高电平的等待状态,当所述有最长低电平周期的器件释放时钟线SCL时,同一路SCL上的所有设备都释放了SCL,此时,该路时钟线SCL才通过上拉电阻变为高电平。如此设计的主要目的是为了兼容I2C总线上挂接的低速从设备。
在I2C总线上挂接的主设备与从设备直连的情况下,主设备SCL与从设备SCL的信号是直连的,如果从设备要完成一些其它动作后(例如一个内部中断服务程序)才能接收或发送下一个完整的数据字节,可以迫使时钟线SCL保持低电平让主设备进入等待状态。当从设备准备下一个数据字节的传输,并释放时钟线SCL后,数据传输才能继续。从设备通过驱动主设备SCL为低来使主设备等待的过程如图2所示,T1、T2、T3为标准I2C的串行时钟线SCL中访问的各时序要点,T1时刻表示主设备在将要访问从设备时输出低电平,T2时刻表示主设备释放SCL线,但此时由于从设备还没有准备好,从设备会继续驱动SCL为低,T3时刻表示从设备已经准备好,释放SCL,SCL通过电路的上拉电阻变为高电平,从而主设备可以成功访问从设备。
可是,采用主设备与从设备直连的方式,由于受I2C总线总容量的限制,同一条I2C总线上可挂接的相同类型的I2C设备仅能达到8个或4个,即一台主设备的一个I2C接口管理的I2C从设备的数量非常有限,而在实际应用中,往往需要实现一台主设备的一个I2C接口管理更多的I2C从设备,为了满足这一需求,最好的办法就是将主设备的I2C接口使用可编程逻辑器件PLD(例如FPGA、CPLD等)进行扩展,如图3所示,主设备CPU的I2C接口使用PLD扩展出多条时钟线SCL,多个I2C从设备挂接在不同的SCL和SDA上,以保证主设备在对其中一个地址的I2C从设备进行访问时,只有一个I2C从设备可以对其进行响应。
如图3所示,CPU的I2C接口使用PLD扩展出多条时钟线SCL,通过I2C总线可以访问并管理32个甚至更多个I2C从设备。为了保证时钟线SCL的信号质量,并且从节约成本、提高简洁度的角度出发,所有衍生出的时钟线SCL全部直接由PLD发出,分别对各自的从设备进行驱动。比如,CPU若需要访问设备16,则CPU通过PLD驱动IIC_SCL2,并且让外置的逻辑器件打开模拟开关6,打通设备16和CPU之间的数据线SDA即可。
但上述使用PLD连接I2C主设备和从设备的时钟线SCL的设计中,PLD无法将主设备与从设备的信号直连到一起,PLD只能通过赋值的方法,单纯将上行SCL(即主设备SCL)传递给下行SCL(即从设备SCL),或者单纯将下行SCL传递给上行SCL,如图4所示,pin_A为PLD上用于连接主设备的管脚,pin_B为PLD上用于连接从设备的管脚,PLD只能通过赋值单纯将上行SCL的信号通过pin_A传递给pin_B,或将下行SCL的信号通过pin_B单纯传递给pin_A,pin_A与pin_B没有直连在一起。这就造成了主设备通过PLD访问任一低速从设备的时候,若SCL线被该低速从设备保持为低电平,而主设备因为没有与从设备的SCL直连而无法感知该低速从设备的等待请求,使得主设备继续通过PLD将非低电平的SCL传递给该低速从设备,但该低速从设备此时处于等待状态,无法识别来自主设备的SCL信号,从而导致主设备对该低速从设备的访问失败。也就是说,使用现有的这种设计方法,无法匹配主设备与低速从设备之间的速度,无法满足上述标准I2C规范。
因此,目前在使用PLD连接I2C主设备和从设备的时钟线SCL时,若遇到主设备访问低速从设备的情况,由于PLD无法将主设备与从设备的SCL信号直连在一起,无法实现I2C规范要求的从设备将主设备SCL驱动为低电平的操作,无法对I2C主设备与低速从设备之间的速度进行匹配,从而会导致主设备对低速从设备的访问失败。
发明内容
有鉴于此,本申请提出一种I2C主设备与从设备之间串行时钟线SCL控制的方法,在使用PLD连接I2C主设备和从设备的时钟线SCL时,可以匹配主设备与从设备之间的速度,实现主设备对低速从设备的成功访问。
本申请还提出一种可编程逻辑器件PLD装置,在使用PLD连接I2C主设备和从设备的时钟线SCL时,可以匹配主设备与从设备之间的速度,实现主设备对低速从设备的成功访问。
为达到上述目的,本申请实施例的技术方案是这样实现的:
一种I2C主设备与从设备之间串行时钟线SCL控制的方法,应用于一可编程逻辑器件PLD,所述PLD连接I2C主设备和从设备的I2C串行时钟线SCL,所述主设备的一I2C接口通过PLD扩展出至少两条SCL;该方法包括:
当所述主设备需要访问任一从设备时,待所述主设备产生SCL下降沿后,PLD同时驱动所述主设备SCL和所述从设备SCL为低电平,并同时进行计时;
当计时时间达到时长阈值时,PLD释放对所述从设备SCL的控制并进一步在所述从设备SCL为高电平时,释放对所述主设备SCL的控制。
一种可编程逻辑器件PLD,所述PLD连接I2C主设备和从设备的I2C串行时钟线SCL,所述主设备的一I2C接口通过PLD扩展出至少两条SCL;所述PLD包括:电平驱动模块和计时模块,其中:
电平驱动模块,用于当所述主设备需要访问任一从设备时,待所述主设备产生SCL下降沿后,同时驱动所述主设备SCL和所述从设备SCL为低电平;当计时模块的计时时间达到时长阈值时,释放对所述从设备SCL的控制并进一步在所述从设备SCL为高电平时,释放对所述主设备SCL的控制;
计时模块,用于电平驱动模块驱动所述主设备SCL和所述从设备SCL为低电平的同时进行计时。
本申请的有益效果为,在使用PLD连接I2C主设备和从设备的时钟线SCL时,若高速主设备需要访问低速从设备,通过PLD对高速主设备与低速从设备之间的速度进行匹配,可以实现高速主设备对低速从设备的成功访问。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下通过具体实施例并参见附图,对本发明进行详细说明。
本申请提出一种I2C主设备与从设备之间串行时钟线SCL控制的方法,应用于一可编程逻辑器件PLD,所述PLD连接I2C主设备和从设备的I2C串行时钟线SCL,所述主设备的一I2C接口通过PLD扩展出至少两条I2C串行时钟线SCL;当所述主设备需要访问任一从设备时,待所述主设备产生SCL下降沿后,PLD同时驱动所述主设备SCL和所述从设备SCL为低电平,并同时进行计时;
当计时时间达到时长阈值时,PLD释放对所述从设备SCL的控制并进一步在所述从设备SCL为高电平时,释放对所述主设备SCL的控制。
通过上述方法可知,在使用PLD连接I2C主设备和从设备的时钟线SCL时,若主设备需要访问低速从设备,通过PLD对主设备与低速从设备之间的速度进行匹配,可以实现主设备成功访问低速从设备的目的。
本申请实施例的方法流程如图5所示,一种I2C主设备与从设备之间串行时钟线SCL控制的方法,应用于一可编程逻辑器件PLD,PLD将主设备的一I2C接口扩展出至少2条SCL,所述主设备通过所述SCL线和多条SDA线访问和控制多个从设备,多个从设备挂接在不同的SCL和SDA上,如图3所示;该方法包括以下步骤:
步骤501:当所述主设备需要访问任一从设备时,待所述主设备产生SCL下降沿后,PLD同时驱动所述主设备SCL和所述从设备SCL为低电平,并同时进行计时。
主设备需要访问任一从设备时,可以根据主设备上配置相应的SCL分组信息(每一条SCL线挂接哪些从设备),选通该从设备所在SCL,也就是建立所述主设备SCL与该从设备SCL之间的通道。本申请实施例中,可以通过所述PLD中的选通寄存器建立所述主设备SCL与待访问的从设备SCL之间的双向通道。步骤501~502的动作均发生在所述建立的双向通道中。
本申请实施例中,对于单个I2C主设备挂接多个I2C从设备的情况,使用选通的方法来实现主设备与从设备之间的双向通道,实现方式是:如图6所示,主设备控制从设备SCL输出低电平时,由选通寄存器(即图6中的输出选通模块)来选通具体是哪一路从设备SCL输出低电平;主设备获取从设备SCL电平状态时,也由选通寄存器(即图6中的输入选通模块)来选通具体去获取哪一路从设备SCL的电平状态。
而现有技术中,由于只建立了从主设备到从设备的单向通道,只能实现:如图7所示,主设备控制从设备SCL输出低电平时,由选通寄存器(即图7中的输出选通模块)来选通具体是哪一路从设备SCL输出低电平。无法实现主设备获取从设备的SCL电平状态。
在建立所述主设备SCL与待访问的从设备SCL之间的双向通道之后,所述主设备对从设备进行访问时,会产生SCL下降沿,PLD能够根据其外部管脚上升沿的变化获取到这一信息,此时,PLD会接管时钟线SCL,由PLD与所述从设备及主设备进行对话,PLD首先会驱动所述主设备SCL和从设备SCL为低电平,并同时进行计时。可以通过写寄存器的方式设置计时器进行计时。
步骤502:当计时时间达到时长阈值时,PLD释放对所述从设备SCL的控制并进一步在所述从设备SCL为高电平时,释放对所述主设备SCL的控制。
所述时长阈值可以根据实际情况设置,不同I2C主设备的速度不同,则所设置的计时器的时长阈值也不同。作为较佳实施例,所述时长阈值可以设置为所述主设备上预先设定的SCL低电平时间。
当所述计时时间小于所述预设的时长阈值时,PLD会等待计时时间达到时长阈值,等待期间继续驱动所述主设备SCL和所述从设备SCL为低电平。
当计时时间达到时长阈值时,PLD释放所述从设备SCL,但不释放主设备SCL。
PLD在释放所述从设备SCL之后,在所述从设备变为高电平时,释放所述主设备SCL,使得所述主设备SCL被拉高为高电平,而在所述从设备仍为低电平时,PLD保持驱动所述主设备SCL为低电平。
本申请实施例方案中,之所以要建立主设备SCL与待访问的从设备SCL之间的双向通道,是因为需要实现主设备SCL与从设备SCL之间的交互,不仅主设备SCL可以影响从设备SCL,而且从设备SCL也可以影响主设备SCL。而现有技术中,仅有主设备至从设备方向的单向通道,只有主设备SCL可以对从设备SCL产生影响,从设备SCL无法影响主设备SCL。
本申请实施例方案不仅适用于I2C主设备(主设备一般均为高速)和低速I2C从设备之间进行速度匹配,也同样适用于I2C主设备和高速I2C从设备之间进行速度匹配,即可以适用于主设备对各种不同速度等级的从设备的访问。下面按照这两种情况分别对本申请实施例方案进行举例说明。
当主设备需要访问任一低速从设备时,主设备产生SCL下降沿,如图8所示的波形①,然后,PLD同时驱动主设备SCL和从设备SCL为低电平,如图8中的波形②和⑤,经过一定时间的计数器延迟,即计时时间达到预设的时长阈值(可以设定为与主设备驱动SCL低电平的时间一致)时,PLD释放从设备SCL,但不释放主设备SCL,并等待从设备也释放SCL,此时由于低速从设备速度较慢,从设备SCL仍然被从设备驱动为低,如图8中的波形③,等到从设备释放SCL时,从设备SCL变为高电平,从设备SCL的实际波形如图8的波形④所示。此时PLD释放主设备SCL,如图8中的波形⑤,使得主设备SCL被拉高为高电平,整个b it的传输至此结束。主设备SCL的实际波形如图8中的⑥所示。所以主设备能够感知到从设备SCL的低电平,会认为需要等待从设备,于是进行等待。由上述过程来完成高速主设备与低速从设备之间的速度匹配。
当主设备需要访问任一高速从设备时,使用本申请实施例方案也是可以正常通信的,如图9所示,主设备产生SCL下降沿,如图9所示的波形①,PLD同时驱动主设备SCL和从设备SCL为低电平,如图9中的波形②和⑤,高速从设备在下拉SCL后很快就准备好传输,并且在PLD计时完成前释放从设备SCL,如图9中的波形③,然后,当PLD计时完成并释放从设备SCL后,从设备SCL立即变为高电平,从设备SCL的实际波形如图9中的波形④所示,接下来PLD释放主设备SCL,主设备SCL变为高电平,如图9中的波形⑤,一个SCL周期结束。主设备SCL的实际波形如图9中的⑥所示。
上述时长阈值设置为所述主设备上预先设定的SCL低电平时间时,使得在主设备的SCL低电平时间结束后就释放从设备SCL,从而可以在从设备SCL变为高电平后,立即释放主设备SCL,不影响主设备的工作效率和性能。
目前在使用PLD连接主设备与从设备的SCL时,若遇到主设备访问低速从设备的情况,存在如下三种方案来实现高速主设备对低速从设备的访问:
方案一:主设备更改时钟设置,使用较慢的速度去访问I2C总线,即无论从设备是低速还是高速,都使用较慢的速度去访问,以适应低速从设备,但在实际应用中,当主设备使用较慢的速度去访问高速从设备时,可能会因为这种速度的不匹配而导致读写错误,从而会造成访问高速从设备出错的问题。
方案二:主设备访问低速从设备时更改时钟设置,使用较慢的速度去访问,当主设备访问完该低速从设备后,再更改时钟设置,恢复之前的速度去访问其它高速从设备,这无疑会增加总体设计及软件设计的工作量。
方案三:如果预先知道哪一个从设备是低速从设备,则额外增加模拟开关等器件将主设备和该低速从设备单独直连,如此会增加硬件设计的复杂度,也会增加模拟开关器件的使用,并增加器件管理的难度。
而采用本申请实施例方案,主设备可以成功访问低速从设备的同时不影响对高速从设备的访问,且无需更改时钟设置,无需减慢访问频率,即可良好地兼容高速I2C从设备和低速I2C从设备,可实现一个主设备对多个不同速度等级的从设备的访问,可以提高访问效率,显著减少软件设计工作量,此外,可在硬件上减少模拟开关器件的使用,提高硬件设计的简洁度。
本申请实施例的装置功能结构示意图如图10所示,一种可编程逻辑器件PLD,所述PLD连接I2C主设备和从设备的I2C串行时钟线SCL,所述主设备的一I2C接口通过PLD扩展出至少两条SCL;所述PLD包括:电平驱动模块和计时模块,其中:
电平驱动模块,用于当所述主设备需要访问任一从设备时,待所述主设备产生SCL下降沿后,同时驱动所述主设备SCL和所述从设备SCL为低电平;当计时模块的计时时间达到时长阈值时,释放对所述从设备SCL的控制并进一步在所述从设备SCL为高电平时,释放对所述主设备SCL的控制;
计时模块,用于电平驱动模块驱动所述主设备SCL和所述从设备SCL为低电平的同时进行计时。
较佳地,所述电平驱动模块还用于在所述主设备产生SCL下降沿之前,通过所述PLD中的选通寄存器建立所述主设备SCL与待访问的从设备SCL之间的双向通道。
较佳地,所述时长阈值为所述主设备上预先设定的SCL低电平时间。
较佳地,当所述计时时间小于时长阈值时,所述电平驱动模块保持驱动所述主设备SCL和所述从设备SCL为低电平。
本申请实施例方案通过在可编程逻辑器件PLD上实现I2C的串行时钟线SCL的双向传输,可实现主设备对低速从设备的成功访问,且不影响主设备对高速I2C从设备的正常访问,适用于I2C总线挂载不同速度从设备的应用,且具有反应速度快、逻辑资源占用小的优势。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。