一种基于广播方式来查找I2C设备地址的方法与流程

文档序号:12068360阅读:1984来源:国知局

本发明涉及I2C通信领域,具体说是一种基于广播方式来查找I2C设备地址的方法。



背景技术:

I2C(Inter-Integrated Circuit)总线是一种由PHLIPS公司开发的两线式总线,用于连接微控制器及其外围设备。I2C总线产生于80年代,最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个组件状态的通信,其主要优点是简单性和有效性。由于接口直接设置在组件之上,因此I2C总线占用的空间非常小,能够有效减少电路板空间和芯片管脚数量,降低了设备之间的互联成本。其另一个优点是支持多主控,其中任何能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。如今,I2C通讯方式在嵌入式系统技术领域应用越来越多,越来越广。

I2C总线支持任何IC生产过程(NMOS、CMOS、双极性),两线(即串行数据SDA和串行时钟SCL线)在连接到总线的器件间传递信息。每个器件都有一个唯一的地址识别,而且都可以作为一个发送器或接收器。器件在执行数据传输时也可以被看作是主机(Master,即主I2C设备)或从机(Slave,即从I2C设备),主机是初始化总线的数据传输并产生允许传输的时钟信号的器件,此时,任何被寻址的器件都被认为是从机。

I2C总线数据传输时,SCL线为高电平时,SDA线若保持稳定,那么SDA上是在传输数据bit;若SDA发生跳变,则用来表示一个会话的开始(SDA由高电平向低电平跳变)或结束(SDA由低电平向高电平跳变);SCL线为低电平时,SDA线才能改变传输的数据bit。主机每发送完8bit数据后等待从机的应答(ACK),即在第9个时钟clock,若从机发送应答(ACK),SDA线会被拉低,若从机没有响应应答(ACK),则SDA线会被置高,将引起主机发生RESTART或STOP流程。

I2C总线的数据传输过程基本过程为:主机发出开始信号;主机接着送出1字节的从机地址信息,其中最低位为读写控制码(1为读、0为写),高7位为从机器件地址代码;从机发出认可信号(ACK);主机开始发送信息,每发完一字节后,从机发出认可信号给主机;主机发出停止信号,结束输出传输过程。

I2C总线上主机写从机寄存器的标准流程为:

1.主机发起START

2.主机发送I2C addr(7bit)和W操作0(1bit),等待从机ACK

3.从机发送ACK

4.主机发送reg addr(8bit),等待从机ACK

5.从机发送ACK

6.主机发送data(8bit),即要写入寄存器中的数据,等待从机ACK

7.从机发送ACK

8.第6步和第7步可以重复多次,即写多个寄存器

9.主机发起STOP

I2C总线上主机读从机寄存器的标准流程为:

1.主机发送I2C addr(7bit)和W操作1(1bit),等待从机ACK

2.从机发送ACK

3.主机Master发送reg addr(8bit),等待从机ACK

4.从机发送ACK

5.主机发起START

6.主机发送I2C addr(7bit)和R操作1(1bit),等待从机ACK

7.从机发送ACK

8.从机发送data(8bit),即寄存器里的值

9.主机发送ACK

10.第8步和第9步可以重复多次,即顺序读多个寄存器

因此大多数基于I2C通信协议进行通信的设备都包括主机和从机,如果主机不知道其从机的地址,则无法完成主机与指定从机的通信。在I2C通信过程中,由于从I2C的地址可变,在没有保存的情况下,就会发生I2C地址丢失,导致难以再建立通信连接,因此目前急需一种主机查找从机I2C地址的方法。



技术实现要素:

针对丢失从I2C地址的问题,本发明的目的在于提供一种基于广播的方式来查找I2C地址的方法,通过广播的方式设置一个临时的地址给从I2C,然后通过该地址跟从I2C通信,从而得到真正的从I2C地址,进而可以进行正常的通信。

本发明提供了一种基于广播方式来查找I2C设备地址的方法,包括以下步骤:

步骤1,将需要查找地址的I2C设备作为从I2C设备,主I2C设备通过广播命令方式将临时虚拟地址发送给所述从I2C设备;

步骤2,该从I2C设备启用通过广播命令获得的所述临时虚拟地址;

步骤3,所述主I2C设备使用所述临时虚拟地址读取所述从I2C设备原来所使用的真实地址;

步骤4,所述主I2C设备使用所述临时虚拟地址将从I2C设备的地址设置为原来所使用的真实地址。

在上述技术方案中,在所述步骤1之前将所述从I2C设备与所述主I2C设备单独组网。

在上述技术方案中,所述步骤1中所述主I2C设备向从I2C设备发送的广播命令中包括有待设置给从I2C设备的临时虚拟地址。

在上述技术方案中,所述步骤1中的广播命令的格式为:

