论文部分内容阅读
摘要:在实际应用过程中,I2C电路的关注相对较少,原因就在于其外围电路相对简单,但也容易出现不少的问题,对于电路设计来说,能读懂I2C上的传输数据,能够按照I2C要求的规范构建电路系统,无疑对于分析解决问题具有十分重要的作用。本篇通过在设计过程中出现的问题实例,讨论在I2C应用的一些注意点。
关键词:I2C;开始信号;结束信号; ACK;电平
中图分类号:TP391 文献标识码:A
文章编号:1009-3044(2019)12-0266-02
开放科学(资源服务)标识码(OSID):
1 I2C总线的概念及工作原理
1.1 I2C总线定义
I2C(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。
1.2 I2C总线特点
I2C能使一个系统中各部分电路连接非常简单,省去许多I/O接口,简化了电路,提高了可靠性。同时,它允许包含多个主控。在I2C定义中,主控就是任何能够进行发送和接收的设备。主控能够控制信号的传输和时钟频率。同时,也规定同一套系统中同一时间点I2C上只能有一个主控。
1.3 I2C总线种类
I2C 总线上数据的传输速率分为标准模式(100kbit/s)、快速模式(400kbit/s)及高速模式(3.4Mbit/s)。目前我们大部分产品主要使用的总线模式仍为标准模式。
1.4 I2C总线工作原理
I2C总线是串行总线,由数据线SDA和时钟SCL构成。它可以在CPU与被控IC之间、IC与IC之间进行双向传送。总线上所有被控制单元均采用并联方式连在一起,其中每个电路或者模块都有且只有一个地址。在信息的传输过程中,并联的这些模块电路根据它所要完成的功能,既可以作为主控器(或发送器),又可以作为被控器(或接收器)。在I2C上主控发出的控制信号一般包含地址码和数据两部分,其中地址码用来选择需要控制的模块电路,并确定控制的种类;数据则指定调整的类别及数量。被控模块电路通常包含从机地址(Slave Address)及子地址(Sub Address)。从机地址是被控模块电路在该总线上能被主控寻址的地址,而子地址则为该模块电路内部不同部件或存储单元的编址。子地址传输方式,传输格式与数据是统一的,地址或数据的区分主要依靠收发双方具体的逻辑约定。
2 I2C总线的电平要求
I2C通常会串联电阻保护I2C 总线器件的I/O 级,防止总线上高电压的毛刺影响I/O 级,并将振荡和干扰减到最小。
具备I2C 总线的电路器件的SDA 和SCL 管脚都是漏极开路。因此工程运用中,两条信号线外围都需要增加上拉电阻。上拉电阻使SDA和SCL线在总线空闲的时侯保持高电平,同时保证在信号要求的上升时间内能从低电平变成高电平。上拉电阻一般取值3~10KΩ,大部分产品中一般使用5V或3.3V的上拉源。
3 I2C总线工作过程简述及實例
I2C总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。
1) 开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。
2) 结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。
3) 应答信号:我们通称为“ACK”信号。它指接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。
其中开始信号是必须的,结束信号和应答信号可以不做要求。以下我们采用一个实际应用中的例子说明。
图1是某产品外围从芯片与CPU间的通信片段,蓝色波形为SDA,绿色波形为SCL。当读到SCL为高,SDA从高到低的过程跳变,则可判定为开始信号。之后SCL连续的8个脉冲器件可从SDA读到目前访问的地址(本图中为1111 1010即为FA),表示刚好为从芯片的写地址(通常最后一位为“1”为“读”操作,最后一位为“0”为“写”操作)。第九个SCL脉冲来到时,SDA给出了一个低电平,这一位即为芯片的ACK应答信号。至此外围从芯片和CPU间的通信已连接好,CPU可对从芯片进行操作。接下来的一个8位周期里,我们看到CPU需要写入的内容为1010 0101(A5), 从芯片同样给予了ACK响应,之后当SCL为高时,SDA有一个从低到高的跳变,这就是一个结束信号。自此CPU与从芯片间的一次通信就此结束,总线转入空闲等待下一次命令的到来。
在实际应用中,I2C电平是否符合标准设计要求将极大程度上考验我们的系统稳定性。以下将通过一个电视产品设计过程中出现的问题及解决过程进行说明。
4 实例解析I2C相关问题
4.1 实例之故障现象描述
某电视机型开发过程中发现有漏台现象出现。
4.2 实例之实验过程及问题分析
出现故障时,使用示波器对高频头的AFT电压进行监测,发现在搜台频率从00到FF微调过程中,在61,69两个数据点上有不正常的AFT电压跳变,此时用频谱仪对调谐芯片进行探测,调谐芯片已完全停振,高频头无IF信号输出,AFT电压亦出现跳变。
考虑到由于图象跳变只出现在固定的频率点上,我们又使用软件对高频头的I2C进行了监测。当CPU对高频头进行微调时,会对其写入5个BYTE数据,第一个BYTE为高频头的地址;第二、三个BYTE为分频比数据;第四个BYTE为高放锁相环的泵电流位;第五个BYTE为I/O端口控制位。 当第三个BYTE为写入61,69数据的时候,立刻出现无信号及高频头不工作。当在跳过61,69两个点后,附近数据调节完全正常。进一步通过示波器分析,当总线数据为61、69发送后,在高频头ACK响应位后I2C数据总线有8个数据位被拉低,而其他数据传输正常,该8个数据位为高频头泵电流数据位,当高频头因为I2C数据总线被拉低后,泵电流数据被设置为00000000,调谐芯片因为无泵电流而停止工作,导致在61,69两个数据点上出现无IF输出,从而出现无图现象。
经以上分析,问题应该出现在CPU与高频头之间的I2C总线上。通过与整机I2C总线波形比较,发现高频头接收数据后的ACK位响应位电压偏高,为1.2V,同时在响应位下降沿端有一毛刺,跌落幅度为0.2V左右,持续时间为0.4uS。
同时我们也注意到,在高频头40位总线数据传输过程中,高频头所有的4个响应位的电平值都一致,但故障只在向高频头发送61,69两个数据点时出现。同一组总线上连接的HDMI接口芯片的读地址位为61,69,因此焦点落在与改HDMI接口芯片地址冲突上。分析发现,当CPU在向高频头发送分频比率数据61或69之前,由于总线电平的不符合要求,被HDMI接口芯片误识别为芯片读地址而错误响应,抢夺了与CPU的总线通信权。当HDMI接口芯片响应后,由于其本身并未进行复位等操作,其端口处于高阻态拉低了总线电平。为进一步验证上述情况,我们特地进行了另一组模拟实验,通过跳线将HDMI接口芯片的读地址改为了63,6B,在微调时61,69两点不再重现故障,而在新的读地址63或6B上出现了无信号等同样的故障现象,从而证明我们的判断。
4.3 实例之总结分析
总结以上分析,問题的发生原因为以下几个方面综合产生:
1) 新批次的高频头调谐芯片的总线电流吸收能力较弱,造成高频头ACK位电压偏高,致使CPU认为其ACK为高电平,判断高频头未响应,为其他芯片抢夺总线通信权创造了先决条件。
2) 总线上有较大的毛刺,造成ACK位的末端有向下脉冲,造成了一个电压跳变,刚好形成了满足总线开始的条件。导致了其他芯片抢占总线通信权的实质举动。
5 总结
综合上面得设计实例,我们可以看出I2C的电路设计对于系统稳定工作的重要意义,虽然I2C外围电路相对简单,但不注重其各串联电阻及上拉电阻取值,仍会给我们的设计工作带来麻烦。因此I2C波形,特别是每个I2C器件的ACK电平的测量应该作为一个设计阶段的必检内容,认真的按照I2C规范进行设计并多方的验证,才能保证我们的产品设计少走弯路缩短开发流程。读懂I2C,是每个硬件设计师应该具备的能力。
参考文献:
[1] The I2C-Bus Specification Version 2.1[M].Philips Semiconductors, January 2000.
[2] 何立民.I2C总线应用系统设计[M].北京:北京航空航天大学出版社,1995.
【通联编辑:李雅琪】
关键词:I2C;开始信号;结束信号; ACK;电平
中图分类号:TP391 文献标识码:A
文章编号:1009-3044(2019)12-0266-02
开放科学(资源服务)标识码(OSID):
1 I2C总线的概念及工作原理
1.1 I2C总线定义
I2C(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。
1.2 I2C总线特点
I2C能使一个系统中各部分电路连接非常简单,省去许多I/O接口,简化了电路,提高了可靠性。同时,它允许包含多个主控。在I2C定义中,主控就是任何能够进行发送和接收的设备。主控能够控制信号的传输和时钟频率。同时,也规定同一套系统中同一时间点I2C上只能有一个主控。
1.3 I2C总线种类
I2C 总线上数据的传输速率分为标准模式(100kbit/s)、快速模式(400kbit/s)及高速模式(3.4Mbit/s)。目前我们大部分产品主要使用的总线模式仍为标准模式。
1.4 I2C总线工作原理
I2C总线是串行总线,由数据线SDA和时钟SCL构成。它可以在CPU与被控IC之间、IC与IC之间进行双向传送。总线上所有被控制单元均采用并联方式连在一起,其中每个电路或者模块都有且只有一个地址。在信息的传输过程中,并联的这些模块电路根据它所要完成的功能,既可以作为主控器(或发送器),又可以作为被控器(或接收器)。在I2C上主控发出的控制信号一般包含地址码和数据两部分,其中地址码用来选择需要控制的模块电路,并确定控制的种类;数据则指定调整的类别及数量。被控模块电路通常包含从机地址(Slave Address)及子地址(Sub Address)。从机地址是被控模块电路在该总线上能被主控寻址的地址,而子地址则为该模块电路内部不同部件或存储单元的编址。子地址传输方式,传输格式与数据是统一的,地址或数据的区分主要依靠收发双方具体的逻辑约定。
2 I2C总线的电平要求
I2C通常会串联电阻保护I2C 总线器件的I/O 级,防止总线上高电压的毛刺影响I/O 级,并将振荡和干扰减到最小。
具备I2C 总线的电路器件的SDA 和SCL 管脚都是漏极开路。因此工程运用中,两条信号线外围都需要增加上拉电阻。上拉电阻使SDA和SCL线在总线空闲的时侯保持高电平,同时保证在信号要求的上升时间内能从低电平变成高电平。上拉电阻一般取值3~10KΩ,大部分产品中一般使用5V或3.3V的上拉源。
3 I2C总线工作过程简述及實例
I2C总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。
1) 开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。
2) 结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。
3) 应答信号:我们通称为“ACK”信号。它指接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。
其中开始信号是必须的,结束信号和应答信号可以不做要求。以下我们采用一个实际应用中的例子说明。
图1是某产品外围从芯片与CPU间的通信片段,蓝色波形为SDA,绿色波形为SCL。当读到SCL为高,SDA从高到低的过程跳变,则可判定为开始信号。之后SCL连续的8个脉冲器件可从SDA读到目前访问的地址(本图中为1111 1010即为FA),表示刚好为从芯片的写地址(通常最后一位为“1”为“读”操作,最后一位为“0”为“写”操作)。第九个SCL脉冲来到时,SDA给出了一个低电平,这一位即为芯片的ACK应答信号。至此外围从芯片和CPU间的通信已连接好,CPU可对从芯片进行操作。接下来的一个8位周期里,我们看到CPU需要写入的内容为1010 0101(A5), 从芯片同样给予了ACK响应,之后当SCL为高时,SDA有一个从低到高的跳变,这就是一个结束信号。自此CPU与从芯片间的一次通信就此结束,总线转入空闲等待下一次命令的到来。
在实际应用中,I2C电平是否符合标准设计要求将极大程度上考验我们的系统稳定性。以下将通过一个电视产品设计过程中出现的问题及解决过程进行说明。
4 实例解析I2C相关问题
4.1 实例之故障现象描述
某电视机型开发过程中发现有漏台现象出现。
4.2 实例之实验过程及问题分析
出现故障时,使用示波器对高频头的AFT电压进行监测,发现在搜台频率从00到FF微调过程中,在61,69两个数据点上有不正常的AFT电压跳变,此时用频谱仪对调谐芯片进行探测,调谐芯片已完全停振,高频头无IF信号输出,AFT电压亦出现跳变。
考虑到由于图象跳变只出现在固定的频率点上,我们又使用软件对高频头的I2C进行了监测。当CPU对高频头进行微调时,会对其写入5个BYTE数据,第一个BYTE为高频头的地址;第二、三个BYTE为分频比数据;第四个BYTE为高放锁相环的泵电流位;第五个BYTE为I/O端口控制位。 当第三个BYTE为写入61,69数据的时候,立刻出现无信号及高频头不工作。当在跳过61,69两个点后,附近数据调节完全正常。进一步通过示波器分析,当总线数据为61、69发送后,在高频头ACK响应位后I2C数据总线有8个数据位被拉低,而其他数据传输正常,该8个数据位为高频头泵电流数据位,当高频头因为I2C数据总线被拉低后,泵电流数据被设置为00000000,调谐芯片因为无泵电流而停止工作,导致在61,69两个数据点上出现无IF输出,从而出现无图现象。
经以上分析,问题应该出现在CPU与高频头之间的I2C总线上。通过与整机I2C总线波形比较,发现高频头接收数据后的ACK位响应位电压偏高,为1.2V,同时在响应位下降沿端有一毛刺,跌落幅度为0.2V左右,持续时间为0.4uS。
同时我们也注意到,在高频头40位总线数据传输过程中,高频头所有的4个响应位的电平值都一致,但故障只在向高频头发送61,69两个数据点时出现。同一组总线上连接的HDMI接口芯片的读地址位为61,69,因此焦点落在与改HDMI接口芯片地址冲突上。分析发现,当CPU在向高频头发送分频比率数据61或69之前,由于总线电平的不符合要求,被HDMI接口芯片误识别为芯片读地址而错误响应,抢夺了与CPU的总线通信权。当HDMI接口芯片响应后,由于其本身并未进行复位等操作,其端口处于高阻态拉低了总线电平。为进一步验证上述情况,我们特地进行了另一组模拟实验,通过跳线将HDMI接口芯片的读地址改为了63,6B,在微调时61,69两点不再重现故障,而在新的读地址63或6B上出现了无信号等同样的故障现象,从而证明我们的判断。
4.3 实例之总结分析
总结以上分析,問题的发生原因为以下几个方面综合产生:
1) 新批次的高频头调谐芯片的总线电流吸收能力较弱,造成高频头ACK位电压偏高,致使CPU认为其ACK为高电平,判断高频头未响应,为其他芯片抢夺总线通信权创造了先决条件。
2) 总线上有较大的毛刺,造成ACK位的末端有向下脉冲,造成了一个电压跳变,刚好形成了满足总线开始的条件。导致了其他芯片抢占总线通信权的实质举动。
5 总结
综合上面得设计实例,我们可以看出I2C的电路设计对于系统稳定工作的重要意义,虽然I2C外围电路相对简单,但不注重其各串联电阻及上拉电阻取值,仍会给我们的设计工作带来麻烦。因此I2C波形,特别是每个I2C器件的ACK电平的测量应该作为一个设计阶段的必检内容,认真的按照I2C规范进行设计并多方的验证,才能保证我们的产品设计少走弯路缩短开发流程。读懂I2C,是每个硬件设计师应该具备的能力。
参考文献:
[1] The I2C-Bus Specification Version 2.1[M].Philips Semiconductors, January 2000.
[2] 何立民.I2C总线应用系统设计[M].北京:北京航空航天大学出版社,1995.
【通联编辑:李雅琪】