CN111538626B - 一种从i2c设备解挂死的方法 - Google Patents
一种从i2c设备解挂死的方法 Download PDFInfo
- Publication number
- CN111538626B CN111538626B CN202010381034.5A CN202010381034A CN111538626B CN 111538626 B CN111538626 B CN 111538626B CN 202010381034 A CN202010381034 A CN 202010381034A CN 111538626 B CN111538626 B CN 111538626B
- Authority
- CN
- China
- Prior art keywords
- slave
- counter
- scl
- sda
- equipment
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1415—Saving, restoring, recovering or retrying at system level
- G06F11/1441—Resetting or repowering
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4282—Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
Abstract
本发明公开了一种从I2C设备解挂死的方法,通过现有的从I2C设备的微处理器MCU上新增SDA_in管脚和SCL_in管脚,以及在微处理器MCU内部利用逻辑单元虚拟出计数器和比较器,再采用特定的连接关系就能够实现从I2C设备的解挂死,整个方案中不需要另外增加外围电子物料,具有成本低的优点。
Description
技术领域
本发明涉及通信技术领域,尤其涉及一种从I2C设备解挂死的方法。
背景技术
I2C总线广泛应用于光模块中,大多数光模块都需要实现一个从I2C设备,以便于和主板上的主I2C设备进行通讯。如图2所示,I2C总线包括SDA信号线和SCL信号线,从I2C设备通过SDA信号线和SCL信号线与主I2C设备进行通讯。
但在某些时候,从I2C设备发生异常不能正确响应主I2C设备的访问时,会将SDA信号一直拖死到低电平,这一异常现象被称之为从I2C设备“挂死”,注意从I2C设备在正常工作状态下SDA信号是处于被从I2C设备”释放”的状态,即被外部的上拉电阻至VCC而呈现出高电平。于是一些光模块的多源协议规定,当光模块的从I2C设备不能正确响应主I2C设备的访问时,主I2C设备在探知到SDA被异常“挂死”后,可以发出连续9个SCL的脉冲信号到从I2C设备,则从I2C设备应必须重置其从I2C接口并恢复到正常工作状态,这一过程被称之为从I2C设备“解挂死”。
虽然在光模块的多源协议中规定了从I2C设备挂死时可通过主I2C设备发出连续9个SCL的脉冲信号进行解挂死,但在实际应用过程中,光模块因为自身硬件条件有限,通常忽略从I2C设备的“解挂死”功能。而当光模块的从I2C设备发生“挂死”时,就需要施工人员到现场插拔光模块重新上电复位,否则光模块的从I2C设备将无法工作进而导致和主板的I2C通讯异常,这不仅影响了正常的通讯,还会产生较大的人工成本。因此,需要对现有技术进行改进。
发明内容
本发明的目的在于克服现有技术中存在的上述问题,提供了一种从I2C设备解挂死的方法,本发明所要解决的技术问题是以低成本实现从I2C设备的解挂死。
为实现上述目的,本发明采用的技术方案如下:
一种从I2C设备解挂死的方法,其特征在于:包括以下步骤:
步骤一:在从I2C设备的微处理器MCU上新增SDA_in管脚和SCL_in管脚,并在微处理器MCU内部利用逻辑单元虚拟出计数器和比较器,然后将SDA_in管脚的一端与并联在SDA信号线上,将SDA_in管脚的另一端分别与计数器的低电平使能端和高电平清零端相连;将SCL_in管脚的一端并联在SCL信号线上,将SCL_in管脚的另一端与计数器的时钟端相连,将比较器的输入端与计数器的输出端相连,将比较器的输出端与从I2C设备的高电平复位端相连;
步骤二:从I2C设备挂死时,由主I2C设备通过SCL信号线向从I2C设备连续发送9个SCL脉冲信号,此时SCL_in将接收到9个SCL脉冲信号;当SDA_in=1时,计数器的输出值被异步清零;当SDA_in=0时,计数器被同步使能,来一个SCL_in的上升沿计数器的输出值就累加1;
步骤三:将计数器的输出值送入比较器中进行比较,若累加的计数大于8,则比较器向从I2C设备发出复位信号,使从I2C设备复位重启,从I2C设备重启后释放SDA信号线,完成从I2C设备的解挂死。
所述步骤三中,当从I2C设备重启完成解挂死后,SDA_in=1,计数器被清零,从I2C设备不再被复位。
所述计数器为4-bit计数器。
采用本发明的优点在于:
1、本发明通过现有的从I2C设备的微处理器MCU上新增SDA_in管脚和SCL_in管脚,以及在微处理器MCU内部利用逻辑单元虚拟出计数器和比较器,再采用特定的连接关系就能够实现从I2C设备的解挂死,整个方案中不需要另外增加外围电子物料,具有成本低的优点。相应地,有效地解决了现有技术中从I2C设备挂死时需要施工人员到现场插拔光模块上电复位解挂死带来的维护问题。
2、本发明仅在SDA_in=0时计数器才同步累加计数,在SDA_in=1时计数器就异步清零,只有在计数值达到条件时才复位重启从I2C设备,该设置能够有效防止出现假挂死复位而引起正常通讯中断的技术问题。
3、本发明在从I2C设备重启完成解挂死后,SDA_in=1,计数器被清零,其优点在于避免从I2C设备再次发起复位。
4、本发明将计数器设为4-bit计数器,这是因为4-bit最多可以表示0000b~1111b一共十六个数值,8的二进制是1000b正好用最长4-bit来表达,如果用3bit就太短最大只能表达到7,而5-bit没有必要太消耗逻辑资源。因此采用4-bit计数器既有利于方案的实现,又有利于节约逻辑资源。
附图说明
图1为本发明的电路原理框图;
图2为现有从I2C设备通过I2C总线与主I2C设备进行通讯时的电路图。
具体实施方式
本发明公开了一种从I2C设备解挂死的方法,包括以下步骤:
步骤一:在从I2C设备的微处理器MCU上新增SDA_in管脚和SCL_in管脚,并在微处理器MCU内部利用逻辑单元虚拟出计数器和比较器,计数器为4-bit计数器;然后将SDA_in管脚的一端与并联在SDA信号线上,将SDA_in管脚的另一端分别与计数器的低电平使能端和高电平清零端相连;将SCL_in管脚的一端并联在SCL信号线上,将SCL_in管脚的另一端与计数器的时钟端相连,将比较器的输入端与计数器的输出端相连,将比较器的输出端与从I2C设备的高电平复位端相连。
步骤二:从I2C设备挂死时,由主I2C设备通过SCL信号线向从I2C设备连续发送9个SCL脉冲信号,此时SCL_in将接收到9个SCL脉冲信号;当SDA_in=1时,计数器的输出值被异步清零;仅当SDA_in=0时,计数器才被同步使能,来一个SCL_in的上升沿计数器的输出值就累加1。
步骤三:将计数器的输出值送入比较器中进行比较,若累加的计数大于8,则比较器向从I2C设备发出复位信号,使从I2C设备复位重启,从I2C设备重启后释放SDA信号线,完成从I2C设备的解挂死。其中,当从I2C设备重启完成解挂死后,SDA_in=1,计数器被清零,之后就不会再发起复位从I2C设备的操作了。
本方案中,当从I2C设备已经强制将SDA信号拉到GND时,主I2C设备回读到的数组值将是连续的全0x00数据,而不是正常情况下的非全0x00数据的数组值,此时从I2C设备不能正常响应主I2C设备,表明从I2C设备已挂死,按照SFF-8431多源协议要求,主I2C设备将通过SCL信号线向从I2C设备发送9个SCL脉冲信号,以通知主I2C设备进入I2C总线解挂死的流程。其中,在解挂死流程中,只要SDA_in=1就清零计数器,仅当SDA_in=0且SCL_in从0到1时计数器的输出值才累加1。所以在从I2C设备未挂死时,根据I2C协议可知SDA_in总有等于1的机会,所以计数器总是被清零;仅当从I2C设备挂死时,即SDA_in=0时,计数器才有机会一直未清零一直被使能,当遇到9个连续的SCL脉冲之后,计数器将累加计数到9,继而触发微处理器MCU来复位I2C从设备,完成从I2C设备的解挂死。
下面结附图1对本发明方案进行具体说明,如下:
步骤一:在从I2C设备的微处理器MCU上新增SDA_in管脚和SCL_in管脚,并在微处理器MCU内部利用逻辑单元虚拟出计数器和比较器,然后将SDA_in管脚的一端与并联在SDA信号线上,将SDA_in管脚的另一端分别与计数器的低电平使能端EN和高电平清零端CLR相连;将SCL_in管脚的一端并联在SCL信号线上,将SCL_in管脚的另一端与计数器的时钟端CLK相连,将比较器的输入端B[3..0]与计数器的输出端Q[3..0]相连,将比较器的输出端Q与从I2C设备的高电平复位端RST相连;同时比较器上还设置有输入端A[3..0],该输入端A[3..0]用于输入比较数值8。
步骤二:从I2C设备挂死时,由主I2C设备通过SCL信号线向从I2C设备连续发送9个SCL脉冲信号,此时SCL_in将接收到9个SCL脉冲信号;当SDA_in=1时,计数器的输出值被异步清零;当SDA_in=0时,计数器被同步使能,来一个SCL_in的上升沿计数器的输出值就累加1。
步骤三:将计数器的输出值通过输出端Q[3..0]和输入端B[3..0]送入比较器中与A[3..0]中输入的数值进行比较,若累加的计数值B[3..0]大于比较器A[3..0]的固定值8,则比较器通过输出端Q输出高电平,即向从I2C设备的复位端RST发出高电平复位信号,使从I2C设备复位重启,从I2C设备重启后就会释放SDA信号线,不再将SDA拖死到GND,从而完成从I2C设备的解挂死。
以上所述,仅为本发明的具体实施方式,本说明书中所公开的任一特征,除非特别叙述,均可被其他等效或具有类似目的替代特征加以替换;所公开的所有特征、或所有方法或过程中的步骤,除了互相排斥的特征和/或步骤以外,均可以任何方式组合。
Claims (3)
1.一种从I2C设备解挂死的方法,其特征在于:包括以下步骤:
步骤一:在从I2C设备的微处理器MCU上新增SDA_in管脚和SCL_in管脚,并在微处理器MCU内部利用逻辑单元虚拟出计数器和比较器,然后将SDA_in管脚的一端与并联在SDA信号线上,将SDA_in管脚的另一端分别与计数器的低电平使能端和高电平清零端相连;将SCL_in管脚的一端并联在SCL信号线上,将SCL_in管脚的另一端与计数器的时钟端相连,将比较器的输入端与计数器的输出端相连,将比较器的输出端与从I2C设备的高电平复位端相连;
步骤二:从I2C设备挂死时,由主I2C设备通过SCL信号线向从I2C设备连续发送9个SCL脉冲信号,此时SCL_in将接收到9个SCL脉冲信号;当SDA_in=1时,计数器的输出值被异步清零;当SDA_in=0时,计数器被同步使能,来一个SCL_in的上升沿计数器的输出值就累加1;
步骤三:将计数器的输出值送入比较器中进行比较,若累加的计数大于8,则比较器向从I2C设备发出复位信号,使从I2C设备复位重启,从I2C设备重启后释放SDA信号线,完成从I2C设备的解挂死。
2.根据权利要求1所述的一种从I2C设备解挂死的方法,其特征在于:所述步骤三中,当从I2C设备重启完成解挂死后,SDA_in=1,计数器被清零,从I2C设备不再被复位。
3.根据权利要求1所述的一种从I2C设备解挂死的方法,其特征在于:所述计数器为4-bit计数器。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010381034.5A CN111538626B (zh) | 2020-05-08 | 2020-05-08 | 一种从i2c设备解挂死的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010381034.5A CN111538626B (zh) | 2020-05-08 | 2020-05-08 | 一种从i2c设备解挂死的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111538626A CN111538626A (zh) | 2020-08-14 |
CN111538626B true CN111538626B (zh) | 2023-03-24 |
Family
ID=71973540
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010381034.5A Active CN111538626B (zh) | 2020-05-08 | 2020-05-08 | 一种从i2c设备解挂死的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111538626B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112422178B (zh) * | 2020-10-20 | 2023-02-03 | 浪潮思科网络科技有限公司 | 光模块监控方法、电子设备及存储介质 |
US20240111619A1 (en) * | 2022-09-30 | 2024-04-04 | Analog Devices, Inc. | Inter-integrated circuit (i2c) device with internal bus stuck recovery |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101609440A (zh) * | 2008-06-20 | 2009-12-23 | 华为技术有限公司 | 总线系统和总线从锁定状态中恢复的方法 |
CN101763331A (zh) * | 2010-01-18 | 2010-06-30 | 中兴通讯股份有限公司 | 一种实现i2c总线控制的系统及方法 |
CN102314403A (zh) * | 2011-08-26 | 2012-01-11 | 苏州佳世达电通有限公司 | 用于mcu作为从器件识别i2c总线信号的装置及方法 |
CN103856381A (zh) * | 2012-11-28 | 2014-06-11 | 苏州工业园区新宏博通讯科技有限公司 | 自动恢复热插拔i2c总线锁死的方法、装置和系统 |
CN105335328A (zh) * | 2015-10-30 | 2016-02-17 | 上海斐讯数据通信技术有限公司 | 一种背板i2c总线死锁的消除方法、系统及电子设备 |
CN109491946A (zh) * | 2018-11-12 | 2019-03-19 | 郑州云海信息技术有限公司 | 一种用于i2c总线扩展的芯片和方法 |
CN110249319A (zh) * | 2018-01-09 | 2019-09-17 | 深圳市汇顶科技股份有限公司 | 处理i2c总线死锁的方法、电子设备和通信系统 |
CN111061587A (zh) * | 2019-12-12 | 2020-04-24 | 浪潮商用机器有限公司 | 一种i2c总线的通信控制方法、装置、设备及存储介质 |
-
2020
- 2020-05-08 CN CN202010381034.5A patent/CN111538626B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101609440A (zh) * | 2008-06-20 | 2009-12-23 | 华为技术有限公司 | 总线系统和总线从锁定状态中恢复的方法 |
CN101763331A (zh) * | 2010-01-18 | 2010-06-30 | 中兴通讯股份有限公司 | 一种实现i2c总线控制的系统及方法 |
CN102314403A (zh) * | 2011-08-26 | 2012-01-11 | 苏州佳世达电通有限公司 | 用于mcu作为从器件识别i2c总线信号的装置及方法 |
CN103856381A (zh) * | 2012-11-28 | 2014-06-11 | 苏州工业园区新宏博通讯科技有限公司 | 自动恢复热插拔i2c总线锁死的方法、装置和系统 |
CN105335328A (zh) * | 2015-10-30 | 2016-02-17 | 上海斐讯数据通信技术有限公司 | 一种背板i2c总线死锁的消除方法、系统及电子设备 |
CN110249319A (zh) * | 2018-01-09 | 2019-09-17 | 深圳市汇顶科技股份有限公司 | 处理i2c总线死锁的方法、电子设备和通信系统 |
CN109491946A (zh) * | 2018-11-12 | 2019-03-19 | 郑州云海信息技术有限公司 | 一种用于i2c总线扩展的芯片和方法 |
CN111061587A (zh) * | 2019-12-12 | 2020-04-24 | 浪潮商用机器有限公司 | 一种i2c总线的通信控制方法、装置、设备及存储介质 |
Non-Patent Citations (1)
Title |
---|
"关于I2C总线死锁恢复的研究";韩琳;《科技创业期刊》;20100115;第22卷(第10期);214-215 * |
Also Published As
Publication number | Publication date |
---|---|
CN111538626A (zh) | 2020-08-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20110208885A1 (en) | Data bus control method and apparatus | |
US10169282B2 (en) | Bus serialization for devices without multi-device support | |
CN106598891B (zh) | 集成电路间i2c总线系统中的从设备报警信号 | |
US8103896B2 (en) | Method and system for I2C clock generation | |
US7788431B2 (en) | Dynamic I2C slave device address decoder | |
US8489786B2 (en) | Acknowledgement management technique for supported command set of SMBUS/PMBUS slave applications | |
CN111538626B (zh) | 一种从i2c设备解挂死的方法 | |
EP1311959B1 (en) | Bidirectional repeater using high and low threshold detection | |
CN103092175B (zh) | I2c主设备与从设备之间串行时钟线scl控制的方法及装置 | |
US7558902B2 (en) | Bus to MCU bridge | |
CN205959200U (zh) | 用于i2c总线数据传输的锁存电路 | |
US7761637B2 (en) | Slave device with latched request for service | |
CN112003954B (zh) | 数据通信方法、数据通信系统及计算机可读存储介质 | |
US7353300B2 (en) | Apparatus to improve the firmware efficiency for a multiframe serial interface | |
WO2005119448A1 (en) | Error recovery scheme for i2c slave | |
JP2019096960A (ja) | 伝送装置及び伝送方法 | |
CN112214343B (zh) | 一种基于pca9511芯片的iic挂死的链路恢复电路及方法 | |
JP2018514873A (ja) | 集積回路間の通信 | |
CN110750374A (zh) | 一种看门狗电路及其控制方法 | |
CN110377135B (zh) | 一种psu的管理方法、系统及装置 | |
TW202121183A (zh) | 積體電路匯流排即時偵測連接狀態的裝置及方法 | |
CN111005892B (zh) | 自适应风扇电路、系统、电子设备及风扇检测方法 | |
US10909047B2 (en) | Flash memory control device capable of detecting type of interface and method thereof | |
WO2020237635A1 (zh) | 接口组件、芯片及电子设备 | |
JP2002063080A (ja) | インターフェース装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20210728 Address after: 610000 Room 101, floor 1, building 2, No. 11, Tianying Road, hi tech Zone, Chengdu, Sichuan Applicant after: Chengdu Rongbo Communication Technology Co.,Ltd. Address before: 611731 No.1, 3 / F, building 7, No.199, West District Avenue, high tech Zone (West District), Chengdu, Sichuan Applicant before: DIPPER OPTICS TECHNOLOGY Ltd. |
|
TA01 | Transfer of patent application right | ||
GR01 | Patent grant | ||
GR01 | Patent grant |