起始位+广播地址(W)+寄存器地址(2bytes)+寄存器内容(2bytes)+结束位

其中,寄存器地址为对应存放临时虚拟地址的寄存器序号;寄存器内容为给所述从I2C设备分配的临时虚拟地址。

在上述技术方案中,所述步骤3中,所述主I2C设备向所述从I2C设备发出的读取命令的格式为:

起始位+设备地址1(W)+寄存器地址(2bytes)+起始位+设备地址2(R)+寄存器内容(2bytes)+结束位

其中,设备地址1和设备地址2为临时虚拟地址;寄存器地址为所述从I2C设备中存放有原来所使用的真实地址的寄存器序号;寄存器内容为等待从I2C设备应答的寄存器内容。

在上述技术方案中,所述步骤4中,所述主I2C设备通过设置命令将从I2C设备的地址设置为从I2C设备原来所使用的真实地址。

在上述技术方案中,所述设置命令的格式为:

起始位+设备地址(W)+寄存器地址(2bytes)+寄存器内容(2bytes)+结束位

其中,设备地址为临时虚拟地址;寄存器地址为复位寄存器的寄存器序号;寄存器内容为从I2C设备原来所使用的真实地址。

本发明取得了以下技术效果:本发明能够通过发广播的方式虚拟一个地址给从I2C,并且通过该虚拟地址来找到真正的从I2C地址,方法简单有效;本发明还可以提供一种基于上述方法的I2C通信系统,该系统结构简单,没有添加任何外部辅助设备,能够简单快速的获取从机地址,成本低廉,易于操作,适于广泛推广。

附图说明

图1为本发明的方法执行流程图。

具体实施方式

为了便于本领域普通技术人员理解和实施本发明,下面结合附图及具体实施方式对本发明作进一步的详细描述。

由此,本发明提供的一种基于广播的方式来查找I2C地址的方法,包含以下几个步骤:

0.将需要查找地址/确认地址的I2C设备作为从I2C设备与主I2C设备单独组网,使该I2C总线上仅有主I2C设备和需要查找地址/确认地址的I2C设备。

1.主I2C设备通过广播方式将临时虚拟地址发送给从I2C设备。

主I2C设备向I2C总线上的从I2C设备发送广播命令,广播命令中包含主I2C设备发给从I2C设备的虚拟地址A,格式如下:

起始位+广播地址(W)+寄存器地址(2byte)+寄存器内容(2byte)+结束位

其中,寄存器地址对应存放虚拟的I2C地址寄存器序号,例如0x28;寄存器内容存放临时给从I2C设备分配的虚拟地址A。

从I2C设备寄存器地址分配规划举例如下:

2.从I2C设备启用通过广播命令获得的临时虚拟地址,即从I2C设备接收到该广播命令后就自动将寄存器内容中的虚拟地址A作为从I2C设备的地址(即,从I2C设备根据接收到的广播命令将寄存器地址(如步骤1中的举例,此处为0x28)的内容修改为由广播命令发送来的虚拟I2C地址,并将其作为自己的I2C地址);

3.主I2C设备发送普通读取命令给从I2C设备,格式如下:

起始位+设备地址1(W)+寄存器地址(2)+起始位+设备地址2(R)+寄存器内容(2)+结束位

此时的设备地址1和设备地址2就是在步骤2中刚刚设置的虚拟地址A;寄存器地址是从I2C设备上存放原来真实I2C地址的寄存器地址(如步骤1中的举例,此处为0x29);该寄存器内容就是从I2C设备返回给主I2C设备的其原来真实I2C地址B。通过该读取命令,主I2C设备利用虚拟地址A读取从I2C设备之前所使用的真实I2C地址(即真实地址B)。

4.主I2C设备发送设置命令给从I2C设备,将其地址设置为真实I2C地址,格式如下:

起始位+设备地址(W)+寄存器地址(2)+寄存器内容(2)+结束位

在发送此命令时,使用的设备地址为虚拟I2C地址(即虚拟地址A),写入的寄存器地址为复位寄存器(如步骤1中的举例,此处为0x30),寄存器内容为真实I2C地址B。

5.此时主I2C设备可以使用从I2C设备原有地址与从I2C设备进行正常通信。

由于此时已经正确获得从I2C设备原来所使用的地址(真实地址B),可将将可将从I2C设备接入原来的/或其他新的I2C总线上正常使用。

在此过程中省略了通信过程中从I2C设备接收到主I2C设备命令后,对主I2C设备命令的正常ACK响应。

以上实施例仅为本发明的一种实施方式,其描述较为具体和详细,但不能因此而理解为对本发明专利范围的限制。其具体地址/内容分配和命令应答可根据实际需要进行相应的调整。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1