关于硬件工程师,I²C再了解不过了,两根线,一根数据SDA一根时钟SCL。其时在运用avr CPU规划数据采集器产品的CPU主板,外挂了Silicon
lab的温湿度传感器Si7013,实时时钟,首要完结温湿度、时钟及电流电压等信号经过I²C总线抵达CPU进行处理,而且由MCU
EFM32WG290F64控制在液晶上和上位机界面上的CPU自带的I²C总线外挂的六个I²C从设备,如下图1所示。
图1:Avr的I²C接口电路图
开始时分,此CPU主板的I²C接口仅挂了实时时钟和温度芯片,选用CPU自带的I²C接口。在调试时,波形都比较正常,上升沿和下降沿都能符合要求,一般跑的速率为100KHz。可是后期改版,需求在I²C接口上添加四个I²C设备,线路也相应地变长,在调试的时分,就发现CPU主板上电后,I²C作业反常,偶然会读不到任何信息。
经过了长期的查问题阶段,发现经过I²C接口的SDA和SCL上拉电阻的巨细与放置方位都是有考究的。一般I²C上拉电阻放在CPU引出的方位,若没有外挂的I²C芯片就不需求加上拉电阻,这点在咱们的CPU主板是没有问题的。然后便是上拉电阻,这个一般讲的便是与速率有关,咱们将上拉电阻从4.7K,2.2K,1K乃至几百欧姆都测验过,在1K和2.2K的状况下,上升沿和下降沿会比较陡一点。速率100KHZ下选用2.2K的上拉电阻测验出的I2C波形,如图2所示。
图2:在100Khz下,选用2.2K的上拉电阻测验出的I²C波形
终究测出的状况,在上拉电阻为4.7K的时分,速率在100KHZ,波形是正常的;在2.2K的时分,速率在100Khz的时分,波形也是正常;在1K的时分,速率为400Khz,波形也正常;在470欧姆的时分,速率为400KHZ,波形就会畸变。咱们选用的上拉2.2K,速率为100KHZ的接口,仍呈现CPU板电后I²C作业反常,读不到任何反常信息。后发现是SDA被一向拉低了,SCL一向为高,I²C被死锁了。
为了处理这种问题,在网络上找到一种选用IO模仿I²C的方法,调试了一周后,发现这个问题得到了处理。将I²C接口作为一般IO来操作可能是改动最小的一种方法。其实针对这个问题,还有一些方法可以运用:
1)尽量选用带复位输人的I²C从器材。
2)将一切的从I²C设备的电源衔接在一起,经过MOS管衔接到主电源,而MOS管的导通关断由I²C主设备来完结。
3)在I²C从设备规划看门狗的功用。
4)在I²C总线上添加一个额定的总线康复设备,用来监督I²C总线。当设备检测到SDA信号被拉低超越指定时刻时,就在SCL总线上发生9个时钟脉冲,使I²C从设备完结读操作,从死锁状况上康复出来。总线康复设备需求有具有编程功用,一般可以用单片机或CPLD完结这一功用。
因为avr
CPU带多个I²C从设备呈现死锁的问题,尽管可以经过IO模仿处理问题,可是关于编程来说比较费事,IO模仿在高速上面作用并不好。后来更换了Silicon
Labs的MCU,型号为EFM32WG290F64,做了一个最小体系板,外围电路不变,I²C死锁问题不再存在,有效地处理了我的I²C问题。选用EFM32WG290F64读到的I²C波形如下:
图3:EFM32WG290F64读到的I²C波形
别的,规划中经过选用了多片温湿度传感器Si7013,精度也十分高,特别在高温条件下,测验的湿度准确率也十分高。其实I²C接口在咱们的规划中再常见不过,但在规划中仍是要特别注意以下几点,可以充分考虑以下的关键,I²C规划就可以挥洒自如。
1)I²C线路的负载电容不能超越400pF;
2)需求满意上升沿和下降沿的时序联络;
3)I²C上拉电阻和速率有着亲近的联络,需求挑选合理;
4)怎么判别死锁的状况,如上面所示,并供给了一系列的处理方案。