一看就懂——DIY单片机开发板教程
I2C 总线的数据传送格式是:在I2C 总线开始信号后,送出的第一个字节数据是用来选择从器件地址的,其中4-7 位为器件码,如1010 就是代表串行E2PROM器件。1-3 位为存储器的片选地址或存储器内的块地址码,如何区分?后面再做详细说明,第8 位为方向位(R/W)。方向位为"0"表示发送,即主器件把信息写到所选择的从器件;方向位为"1"表示主器件将从从器件读信息。开始信号后,系统中的各个器件将自己的地址和主器件送到总线上的地址进行比较,如果与主器件发送到总线上的地址一致,则该器件即为被主器件寻址的器件,其接收信息还是发送信息则由第8 位(R/W)确定。
一个字节的写操作的过程:首先器件发出起始信号后,发送器件识别控制字节,即1010A2A1A00(最低位置0,即R/W 读写控制位为低电平0),然后等待应答信号指示从器件被寻址。再发送一个AT24CXX 存储器将要写入的位置地址。再次等待AT24CXX 应答信号以后,将发送数据字节,AT24CXX 接收到后写入到刚刚指定的存储器地址。然后主器件再次等待AT24CXX 的应答信号。主器件最后发出停止信号。
在I2C 总线上每次传送的数据字节数不限,但每一个字节必须为8 位,而且每个传送的字节后面必须跟一个认可位(第9 位),也叫应答位(ACK)。数据的传送过程如图所示。每次都是先传最高位,通常从器件在接收到每个字节后都会作出响应,即释放SCL 线返回高电平,准备接收下一个数据字节,主器件可继续传送。如果从器件正在处理一个实时事件而不能接收数据时,(例如正在处理一个内部中断,在这个中断处理完之前就不能接收I2C 总线上的数据字节)可以使时钟SCL 线保持低电平,从器件必须使SDA 保持高电平,此时主器件产生1个结束信号,使传送异常结束,迫使主器件处于等待状态。当从器件处理完毕时将释放SCL 线,主器件继续传送。
当主器件发送完一个字节的数据后,接着发出对应于SCL 线上的一个时钟(ACK)认可位,在此时钟内主器件释放SDA 线,一个字节传送结束,而从器件的响应信号将SDA 线拉成低电平,使SDA 在该时钟的高电平期间为稳定的低电平。从器件的响应信号结束后,SDA 线返回高电平,进入下一个传送周期。I2C 总线还具有广播呼叫地址用于寻址总线上所有器件的功能。若一个器件不需要广播呼叫寻址中所提供的任何数据,则可以忽略该地址不作响应。如果该器件需要广播呼叫寻址中提供的数据,则应对地址作出响应,其表现为一个接收器。
5.总线竞争的仲裁总线上可能挂接有多个器件,有时会发生两个或多个主器件同时想占用总线的情况。例如,多单片机系统中,可能在某一时刻有两个单片机要同时向总线发送数据,这种情况叫做总线竞争。I2C 总线具有多主控能力,可以对发生在SDA 线上的总线竞争进行仲裁,其仲裁原则是这样的:当多个主器件同时想占用总线时,如果某个主器件发送高电平,而另一个主器件发送低电平,则发送电平与此时SDA 总线电平不符的那个器件将自动关闭其输出级。总线竞争的仲裁是在两个层次上进行的。首先是地址位的比较,如果主器件寻址同一个从器件,则进入数据位的比较,从而确保了竞争仲裁的可靠性。由于是利用I2C 总线上的信息进行仲裁,因此不会造成信息的丢失。
器件说明:
AT24CXXX 系列引脚图如下
现在我先来说说AT24CXX 的具体使用
假设用AT89S51 的P0.0 做SDA 总线,P0.1 做SCL 总线。有若干个I2C 器件挂接在SDA 和SCL 总线上。
现在要对E2PROM_01 存储器进行写字节操作看看它是如何找到的。
上面说过在发送完一个开始信号后接着发送一个字节的器件识别信号。这一个字节的4-7 位就是器件识别码。1010 就是对应E2PROM 器件,其它器件就不再理会了。1-3 位是器件的物理地址,也就是说如果是E2PROM,它可以在I2C 总线上挂接(000-111)8 个E2PROM。在这里就得详细说说AT24CXX 上的A0,A1,A2 和这个器件识别字节之间的关系了。上面说过存储器的寻址范围是一个字节,也就256 个,AT24C02 的存储容量为256 字字,刚刚好将一个字节的地址用完。器件电路上A0,A1,A2 三个管脚通过接高电平或低电平来和AT89S51 发送过来的器件识别控制字节相匹配,从而得以识别出AT89S51 将要操作的那个存储器。现在AT24C04 的容量是512 个字节,那不是一个字节的地址不够用了吗?其实它是将512 个字节为成两个页,每页256 字节,而页地址就是器件识别控制字节的1 位。前面说了这个1-3 位不是和器件上的A0,A1,A2 匹配来识别器件的吗?是的,但存储器容量超过256
下一篇:Optosafe将把Quanergy公司的LiDAR传感器集成进入产品——Opto-Q-Guard快速部署视频监视塔
- 单片机在电源设计中的应用(06-07)
- 基于单片机的锅炉液位控制装置设计(07-22)
- 基于SPWM的交流稳压电源设计方案(09-15)
- 基于单片机的电池保护电路系统设计(02-24)
- 晶闸管三相全控桥式整流电路的直流电源设计(02-08)
- 智能充电设备控制系统的硬件设计方案(02-14)