由于 I2C 接口采用 Open Drain 机制,器件本身只能输出低电平,无法主动输出高电平,<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><?xml:namespace prefix = w ns = "urn:schemas-microsoft-com:office:word" />只能通过外部上拉电阻 RP 将信号线拉至高电平。因此 I<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />2C总线上的上拉电阻是必须的!
RP 不宜过小,一般不低于 1KΩ。
一般 IO 端口的驱动能力在 2mA~4mA 量级。如果 RP 阻值过小,VDD 灌入端口的电流将较大,这导致端口输出的低电平值增大(I2C协议规定,端口输出低电平的最高允许值为 0.4V);如果灌入端口的电流过大,还可能损坏端口。故通常上拉电阻应选取不低于 1KΩ的电阻(当 VDD=3V 时,灌入电流不超过 3mA)。
RP 不宜过大,一般不高于 10KΩ
由于端口输出高电平是通过 RP 实现的,线上电平从低到高变化时,电源通过 RP 对线上负载电容 CL 充电,这需要一定的时间,即上升时间。端口信号的上升时间可近似用充电时间常数 RPCL 乘积表示。
信号线负载电容(对地)由多方面组成,包括器件引脚、PCB 信号线、连接器等。如果信号线上挂有多个器件,负载电容也会增大。比如总线规定,对于的 400kbps 速率应用,信号上升时间应小于 300ns;假设线上 CL 为 20PF,可计算出对应的 RP 值为 15KΩ。如果 RC 充电时间常数过大,将使得信号上升沿变化缓慢,达不到数据传输的要求。因此一般应用中选取的都是几 KΩ 量级的上拉电阻,比如都选取 4K7 的电阻。小阻值的 RP 电阻增大了端口 Sink 电流,故在可能的情况下,RP 取值应稍大一点,以减少耗电。另外,通常情况下,SDA,SCL 两条线上的上拉电阻取值是一致的,并上拉到同一电源上。
PCB 布局布线与抗干扰设计
I2C信号线属于低速控制线,在手机 PCB 设计时,按通常的控制 IO 对待即可,无需做特别的保护设计,一般不用担心受到噪声源干扰。但在一些特定的情况下,比如折叠、滑盖机型中,I2C的两根信号线需要通过转轴或滑轨处的 FPC,此时由于信号路径比较长,距离天线比较近,而且 Open drain 的输出级对地阻抗大,对干扰比较敏感,因此比较容易受到 RF 信号源的干扰。在这种情况下,就应适当注意对 I2C信号线的保护。比如 I2C两条信号线(SDA,SCL)等长度地平行走线,两边加地线进行保护,避免临近层出现高速信号线等。
上拉电阻应安置在 OD 输出端附近。当 I2C 总线上主从器件(Master & Slave)两端均为OD输出时,电阻放置在信号路径的中间位置。当主设备端是软件模拟时序,而从设备是 OD 输出时,应将电阻安置在靠近从设备的位置。
I2C协议还定义了串联在 SDA、SCL 线上电阻 Rs。该电阻的作用是,有效抑制总线上的干扰脉冲进入从设备,提高可靠性。这个电阻的选择一般在 100~200ohm 左右。当然,这个电阻并不是必须的,在恶劣噪声环境中,可以选用。
比如常用的 FM接收模块或者 Capsense 触摸感应功能块,都是通过 I2C 接口控制的。I2C 接口信号从处理器出发,经过PCB 上的信号路径,进入上述电路单元。I2C 信号线上载有一定干扰,这种干扰虽然幅度并不很大,但还是会影响敏感的FM接收模块或Capsense 触摸感应功能块。此时,可以通过在靠近 FM 模块或触摸感应模块的I2C信号线上串接 Rs 电阻,即可有效降低干扰的影响。此外,上拉电阻端的电源也要进行退耦处理。
软件模拟 I2C 时序
由于一般的 I2C 应用速率并不高(400kbps),使用处理器的 IO 口模拟 I2C 波形,完全可以胜任(处理器一般担任 Master,占有 I2C 通信的控制权,无需担心随机的 I2C 通信服务中断其他任务的执行)。处理器分配给 I2C 任务的 IO 口,要求可以输出高低电平,还能配置为输入端口。处理器-1226根据总线规范以及从设备的时序要求,利用条IO信号线,模拟I2C接口时序波形,进行I2C通信。
处理器发送数据时,通过IO口输出高电平,上升时间基本与外部上拉电阻阻值无关,且用外部上拉电阻上拉到高电平快很多。处理器在接受数据时,即便上拉电阻阻值选的大一些,从设备输出数据的波形上升沿缓慢,但由于处理器使用软件采样的而非硬件采样,因此,对数据传输的结果并不影响。也就是说,使用IO口模拟I2C时序时,上拉电阻阻值可以适当选的大一些。需要指出的是,使用软件模拟最多只能完成单 Master 的应用,对于多 Master 应用,由于需要进行总线控制权的仲裁管理,使用软件模拟的方法很难完成。
I2C 总线空闲的时候,两条信号线应该维持高电平。否则,上拉电阻上会有耗电。特别是在上电过程中,IO 线上电平也应保持在高电平状态。也就是说:当 Master 的 I2C 使用的是 IO 软件模拟时,一定要保证该两个IO上电默认均为输入(或高阻)或者输出高电平,切不可默认为输出低电平。IO 默认为输入时,可以通过外部上拉电阻将 I2C 信号线拉至高电平。
I2C 应用中上拉电阻电源问题
在部中分应用中,还存在主从设备以及上拉电阻电源不一致的情况,比如 Camera 模组。在很多设计方案中,Camera 模组不工作时,并不是进入 Power Down 模式,而是直接关闭模组供电VDDS。此时,处理器与模组相互连接的所有信号线都应该进入高阻态,否则就会有电流漏入模组;而对于此时的 I2C 控制信号线来说,由于上拉电阻的存在,必须关断上拉电阻电源 VDDP。如果上拉电阻使用的是系统电源 VDDM(VDDP=VDDM),无法关闭,就会有漏电流进入模组;因此这种情况下,应该使用 VDDS作为上拉电阻电源(VDDP=VDDS),这样上拉电阻电源与 Slave 电源即可同时关闭,切断了漏电路径。
另外需要注意的是,在上述应用实例中选择的 IO,应该选取上电默认为输入(或高阻)才行
用户377235 2013-3-18 19:28
用户158097 2008-3-26 20:25
用户1569463 2007-4-16 15:49
可能对我来说是新的.
您还有更新的,让我也学学!
用户38817 2007-4-2 10:44
看了一下,没发现新,4*4了应该加上中断