CN102298564A - 一种防止i2c读写错误的方法 - Google Patents
一种防止i2c读写错误的方法 Download PDFInfo
- Publication number
- CN102298564A CN102298564A CN2011102602666A CN201110260266A CN102298564A CN 102298564 A CN102298564 A CN 102298564A CN 2011102602666 A CN2011102602666 A CN 2011102602666A CN 201110260266 A CN201110260266 A CN 201110260266A CN 102298564 A CN102298564 A CN 102298564A
- Authority
- CN
- China
- Prior art keywords
- bus
- equipment
- high level
- level
- scl
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Small-Scale Networks (AREA)
Abstract
本发明公开了一种防止I2C读写错误的方法,其步骤如下:步骤1、确定I2C速率,确定时钟周期T;步骤2、将高电平与低电平时钟的持续时间均设定为T/2;步骤3、产生高电平与低电平时钟信号;步骤4、判断SCL总线为高电平或低电平;步骤5、SCL总线为高电平,则将GPIO配置为inputnopull模式;SCL总线为低电平,则将GPIO配置为push-pull模式;步骤6、判断时钟信号的高电平是否被设备拉低;步骤7、被设备拉低则使时钟信号停止,达成与设备握手,直到设备释放时钟信号的下拉,使得时钟信号上产生高电平;步骤8、时钟信号与设备同步。本发明保证I2C总线数据传输的稳定性,可靠性,且结构简单,易于实现。
Description
技术领域
本发明涉及一种防止I2C读写错误的方法,特别是涉及一种防止I2C握手失败的方法。
背景技术
2C协议规定,在数据传输过程中,如果从设备要完成一些其他功能后才能接收或发送下一个完整的数据字节,此时从设备可以通过一个握手协议强行将时钟线SCL拉低,迫使主机进入等待状态,当从设备准备好接收或发送下一个数据字节并释放SCL后,数据传输继续。当从设备强行拉低SCL时,理论上说应该把SCL拉到一个稳定的低电平,但是当I2C接口为推挽方式时,如果总线上有串联电阻或设备I2C内部设计有保护电阻时,SCL可能会被拉到一个中间电平,驱动电流越大。中间电平会影响时钟SCL的低电平判断,很可能会导致握手失败,从而造成时钟不同步,影响总线的数据传输,甚至使数据传输出错。本发明的意图就是解决类似这种握手过程中CLK被拉到一个中间电平,进而影响握手,造成时钟不同步的问题。从而保证I2C总线数据传输的稳定性、可靠性。
众所周知,I2C总线是PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。I2C总线是微电子通信控制领域广泛采用的一种总线标准,具有接口线少,控制方式简单,器件封装小,通信速率较高等优点。正因为I2C总线的这些优点,现在越来越多的外围设备都采用I2C控制方式。正是由于外围I2C设备多,通常一个I2C总线上会挂接几个I2C设备。I2C协议虽然支持一个总线上挂接多个设备,但是其数量也要受到总线最大电容400pF的限制,因此有时在HOST端I2C接口有限的情况下,不得不用GPIO模拟I2C的方式。我们知道,I2C总线一般都是开漏输出,因此可以保证高低电平的稳定。但是当使用GPIO模拟I2C时,有时只能采用推挽输出方式,这时,由于总线上串联电阻或设备I2C内部保护电阻的存在,就会出现图一的问题。从SCL波形看虽然影响到CLK低电平的判断,但还没有影响到数据的传输。有时甚至会直接影响数据传输。
发明内容
本发明的目的在于克服现有技术的不足,提供一种防止I2C读写错误的方法,保证I2C总线数据传输的稳定性,可靠性,且结构简单,易于实现。
为了达到上述目的,本发明采用的技术方案是,一种防止I2C读写错误的方法,其步骤如下:
步骤1、确定I2C速率,确定时钟周期T;
步骤2、将高电平与低电平时钟的持续时间均设定为T/2;
步骤3、产生高电平与低电平时钟信号;
步骤4、判断SCL总线为高电平或低电平;
步骤5、SCL总线为高电平,则将GPIO配置为input no pull模式;SCL总线为低电平,则将GPIO配置为push-pull模式;
步骤6、判断时钟信号的高电平是否被设备拉低;
步骤7、 被设备拉低则使时钟信号停止,达成与设备握手,直到设备释放时钟信号的下拉,使得时钟信号上产生高电平;
步骤8、时钟信号与设备同步。
所述的input no pull模式为GPIO输入模式;所述的push-pull模式为推挽模式。
与现有技术相比,本发明的有益效果是:保证I2C总线数据传输的稳定性,可靠性,且结构简单,易于实现。
附图说明
图1为本发明的方法流程图;
图2为本发明的具体实施图;
图3为从设备强制拉低SCL时握手过程的流程图;
图4为本发明的标准的I2C总线结构图;
图5为本发明的主机端为推挽方式的I2C总线结构图;
图6为本发明的实际使用中主机端为推挽方式的I2C总线结构图。
具体实施方式
下面结合实施例参照附图进行详细说明,以便对本发明的技术特征及优点进行更深入的诠释。
图4所示的是标准的I2C总线结构,可见主机和设备的内部都是开漏输出,这样就可以保证高低状态的稳定。然而实际使用中,有时我们不得不用推挽方式,例如用软件模拟I2C时,其内部结构如图5所示。可见此时主机端是推挽方式的,而设备端是开漏方式的。由于推挽方式驱动时,总线上会有较大的驱动电流产生,同时,一般出于降噪的考虑会在I2C总线上串小电阻(0-300欧),现在很多的I2C器件在芯片内部出于保护芯片的考虑也会串一个小电阻。因此实际使用中的I2C总线结构如图6所示。
如图6所示,一种I2C总线电路结构,包括I2C总线及通过I2C总线连接的主机和设备,I2C总线为串行数据线SDA及串行时钟线SCL,串行数据线SDA上串联有电阻R1,且通过上拉电阻R3连接电源VDD, 串行时钟线SCL上串联有电阻R2,且通过上拉电阻R4连接电源VDD,所述的主机为推挽输出结构,设备为开漏输出结构。
主机与串行时钟线SCL相连的推挽输出结构的场效应管为Q1、Q2,主机与串行数据线SDA相连的推挽输出结构的场效应管为Q3、Q4,Q1与Q2、Q3与Q4分别为一对放大性能相同、导电极性相反的场效应管。在场效应管Q1的源极串联一电阻R5后接电源VDD,场效应管Q2的源极接地,场效应管Q1、Q2的漏极相互连接并组成推挽输出;在场效应管Q3的源极串联一电阻R6后接电源VDD,场效应管Q4的源极接地,场效应管Q3、Q4的漏极相互连接组成推挽输出。电阻R5与R6的阻值相等,设置为R。
设备与串行时钟线SCL相连的开漏输出结构的场效应管为Q5,Q5的源极串联一电阻R7后接地;设备与串行数据线SDA相连的开漏输出结构的场效应管为Q6,Q6的源极串联一电阻R8后接地,电阻R7与R8的阻值相等,设置为Rs,场效应管Q5、Q6的漏极输出。
设总线驱动电流为I,SCL总线上串联电阻R2两端的电压分别为U1、U2,近似的计算出U1,U2:
U1=(Rs+R2)*I ;U2=Rs*I
推挽输出时,I2C总线上会产生比较大的驱动电流,I近似等于VDD除以总线上的电阻,场效应管的导通电阻很小,电阻R1、R2、器件内部的保护电阻R5、R6、R7、R8都是小电阻。假设VDD是1.8V,线上总电阻为225欧,可算得总线上电流可达8ma,假设Rs为60欧R2为100欧,通过上面的公式可近似得到U1=(60+100)*8ma=1280mv,此时必然会导致握手失败,进而会造成时钟数据不同步,使得数据传输错误。
由此可见,导致SCL被拉到一个中间电平的原因在于两点:一是推挽方式时总线上有较大的驱动电流;二是总线上靠近设备有串联电阻,包括内部保护电阻。
本发明的方法流程图如图1所示,一种防止I2C读写错误的方法,其步骤如下:
步骤1、确定I2C速率,确定时钟周期T;
步骤2、将高电平与低电平时钟的持续时间均设定为T/2;
步骤3、产生高电平与低电平时钟信号;
步骤4、判断SCL总线为高电平或低电平;
步骤5、SCL总线为高电平,则将GPIO配置为input no pull模式;SCL总线为低电平,则将GPIO配置为push-pull模式;
步骤6、判断时钟信号的高电平是否被设备拉低;
步骤7、 被设备拉低则使时钟信号停止,达成与设备握手,直到设备释放时钟信号的下拉,使得时钟信号上产生高电平;
步骤8、时钟信号与设备同步。
所述的input no pull模式为GPIO输入模式;所述的push-pull模式为推挽模式。
本发明的具体实施图如图2所示,在push-pull方式下输出低电平T/2后,将GPIO转换为input no pull 模式,此时,由于外部上拉的存在,SCL会被拉为高电平,且此时GPIO是输入状态,host可以检测到该高电平状态,持续T/2,再转换状态,产生低电平,依此类推。
本发明的推挽输出流程图如图3所示,假设CLK在第二个高电平时被device强行拉低,从图示上可以看出,拉低时GPIO配置状态已经由push-pull转换成input no pull,此时的GPIO作为输入引脚,对于正常的时钟信号来说,在这个阶段检测到的仍然是高电平,可以继续计时直到高电平计时结束再进入Push-pull的状态,但是当从设备拉低clk信号时,此时检测到的是低电平,软件上可以通过一定方式的处理,使得时钟信号停止,达成与从设备的握手,直到从设备释放clk信号的下拉,使得clk总线上产生高电平,此时GPIO作为输入检测到CLK高的状态,继续按前面所述的方式产生时钟以使得从设备同步。由于,在握手的过程中,GPIO是input no pull的,因此,此时总线上只有很微弱的电流,可忽略不计,这样便破坏了问题产生的第一个条件,所以,此时 CLK不会被拉到一个中间电平。
本发明的具体实现方式为:当SCL总线要输出低电平时,将主机的GPIO配置为推挽输出,当SCL总线为高电平时,将主机的GPIO配置为GPIO输入模式,此时总线被外部上拉拉到一个稳定的高电平。在实际的应用中,当I2C的速率确定后,其时钟周期T确定,因此将高低时钟的持续时间均设定为T/2,产生一定时间的高低时钟信号,即产生一定周期的时钟。将信号的正半周和负半周分别有两个场效应管来完成,当信号正半周到来时,由一个场效应管完成放大,当负半周到来时,又由另一个场效应管完成放大,放大完后,最后合成一个完整的信号。保证I2C总线数据传输的稳定性,可靠性,且结构简单,易于实现。
以上所述仅为本发明的较佳实施例,凡依本发明权利要求范围所做的均等变化与修饰,皆应属本发明权利要求的涵盖范围。
Claims (2)
1.一种防止I2C读写错误的方法,其步骤如下:
步骤1、确定I2C速率,确定时钟周期T;
步骤2、将高电平与低电平时钟的持续时间均设定为T/2;
步骤3、产生高电平与低电平时钟信号;
步骤4、判断SCL总线为高电平或低电平;
步骤5、SCL总线为高电平,则将GPIO配置为input no pull模式;SCL总线为低电平,则将GPIO配置为push-pull模式;
步骤6、判断时钟信号的高电平是否被设备拉低;
步骤7、 被设备拉低则使时钟信号停止,达成与设备握手,直到设备释放时钟信号的下拉,使得时钟信号上产生高电平;
步骤8、时钟信号与设备同步。
2.根据权利要求1所述的防止I2C读写错误的方法,其特征在于:所述的input no pull模式为GPIO输入模式;所述的push-pull模式为推挽模式。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011102602666A CN102298564B (zh) | 2011-09-05 | 2011-09-05 | 一种防止i2c读写错误的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011102602666A CN102298564B (zh) | 2011-09-05 | 2011-09-05 | 一种防止i2c读写错误的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102298564A true CN102298564A (zh) | 2011-12-28 |
CN102298564B CN102298564B (zh) | 2013-11-13 |
Family
ID=45358989
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2011102602666A Expired - Fee Related CN102298564B (zh) | 2011-09-05 | 2011-09-05 | 一种防止i2c读写错误的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102298564B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9195627B2 (en) | 2012-11-13 | 2015-11-24 | Accton Technology Corporation | Apparatus and method of controlling clock signals |
CN105354157A (zh) * | 2015-11-26 | 2016-02-24 | 北京天诚盛业科技有限公司 | 配置iic器件的方法、装置和系统 |
CN107205085A (zh) * | 2017-05-23 | 2017-09-26 | 广东欧珀移动通信有限公司 | 数据传输控制方法、装置、存储介质及终端 |
CN112817895A (zh) * | 2021-01-28 | 2021-05-18 | 广州安凯微电子股份有限公司 | 一种基于gpio的通信方法 |
CN117215983A (zh) * | 2023-11-09 | 2023-12-12 | 辉芒微电子(深圳)股份有限公司 | I2c接口规避错误起始和停止条件的电路结构及方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2004199580A (ja) * | 2002-12-20 | 2004-07-15 | Sony Corp | クロック制御回路およびインタフェース回路 |
CN201374060Y (zh) * | 2008-12-16 | 2009-12-30 | 康佳集团股份有限公司 | 一种iic总线扩展系统结构 |
-
2011
- 2011-09-05 CN CN2011102602666A patent/CN102298564B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2004199580A (ja) * | 2002-12-20 | 2004-07-15 | Sony Corp | クロック制御回路およびインタフェース回路 |
CN201374060Y (zh) * | 2008-12-16 | 2009-12-30 | 康佳集团股份有限公司 | 一种iic总线扩展系统结构 |
Non-Patent Citations (1)
Title |
---|
陈章余: "基于I2C串行总线在单片机系统中的数据读写", 《电脑知识与技术》, vol. 5, no. 32, 30 November 2009 (2009-11-30), pages 9059 - 9061 * |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9195627B2 (en) | 2012-11-13 | 2015-11-24 | Accton Technology Corporation | Apparatus and method of controlling clock signals |
CN105354157A (zh) * | 2015-11-26 | 2016-02-24 | 北京天诚盛业科技有限公司 | 配置iic器件的方法、装置和系统 |
CN107205085A (zh) * | 2017-05-23 | 2017-09-26 | 广东欧珀移动通信有限公司 | 数据传输控制方法、装置、存储介质及终端 |
CN107205085B (zh) * | 2017-05-23 | 2020-05-12 | Oppo广东移动通信有限公司 | 数据传输控制方法、装置、计算机可读存储介质及终端 |
CN112817895A (zh) * | 2021-01-28 | 2021-05-18 | 广州安凯微电子股份有限公司 | 一种基于gpio的通信方法 |
CN117215983A (zh) * | 2023-11-09 | 2023-12-12 | 辉芒微电子(深圳)股份有限公司 | I2c接口规避错误起始和停止条件的电路结构及方法 |
CN117215983B (zh) * | 2023-11-09 | 2024-03-22 | 辉芒微电子(深圳)股份有限公司 | I2c接口规避错误起始和停止条件的电路结构及方法 |
Also Published As
Publication number | Publication date |
---|---|
CN102298564B (zh) | 2013-11-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI733752B (zh) | 用於旁波帶通訊之系統及方法、以及實體非暫時性計算機可讀媒體 | |
CN103454996B (zh) | 主从机系统及其控制方法 | |
CN102298564B (zh) | 一种防止i2c读写错误的方法 | |
WO2013168289A1 (ja) | 電子機器およびその制御方法 | |
CN104081368A (zh) | 移动设备自动检测装置和方法 | |
CN101963949B (zh) | 热插拔实现方法、热插拔系统及板卡 | |
CN107430420A (zh) | 具有高空闲噪声和dc电平抑制的低功率type‑c接收器 | |
EP2534496B1 (en) | Determination of physical connectivity status of devices based on electrical measurement | |
CN102820970B (zh) | 电子装置及其电池模块的认证方法 | |
CN106020176B (zh) | 一种cc逻辑控制芯片低功耗连接检测方法及结构 | |
CN204576500U (zh) | 一种兼容i2c通信的usb通信电路和系统 | |
Eswari et al. | Implementation of I 2 C master bus controller on FPGA | |
CN101179199A (zh) | 一种终端及其充电方法 | |
CN109844685A (zh) | 一种分时复用的复位装置、方法、及终端 | |
KR101036444B1 (ko) | 범용 직렬 버스 송신기 | |
TWI468918B (zh) | 自動偵測控制裝置及其自動偵測控制方法 | |
CN108446139A (zh) | 一种fpga芯片的唤醒方法及装置 | |
US20230268919A1 (en) | Iic hang link restoration circuit and method based on pca9511 chip | |
TWI506952B (zh) | 用於功率管理的隔離介面電路 | |
CN212112457U (zh) | 一种总线控制器 | |
WO2020233575A1 (zh) | 一种实现usb otg功能的方法 | |
CN205263730U (zh) | 一种基于POWER平台的新型IO Riser板卡 | |
CN201667067U (zh) | 一种usb接口 | |
US6874047B1 (en) | System and method for implementing an SMBus/I2C interface on a network interface card | |
US7085117B2 (en) | EMC immunity improvements to USB interface |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CP01 | Change in the name or title of a patent holder | ||
CP01 | Change in the name or title of a patent holder |
Address after: Changan town in Guangdong province Dongguan 523860 usha Beach Road No. 18 Patentee after: GUANGDONG OPPO MOBILE TELECOMMUNICATIONS Corp.,Ltd. Address before: Changan town in Guangdong province Dongguan 523860 usha Beach Road No. 18 Patentee before: GUANGDONG OPPO MOBILE TELECOMMUNICATIONS Corp.,Ltd. |
|
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20131113 |