CN108920401B - 多主多从的i2c通信方法、系统及节点设备 - Google Patents
多主多从的i2c通信方法、系统及节点设备 Download PDFInfo
- Publication number
- CN108920401B CN108920401B CN201810563128.7A CN201810563128A CN108920401B CN 108920401 B CN108920401 B CN 108920401B CN 201810563128 A CN201810563128 A CN 201810563128A CN 108920401 B CN108920401 B CN 108920401B
- Authority
- CN
- China
- Prior art keywords
- port
- data
- bus
- sent
- sending
- 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
- 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
-
- 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/10—Program control for peripheral devices
- G06F13/105—Program control for peripheral devices where the programme performs an input/output emulation function
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2213/00—Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F2213/0016—Inter-integrated circuit (I2C)
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Transfer Systems (AREA)
- Small-Scale Networks (AREA)
Abstract
本发明涉及了一种多主多从的I2C通信方法、系统及节点设备,该节点设备,通过I2C总线与其它节点设备相连,所述节点设备包括内置I2C模块的MCU,且所述MCU具有SDA口、SCL口、第一IO口和第二IO口,其特征在于,所述第一IO口与所述SDA口相连,所述第二IO口与所述SCL口相连,而且,所述MCU,用于通过所述SDA口、SCL口接收数据,而且,在需要发送数据时,按照I2C时序生成数据帧,并通过所述第一IO口和所述第二IO口发送数据。实施本发明的技术方案,节点设备即使在模式切换时,或,在主模式下发送数据时,都可接收到其它处于主模式的节点设备发给自己的数据,因此,不会丢失数据。
Description
技术领域
本发明涉及串行通信领域,尤其涉及一种多主多从的I2C通信方法、系统及节点设备。
背景技术
现有集成电路(IC)之间通讯接口中,I2C(Inter-Integrated Circuit)是一种应用极为广泛的总线方式,I2C总线是PHLIPS公司推出的一种串行总线,I2C总线只有两根双向信号线:一根是SDA数据线,另一根是SCL时钟线。
在实际应用中,I2C总线只占用两个IO脚,时序简单,因此,绝大多数MCU都内置了硬件的I2C模块。I2C模块只工作在主从模式中的其中一种,在多主多从的I2C系统中,通常要做一次切换,在切换的过程中以及作为主设备时,无法收到别的处于主模式的节点设备发给自己的数据,即,可能会丢数据。
发明内容
本发明要解决的技术问题在于,针对现有技术的上述可能丢数据的缺陷,提供一种多主多从的I2C通信方法、系统及节点设备。
本发明解决其技术问题所采用的技术方案是:构造一种节点设备,通过I2C总线与其它节点设备相连,所述节点设备包括内置I2C模块的MCU,且所述MCU具有SDA口、SCL口、第一IO口和第二IO口,所述第一IO口与所述SDA口相连,所述第二IO口与所述SCL口相连,而且,
所述MCU,用于通过所述SDA口、SCL口接收数据,而且,在需要发送数据时,按照I2C时序生成数据帧,并通过所述第一IO口和所述第二IO口发送数据。
优选地,所述MCU,还用于在需要发送数据时,将所述第一IO口和所述第二IO口设置为输出接口;在不需要发送数据时,将所述第一IO口和所述第二IO口设置为输入接口。
优选地,还包括第一限流电阻和第二限流电阻,而且,所述第一IO口通过所述第一限流电阻与所述SDA口相连,所述第二IO口通过所述第二限流电阻与所述SCL口相连。
优选地,所述MCU,还用于在通过所述第一IO口和所述第二IO口发送数据时,还检测I2C总线上的电平是否与自身发送的电平相一致,若不一致,则停止发送数据。
优选地,所述MCU,还用于在需要发送数据时,先检测I2C总线是否空闲,并在空闲时通过所述第一IO口和所述第二IO口发送数据。
本发明还构造一种多主多从的I2C通信系统,其特征在于,包括多个以上所述的节点设备。
本发明还构造一种多主多从的I2C通信方法,包括以下步骤:
通过SDA口、SCL口接收数据;
在需要发送数据时,按照I2C时序生成数据帧,并通过第一IO口和第二IO口发送数据,其中,所述第一IO口与所述SDA口相连,所述第二IO口与所述SCL口相连。
优选地,还包括:
在需要发送数据时,将所述第一IO口和所述第二IO口设置为输出接口;在不需要发送数据时,将所述第一IO口和所述第二IO口设置为输入接口。
优选地,在通过所述第一IO口和所述第二IO口发送数据时,还进行以下步骤:
检测I2C总线上的电平是否与自身发送的电平相一致;
若不一致,则停止发送数据,并延时一随机时段,重新通过所述第一IO口和所述第二IO口发送数据。
优选地,通过第一IO口和第二IO口发送数据的步骤,包括:
先检测I2C总线是否空闲;
若空闲,则通过所述第一IO口和所述第二IO口发送数据;
若不空闲,则延时一随机时段,然后重新检测I2C总线是否空闲,直至空闲时才通过所述第一IO口和所述第二IO口发送数据。
实施本发明的技术方案,对于节点设备,其MCU内置的I2C模块一直处于从模式的工作状态,即,一直被动等待来自其它处于主模式的节点设备发送的数据,并通过SDA口、SCL口接收I2C总线上的数据。而当有数据需要主动发出时,会同时处于从模式和主模式,即,既可以通过SDA口、SCL口接收I2C总线上的数据,又可以通过GPIO软件模拟I2C时序生成数据帧,然后通过第一IO口和第二IO口将数据发送至I2C总线上。这样的话,节点设备即使在模式切换时,或,在主模式下发送数据时,都可接收到其它处于主模式的节点设备发给自己的数据,因此,不会丢失数据。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。附图中:
图1是本发明节点设备中MCU实施例一的结构图;
图2是本发明多主多从的I2C通信系统实施例一的结构图;
图3是本发明多主多从的I2C通信方法实施例一的流程图。
具体实施方式
图1是本发明节点设备实施例一的结构图,在I2C通信系统中,各个节点设备通过I2C总线相连,I2C总线包括SDA数据线及SCL时钟线。而且,I2C通信系统中的任一设备都具备两种模式(角色):主(Master)模式、从(Slave)模式。
在该实施例中,节点设备包括MCU10,该MCU10具有四个IO口P1、P2、P3、P4,且MCU10内置I2C模块,其中,第三IO口P3为SCL口,第四IO口P4为SDA口。第一IO口P1与SDA口P4相连,且一并接SDA数据线,第二IO口P2与SCL口P3相连,且一并接SCL时钟线。而且,MCU10用于通过SDA口P4、SCL口P3接收数据,而且,在需要发送数据时,按照I2C时序生成数据帧,并通过第一IO口P1和第二IO口P2发送数据。
实施该实施例的技术方案,对于节点设备,其MCU内置的I2C模块一直处于从模式的工作状态,即,一直被动等待来自其它处于主模式的节点设备发送的数据,并通过SDA口P4、SCL口P3接收I2C总线上的数据,因此,没必要把CPU的运行时间消耗在这里,直接用内置在MCU内的I2C硬件模块接收,处理中断即可。而当有数据需要主动发出时,会同时处于从模式和主模式,即,既可以通过SDA口P4、SCL口P3接收I2C总线上的数据,又可以通过GPIO软件模拟I2C时序生成数据帧,然后通过第一IO口P1和第二IO口P2将数据发送至I2C总线上。这样的话,节点设备即使在模式切换时或在主模式下发送数据时,都可接收到其它处于主模式的节点设备发给自己的数据,因此,不会丢失数据。
进一步地,在一个可选实施例中,MCU10还用于在需要发送数据时,将第一IO口P1和第二IO口P2设置为输出接口;在不需要发送数据时,将第一IO口P1和第二IO口P2设置为输入接口。在该实施例中,在不需要发送数据时,也会将第一IO口P1和第二IO口P2设置为输入接口,这样可尽量减少对I2C总线上的干扰。
进一步地,在一个可选实施例中,该节点设备还包括第一限流电阻和第二限流电阻,而且,第一IO口P1通过第一限流电阻与SDA口P4相连,第二IO口P2通过第二限流电阻与SCL口P3相连。
在一个可选实施例中,MCU10还用于在通过第一IO口P1和第二IO口P2发送数据时,还检测I2C总线上的电平是否与自身发送的电平相一致,若不一致,则停止发送数据。进一步地,在停止发送数据后,延时一随机时段再重新发送。
在该实施例中,首先需说明I2C总线的仲裁机制:若有两个以上的节点设备同时处于主模式发送数据,则利用I2C总线的线与能力来做总线仲裁,I2C总线的两个引脚(SDA、SCL)均为漏极开路结构,它能实现信号的线与逻辑,即,电平0比电平1的优先级高,如果一节点设备发送电平0,其他节点设备发送电平1,那么,在I2C总线上电平的是电平0。基于此,节点设备在向I2C总线上发送数据的同时,还会检测I2C总线上的数据,然后判断检测到的电平是否与自身发送的电平相一致,若一致,则表示自己竞争总线成功,可继续发送;若不一致,则表示自己竞争总线失败,需要停止发送,延时一段时间后再次发送。
在一个可选实施例中,进一步地,MCU10还用于在需要发送数据时,先检测I2C总线是否空闲,并在空闲时通过第一IO口P1和第二IO口P2发送数据。在该实施例中,节点设备在主模式下通过I2C总线发送数据时,先要检测I2C总线是否空闲,只有在空闲时才能发送,若不空闲,就需等待一个随机延时(例如20-200ms),然后再检测I2C总线是否空闲,直到检测到I2C总线空闲才发送。
图2是本发明多主多从的I2C通信系统实施例一的结构图,该实施例的多主多从的I2C通信系统包括多个节点设备,节点设备的逻辑结构可参照前文所述,在此不做赘述。
图3是本发明多主多从的I2C通信方法实施例一的流程图,该实施例的多主多从的I2C通信方法应用在节点设备中,且包括以下步骤:
步骤S11.通过SDA口、SCL口接收数据;
步骤S12.在需要发送数据时,按照I2C时序生成数据帧,并通过第一IO口和第二IO口发送数据,其中,所述第一IO口与所述SDA口相连,所述第二IO口与所述SCL口相连。
在该实施例中,首先说明的是,步骤S11和步骤S12并无顺序关系。结合图1,对于节点设备,其MCU内置的I2C模块一直处于从模式的工作状态,即,一直被动等待来自其它处于主模式的节点设备发送的数据,并通过SDA口P4、SCL口P3接收I2C总线上的数据,因此,没必要把CPU的运行时间消耗在这里,直接用内置在MCU内的I2C硬件模块接收,处理中断即可。而当有数据需要主动发出时,会同时处于从模式和主模式,即,既可以通过SDA口P4、SCL口P3接收I2C总线上的数据,又可以通过GPIO软件模拟I2C时序生成数据帧,然后通过第一IO口P1和第二IO口P2将数据发送至I2C总线上。这样的话,节点设备即使在模式切换时或在主模式下发送数据时,都可接收到其它处于主模式的节点设备发给自己的数据,因此,不会丢失数据。
进一步地,在一个可选实施例中,本发明的多主多从的I2C通信方法还包括:
在需要发送数据时,将所述第一IO口和所述第二IO口设置为输出接口;在不需要发送数据时,将所述第一IO口和所述第二IO口设置为输入接口。
在该实施例中,在不需要发送数据时,也会将第一IO口P1和第二IO口P2设置为输入接口,这样可尽量减少对I2C总线上的干扰。
进一步地,在一个可选实施例中,在通过所述第一IO口和所述第二IO口发送数据时,还进行以下步骤:
检测I2C总线上的电平是否与自身发送的电平相一致;
若不一致,则停止发送数据,并延时一随机时段,重新通过所述第一IO口和所述第二IO口发送数据。
在该实施例中,基于I2C总线的仲裁机制,节点设备在向I2C总线上发送数据的同时,还会检测I2C总线上的数据,然后判断检测到的电平是否与自身发送的电平相一致,若一致,则表示自己竞争总线成功,可继续发送;若不一致,则表示自己竞争总线失败,需要停止发送,延时一段时间后再次发送。
进一步地,在一个可选实施例中,通过第一IO口和第二IO口发送数据的步骤,包括:
先检测I2C总线是否空闲;
若空闲,则通过所述第一IO口和所述第二IO口发送数据;
若不空闲,则延时一随机时段,然后重新检测I2C总线是否空闲,直至空闲时才通过所述第一IO口和所述第二IO口发送数据。
在该实施例中,节点设备在主模式下通过I2C总线发送数据时,先要检测I2C总线是否空闲,只有在空闲时才能发送,若不空闲,就需等待一个随机延时(例如20-200ms),然后再检测I2C总线是否空闲,直到检测到I2C总线空闲才发送。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何纂改、等同替换、改进等,均应包含在本发明的权利要求范围之内。
Claims (8)
1.一种节点设备,通过I2C总线与其它节点设备相连,所述节点设备包括内置I2C模块的MCU,且所述MCU具有SDA口、SCL口、第一IO口和第二IO口,其特征在于,所述第一IO口与所述SDA口相连,所述第二IO口与所述SCL口相连,而且,
所述MCU,用于通过所述SDA口、SCL口接收数据,而且,在需要发送数据时,按照I2C时序生成数据帧,并通过所述第一IO口和所述第二IO口发送数据,而且,在通过所述第一IO口和所述第二IO口发送数据时,还检测I2C总线上的电平是否与自身发送的电平相一致,若不一致,则停止发送数据,并延时一随机时段再重新发送。
2.根据权利要求1所述的节点设备,其特征在于,
所述MCU,还用于在需要发送数据时,将所述第一IO口和所述第二IO口设置为输出接口;在不需要发送数据时,将所述第一IO口和所述第二IO口设置为输入接口。
3.根据权利要求1所述的节点设备,其特征在于,还包括第一限流电阻和第二限流电阻,而且,所述第一IO口通过所述第一限流电阻与所述SDA口相连,所述第二IO口通过所述第二限流电阻与所述SCL口相连。
4.根据权利要求1所述的节点设备,其特征在于,
所述MCU,还用于在需要发送数据时,先检测I2C总线是否空闲,并在空闲时通过所述第一IO口和所述第二IO口发送数据。
5.一种多主多从的I2C通信系统,其特征在于,包括多个权利要求1-4任一项所述的节点设备。
6.一种多主多从的I2C通信方法,其特征在于,包括以下步骤:
通过SDA口、SCL口接收数据;
在需要发送数据时,按照I2C时序生成数据帧,并通过第一IO口和第二IO口发送数据,其中,所述第一IO口与所述SDA口相连,所述第二IO口与所述SCL口相连;
而且,在通过所述第一IO口和所述第二IO口发送数据时,还进行以下步骤:
检测I2C总线上的电平是否与自身发送的电平相一致;
若不一致,则停止发送数据,并延时一随机时段,重新通过所述第一IO口和所述第二IO口发送数据。
7.根据权利要求6所述的多主多从的I2C通信方法,其特征在于,还包括:
在需要发送数据时,将所述第一IO口和所述第二IO口设置为输出接口;在不需要发送数据时,将所述第一IO口和所述第二IO口设置为输入接口。
8.根据权利要求6所述的多主多从的I2C通信方法,其特征在于,通过第一IO口和第二IO口发送数据的步骤,包括:
先检测I2C总线是否空闲;
若空闲,则通过所述第一IO口和所述第二IO口发送数据;
若不空闲,则延时一随机时段,然后重新检测I2C总线是否空闲,直至空闲时才通过所述第一IO口和所述第二IO口发送数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810563128.7A CN108920401B (zh) | 2018-06-04 | 2018-06-04 | 多主多从的i2c通信方法、系统及节点设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810563128.7A CN108920401B (zh) | 2018-06-04 | 2018-06-04 | 多主多从的i2c通信方法、系统及节点设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108920401A CN108920401A (zh) | 2018-11-30 |
CN108920401B true CN108920401B (zh) | 2020-07-28 |
Family
ID=64410760
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810563128.7A Active CN108920401B (zh) | 2018-06-04 | 2018-06-04 | 多主多从的i2c通信方法、系统及节点设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108920401B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109977704B (zh) * | 2019-02-26 | 2023-02-14 | 武汉光迅科技股份有限公司 | 一种i2c总线访问权限的确定方法、装置及存储介质 |
CN111124979B (zh) * | 2019-10-31 | 2021-07-06 | 苏州浪潮智能科技有限公司 | 一种基于堆栈结构的i2c多主访问方法和系统 |
CN113312286A (zh) * | 2020-02-26 | 2021-08-27 | 北京君正集成电路股份有限公司 | 一种通过GPIO模拟i2c协议实现打印头温度检测的方法 |
CN114253898B (zh) * | 2021-12-27 | 2024-08-13 | 上海集成电路研发中心有限公司 | 总线装置及数据读写电路 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102314403A (zh) * | 2011-08-26 | 2012-01-11 | 苏州佳世达电通有限公司 | 用于mcu作为从器件识别i2c总线信号的装置及方法 |
CN103617138A (zh) * | 2013-12-16 | 2014-03-05 | 深圳市兴威帆电子技术有限公司 | 多主机仲裁方法及多主机通信系统 |
CN104834619A (zh) * | 2015-04-29 | 2015-08-12 | 小鸟科技有限公司 | 一种i2c总线电路、实现方法以及电子设备 |
CN105335328A (zh) * | 2015-10-30 | 2016-02-17 | 上海斐讯数据通信技术有限公司 | 一种背板i2c总线死锁的消除方法、系统及电子设备 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20050076924A (ko) * | 2004-01-26 | 2005-07-29 | 삼성전자주식회사 | 양방향 통신이 가능한 i2c 통신시스템 및 그 방법 |
CN101539900B (zh) * | 2008-03-18 | 2011-08-24 | 英业达股份有限公司 | 解决具有相同定址地址的两i2c从属装置间产生冲突的装置 |
US8667204B2 (en) * | 2011-01-24 | 2014-03-04 | Rpx Corporation | Method to differentiate identical devices on a two-wire interface |
CN103777070B (zh) * | 2012-10-26 | 2016-08-03 | 苏州新宏博智能科技股份有限公司 | 具i2c总线竞争机制的机架式电表的通信方法 |
CN204576500U (zh) * | 2015-03-26 | 2015-08-19 | 广东欧珀移动通信有限公司 | 一种兼容i2c通信的usb通信电路和系统 |
CN106055505B (zh) * | 2016-05-20 | 2019-05-03 | 青岛海信宽带多媒体技术有限公司 | 光模块及光模块中数据的传输方法 |
-
2018
- 2018-06-04 CN CN201810563128.7A patent/CN108920401B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102314403A (zh) * | 2011-08-26 | 2012-01-11 | 苏州佳世达电通有限公司 | 用于mcu作为从器件识别i2c总线信号的装置及方法 |
CN103617138A (zh) * | 2013-12-16 | 2014-03-05 | 深圳市兴威帆电子技术有限公司 | 多主机仲裁方法及多主机通信系统 |
CN104834619A (zh) * | 2015-04-29 | 2015-08-12 | 小鸟科技有限公司 | 一种i2c总线电路、实现方法以及电子设备 |
CN105335328A (zh) * | 2015-10-30 | 2016-02-17 | 上海斐讯数据通信技术有限公司 | 一种背板i2c总线死锁的消除方法、系统及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN108920401A (zh) | 2018-11-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108920401B (zh) | 多主多从的i2c通信方法、系统及节点设备 | |
US8103896B2 (en) | Method and system for I2C clock generation | |
US10339093B2 (en) | USB interface using repeaters with guest protocol support | |
CN102855169B (zh) | 根据有限信息的顺应性模式检测 | |
KR101750672B1 (ko) | 가상의 gpio | |
US10204065B2 (en) | Methods and apparatus for a multiple master bus protocol | |
US9918147B2 (en) | Transmission apparatus and transmission method | |
US6260092B1 (en) | Point to point or ring connectable bus bridge and an interface with method for enhancing link performance in a point to point connectable bus bridge system using the fiber channel | |
JP2021531569A (ja) | ディスプレイポートオルタネートモード通信の検出 | |
CN113424164B (zh) | USB 2.0转接驱动器和eUSB2中继器中的功耗降低 | |
US20220206983A1 (en) | Low Power Embedded USB2 (eUSB2) Repeater | |
CN112269749B (zh) | I2c通信系统 | |
JP7069931B2 (ja) | 回路装置、電子機器及びケーブルハーネス | |
CN114911743B (zh) | Spi从机设备、spi主机设备和相关的通信方法 | |
US10891242B2 (en) | Embedded USB2 (eUSB2) repeater operation | |
TWI528161B (zh) | 資料傳輸系統以及資料傳輸方法 | |
CN103885910A (zh) | 多设备在主模式下进行iic通信的方法及系统 | |
WO2021150653A1 (en) | Eusb2 to usb 2.0 data transmission with surplus sync bits | |
WO2012171582A1 (en) | Resolving address conflicts in a bus system | |
CN112817895B (zh) | 一种基于gpio的通信方法 | |
CN112363962B (zh) | 数据通信方法、系统、电子设备及计算机存储介质 | |
CN117222994A (zh) | 使用共享时钟和专用数据线的i2c总线架构 | |
KR20200057158A (ko) | 클록 장애를 복원하는 수신 장치 및 이를 포함하는 전송 시스템 | |
WO2023159415A1 (en) | Adaptive low-power signaling to enable link signal error recovery without increased link clock rates | |
CN116467243A (zh) | 基于i2c协议的通信方法、设备及系统 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |