Design Calculations for Robust I2C Communications
■ Microchip Technology Inc.存储器产品部资深应用工程师 Chris Parris和Jonathan Dillon
许多系统需要可靠的非易失性存储,对于这些系统,可选择EEPROM存储器技术。EEPROM技术具有稳定可靠的架构,供应商较多,并且经过了多年的改进。EEPROM器件可用于各种工业标准串行总线,包括I2C™、SPI、Microwire和UNI/O®总线。其中,I2C总线在单片机和其他芯片组中具有广泛的硬件支持,并且信号传递方式简单,可采用极小的硅片有效实现,因此占据了非易失性存储器市场约70%的份额。但是,I2C总线拓扑要依赖于阻值合适的上拉电阻才能实现稳定可靠的通信。电阻值选择错误不仅会造成电能浪费,还可能导致总线状态和传输过程由于噪声、温度变化、工作电压变化以及器件间的制造差异而出错。
I2C是二线同步总线,使用总线主器件SCL线上产生的信号作为时钟。SDA线用于双向数据传输。当时钟处于特定状态时可修改数据线,以指示传输的开始和停止,从而避免使用更多的线。I2C总线以集电极开路输出为基础,其中,器件可通过接地晶体管拉低线的电平,如图1所示。这样便可轻松对总线控制进行仲裁,从而在一条数据线上实现双向通信以及多主器件支持。如图1所示,每条线都有一个外部电阻连接至Vdd,该电阻可在释放总线或总线空闲时拉高线的电平。
图1 I2C™总线拓扑
确定上拉电阻值(Rp)时需要考虑三个因素:
• 电源电压(Vdd)
• 总线总电容(CBUS)
• 高电平总输入电流(IIH)
以下面的条件为例计算理想的上拉电阻值:
• 电源电压(Vdd)为5V
• 时钟频率为400kHz
• 总线电容为100pF
电源电压(Vdd)
I2C规范将低于VIL或低于电源电压30%的电压定义为逻辑低电平,同样,将高于VIH或高于电源电压70%的电压定义为逻辑高电平,如图2所示。这两个电平之间的电压属于不明确的逻辑电平。实际上,引脚会将该范围内的电平读为逻辑高电平或逻辑低电平,但在器件间可能不同,因为温度、电压、噪声源和其他环境因素会影响逻辑电平。
图2 指定为逻辑高电平和逻辑低电平的电压电平
电源电压限制了可允许总线拉低的最小Rp值。过强的上拉会阻止器件充分拉低线的电平,导致无法确保逻辑低电平能被检测到。这是由上拉电阻与接地晶体管的导通电阻之间形成的分压器产生的,如图3所示。通常不会指定晶体管的导通电阻。相反,会给定使晶体管上的电压降低于输出逻辑低电压电平(VOL)的最大灌电流(IOL)。使用欧姆定律得出公式1。
图3 集电极开路拓扑和等效电路
对于Microchip的I2C EEPROM器件,规定在IOL为3mA时,VOL最大为0.4V,其他制造商的器件的范围与其相似。
公式1:允许总线电压拉低的最小上拉电阻。
如果总线上有多个器件,最小Rp由灌电流最低的器件决定。
总线总电容(CBUS)
在SCL和SDA线上,所有引脚、连接、PCB走线和导线都会引入电容。这些电容结合在一起称为总线电容,对于长走线和长连接来说,总线电容可能很大。集电极开路拓扑需要外部电阻才能在总线释放时拉高线的电平。上拉电阻(与总线电容耦合)具有一个RC时间常数,该常数限制了上升时间。随着时钟频率的增加,该常数愈发重要,因为需要更少的时间升高线的电平。如果所选电阻值过高,线的电平在下一次拉低之前可能无法上升到逻辑高电平。对于一条总线上具有多个器件的设计(通常具有较大的总线电容)来说,这是重要的考虑因素。
总线电容可通过PCB走线长度和引脚分布电容计算,也可以使用电容探头或智能镊子量表进行测量。如果不能准确计算或测量总线电容,应高估最坏情况读数以提供安全的最大电阻值。
公式2是用于确定充电电容负载两端电压(与时间成函数关系)的一般公式。这可以计算在特定上拉电阻和总线电容下,总线电压上升到特定值所需的时间。
公式2:通过电阻对电容进行充电的一般公式。
重新排列
之后,我们可计算电压上升至VIL的时间(T1)、上升至VIH的时间(T2)以及精确计算这两个电平之间的时间(TR),如图4所示。由于VIL和VIH都是由Vdd产生的,因此该公式与电源电压无关,因为Vdd项已抵消。
图4 逻辑低电平转换为逻辑高电平的充电时间
求解
求解
各种工作电压的最大上升时间由I2C标准指定,并通过上拉电阻确定。根据该时间和总线电容,我们可以计算允许的最大上拉电阻(Rp)。当电压为5V,时钟频率为400kHz时,给定总线电容CBUS为100pF,则规定的最大上升时间(TR)为300ns。
公式3:符合I2C上升时间标准的最小上拉电阻。
高电平总输入电流(IIH)
即使没有器件拉低线的电平,线仍处于逻辑高电平时,电流仍会继续流过上拉电阻。该电流由总线上器件的数字输入的泄漏产生,也可能是质量较差的PCB材料以及焊接残留物所导致。其中一些因素是无法预见的,但采用高质量材料和良好的制造工艺时,输入引脚泄漏是主要原因。
根据图2,没有器件拉低总线电平时,线的电平需要高于VIH才能被视为逻辑高电平。泄漏电流会限制Rp的最大值,这样其两端的电压降不会阻止线的电平被拉高至VIH以上。对于VIH规范,还应谨慎留出一些保护裕量,以防止噪声尖峰将电压拉低至VIH电平以下。要在高噪声环境下稳定工作,I2C规范建议采用0.2 Vdd作为高出VIH的适当裕量。
公式4:逻辑高输入电平上的额外裕量。
通常会在器件的数据手册中给出数字输入的泄漏电流,对于Microchip的I2C EEPROM器件,最大输入泄漏电流(IlIEE)为1µA。组成系统的最少元件是单片机I2C主器件和I2C从器件。对于本例,采用一个输入泄漏电流(IlIMCU)为1µA的单片机和四个I2C EEPROM器件,允许100%裕量,IIH为10µA。
公式5:已定义总线的引脚泄漏产生的泄漏电流。
应用欧姆定律,我们可以确定符合这些规范的Rp最大值。
公式6:确保逻辑高电平的最小上拉电阻值。
电阻值计算
通过计算电源电压、总线电容和泄漏电流,我们可以得出RP值的范围。
可以忽略由泄漏电流产生的 50KΩ(最大值),因为总线电容起主导作用。因此,可接受的电阻值的范围为:
设计人员应选择范围中间附近的值,以尽可能提供较大的保护带。对于本例,2.2KΩ的上拉电阻较为理想。
总线速度与功耗
当提高总线速度或存在较大总线电容时,必须减小上拉电阻。阻值较低的电阻会导致电流消耗增加,因为总线上的每个逻辑低电平都会产生对地通路,从而对功耗造成负面影响。快速完成任务并使系统恢复到低功耗空闲状态,与较高总线速度要求所产生的额外电流消耗存在矛盾,总线速度可成为两者之间的权衡因素。对于功耗预算非常低的应用,SPI可能是更合适的总线协议,因为其使用驱动线路,而不是集电极开路。