版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一节I2C串行总线介绍一、I2C基本特性和总线结构
如图10一1所示为I2C总线的结构图。由图可知,I2C总线由两根双向I/O线SDA(串行数据)和SCL(串行时钟)构成,它们通过上拉电阻连接到正电源,因此在总线空闲时,两根线都是高电平。连接到I2C总线上的器件的输出级应该为开漏输出或集电极开路输出结构,以提供“线与”功能,这就是说连接到总线上的任何器件只要在信号线上输出“0",信号线就得到低电平,要让信号线得到高电平,必须挂在总线上的所有器件都信号线。下一页返回第一节I2C串行总线介绍连接到总线上的器件数量仅仅受限于最高为400pF的总线负载电容信息时,可以假定每个外围设备和它连线将带来总共20pF的电容。“释放”该当缺乏相关在图10一1中,我们还看到每一个挂在总线上器件的IZC引脚接口必须是双向的。发送器使用SDA向总线上发数据,接收器使用SDA接收总线上的数据;主机通过SCL输出电路发送时钟信号,同时本身的接收电路还要检测总线上SCL的电平状态,以决定下一步的动作;从机的SCL输入电路用于接收总线时钟,并在SCL控制下向SDA发出或从SDA上接收数据。另外,当数据接收器暂时无法接收更多的数据时,它也可以通过将SCL拉低(输出0)来延长总线周期,迫使数据发送者等待,直到SCL被重新释放上一页下一页返回第一节I2C串行总线介绍二、I2C总线时序与数据传输
1.I2C上的位传输由于连接于I2C总线上的芯片可以采用不同的技术(CMOS,NMOS、双极),这决定了逻辑“0"(LOW)和“1"(THIGH)的电平也不尽相同,它们取决于系统的电源电压VD。I2C为每个传输的二进制位产生一个时钟脉冲,并规定时钟的高电平期间,SDA上的数据必须保持稳定不变。只有在时钟的低电平期间,才可以改变SDA数据线上的高低电平值,图10一2所示上一页下一页返回第一节I2C串行总线介绍2.起始信号和停止信号I2C总线使用起始信号来启动一次数据传输,通知从机准备接收数据;当数据传输结束时,主机发送停止信号,通知从机停止接收。因此,一次数据传输的整个过程从起始信号开始,到停止信号结束同时,这两个信号也是启动和关闭IZC设备的信号如图10-3所示,为I2C总线中的起始信号和停止信号时序。由图可知,SCL的高电平期间,SDA由高电平到低电平的跳变称为起始信号;SCL的高电平期间,SDA由低电平到高电平的跳变称为停止信号。起始信号和停止信号总是由主机产生的。上一页下一页返回第一节I2C串行总线介绍
3.I2C的数据传输在I2C总线的数据传输过程中,发送到SDA信号线上的数据必须以字节为单位,每个字节必须为8位,而且是高位在前,低位在后,每次发送数据的字节数量不受限制。当发送方发送完每一个字节后,都必须等待接收方返回一个应答信号ACK,如图10-4所示上一页下一页返回第一节I2C串行总线介绍三、I2C总线寻址与通信过程
1.7位寻址由于I2C总线是支持多机通信的数据总线,所有设备都直接连接于同一个总线,它没有像SPI总线那样的从机选择信号。为了区分各个设备,挂接于I2C总线上的从机设备或器件都有一个唯一独立的地址,以便于主机寻访
I2C总线的寻址过程是在发送起始信号后,发送一个用于选择从机设备的地址字节,用于选择总线中的一个从机设备,通知其参与同主机之间的数据通信。上一页下一页返回第一节I2C串行总线介绍在所有地址中有一个地址用于寻址所有器件,称为广播地址,使用这个地址时,理论上所有器件都会发出一个响应。但是,也可以使器件忽略这个地址。广播地址后的第二个字节定义了要采取的动作,这个过程的具体细节可参考《I2C总线规范》,这里不作深入介绍。地址字节的格式如图10一5所示,该字节的高7位数据是主机呼叫的从机地址,最低位(LSB)用于标示紧接下来数据的传输方向,"0”表示主机会写数据到选中的从机(主机发送/从机接收),"1”表示主机会向从机读取数据(主机接收/从机发送)。上一页下一页返回第一节I2C串行总线介绍
2.数据通信过程如图10一6所示为在I2C的操作—主机向从机读取1互转换与控制SDA的过程总线上一次完整数据传输过程的实例,字节—I2C总线上的时序变化,SDA它给出了实现一个简单上的发送、接收双方相上一页返回第二节AVR的TWI接口与使用一、TWI模块概述AVR的TWI模块由总线接口单元、比特率发生器、地址匹配单元和控制单元等几个子模块构成,如图10-7所示。图中所有位于粗线方框中的寄存器都可以通过数据总线进行读/写。1.SCL和SDA引脚SCL与SDA为MCU的TWI接口引脚。引脚的输出驱动器包含一个波形斜率限制器以满足TWI规范。引脚的输入部分包括尖峰抑制单元以去除小于50ns的毛刺。当相应的端口设置为SCL与SDA引脚时,可以使能I/O口内部的上拉电阻,这样可省掉外部的上拉电阻下一页返回第二节AVR的TWI接口与使用
2.比特率发生器
TWI工作于主机模式时,比特率发生器控制时钟信号SCL的周期。具体由TWI状态寄存器TWSR的预分频系数以及比特率寄存器TWBR设定。当TWI工作在从机模式时,不需要对比特率或预分频进行设定,但从机的CPU时钟频率必须大于TWI时钟线SCL频率的16倍。注意,从机可能会延长SCL低电平的时间,从而降低TWI总线的平均时钟周期。上一页下一页返回第二节AVR的TWI接口与使用3.总线接口单元该单元包括数据与地址移位寄存器TWDR,START/STOP控制器和总线仲裁判定硬件电路。TWDR寄存器用于存放发送或接收的数据与地址。除了8位的TWDR,总线接口单元还有一个寄存器,包含了用于发送或接收应答的nACK。这个nACK寄存器不能由程序直接访问。当接收数据时,它可以通过TWI控制寄存器TWCR来置位或清零;在发送数据时,nACK值由TWCR的设置决定图10一7AVR的TWI模块结构图上一页下一页返回第二节AVR的TWI接口与使用4.地址匹配单元地址匹配单元将检测从总线上接收到的地址是否与TWAR寄存器中的7位地址相匹配如果TWAR寄存器的TWI广播应答识别使能位TWICE为“1",从总线接收到的地址也会与广播地址进行比较。一旦地址匹配成功,控制单元将得到通知以进行正确地响应。TWI可以响应,也可以不响应主机的寻址,这取决于TWCR寄存器的设置。即使MCU处于休眠状态时,地址匹配单元仍可继续工作。一旦主机寻址到这个器件,就可以将MCU从休眠状态唤醒。在TWI由于地址匹配将MCU从掉电状态唤醒期间,如有其他中断发生,TWI将放弃操作,并返回到空闲状态。如果这会引起其他问题,那么在进入掉电休眠模式之前需要确保贝右TWT上一页下一页返回第二节AVR的TWI接口与使用
5.控制单元控制单元监听TWI总线,并根据TWI控制寄存器TWCR的设置作出相应的响应。当TWI总线上产生需要应用程序干预处理的事件时,TWI中断标志位TWINT置位。在下一个时钟周期,TWI状态寄存器TWSR被表示这个事件的状态字所更新。在其他时间里,TWSR的内容为一个表示无事件发生的特殊状态字。一旦TWINT标志位置“1",时钟线SCL即被拉低,暂停TWI总线上的数据传输,让用户程序处理事件上一页下一页返回二、TWI寄存器本小节给出TWI模块相关寄存器的描述1.TWI波特率寄存器TWBR寄存器TWBR各位的定义如下:第二节AVR的TWI接口与使用上一页下一页返回
2.TWI控制寄存器TWCRTWCR用来控制TWI操作。例如使能TWI,通过在总线上施加START信号来启动主机访问,产生接收器应答,产生STOP信号,以及在写入数据到TWDR寄存器时控制总线的暂停等。在禁止访问TWDR期间,如试图将数据写入到TWDR时,要给出写入冲突标志寄存器TWCR各位定义如下:第二节AVR的TWI接口与使用上一页下一页返回3.TWI状态寄存器TWSR寄存器TWSR各位的定义如下:表10一1TWI比特率预分频器设置第二节AVR的TWI接口与使用上一页下一页返回4.TWI数据寄存器TWDR寄存器TWDR各位的定义如下:第二节AVR的TWI接口与使用上一页下一页返回5.TWI(从机)地址寄存器TWAR寄存器TWAR各位的定义如下:第二节AVR的TWI接口与使用上一页下一页返回6.TWI从机地址屏蔽寄存器TWAMR寄存器TWAMR各位定义如下:图10一8TWI地址匹配逻辑方框图第二节AVR的TWI接口与使用上一页返回第三节使用TWI总线
TWI总线接口的工作方式不同于AVR的其他硬件资源,它采用一种基于状态机的模式工作。所谓基于状态机的工作模式,是指整个通信过程被分成了若干状态,硬件系统的工作仅仅是在软件的控制下,在这些状态之间进行转换,通信任务的完成是通过一系列的状态转换完成的。在TWI总线接口中有一个TWSR寄存器,就是用于保存当前系统所处状态的使用TWI模块通信,就是软件读取TWSR获取系统状态,并根据需要执行的通信任务的,下达相应的命令,使之完成正确状态转换的过程下一页返回第三节使用TWI总线首先,我们回顾一下TWI总线数据的通信过程,根据本章第一节的介绍,发送1B的数据通信过程可以概括为这样几个阶段(没有考虑失败的情形):(1)主机发送START信号;(2)主机发送从机地址,SLA+W;(3)从机寻址成功,应答ACK信号;(4)主机发送一字节的数据;(5)从机成功接收,应答ACK信号;上一页下一页返回第三节使用TWI总线(6)主机发送STOP信号,结束一次数据传输其次,我们来看看AVR的TWI总线接口如何支持这样的通信过程。AVR的TWI是基于中断的硬件接口,在所有IZC(TWI)总线事件发生后,都将产生一个TWI中断,同时设置TWSR状态寄存器以表明当前通信状态。我们可以利用TWSR的状态信息,来决定下一步跳转到哪个状态。根据上面的分析后,我们得到如图10一9所示的处理过程图,可列出如表10-2所示程序代码及说明上一页返回第四节基干状态机的TWI通信模块一、控制TWI总线的基本操作TWI每完成一次总线操作,都会置位TWINT,发出中断请求。于是我们对TWI总线的操作都是在中断中按照状态机的思想进行的对于该中断处理程序,首先介绍其中一些TWI总线的基本操作的实现方法。1.发送START信号下一页返回第四节基干状态机的TWI通信模块将TWCR的TWSTA位置位后,就可启动TWI总线接口产生START信号了,但TWCR中其他几个二进制位设置的正确性,直接关系到TWI模块是否能够正确执行我们的要求,所以为了避免不必要的误操作,我们这行代码详细给出了TWCR中每个二进制设置的值置位TWEN的目的在于使能TWI总线接口,清零该位将导致关闭TWI总线接口;操作中避免将其与一字之差的TWEA位混淆;置位TWIE,打开TWI中断,使得START信号发送后,我们能在中断中响应该事件;向TWINT写“1”的目的是将该位清零,因为只有在清零TWINT后,TWI总线才会开始操作。上一页下一页返回第四节基干状态机的TWI通信模块
2.发送从机地址和收发数据在TWI总线通信过程中,从机地址的发送和数据的收发都是通过TWDR寄存器来实现的,所以要注意的是总线接口处于不同状态时,读写TWDR可能执行不同的操作,这在后面状态机的具体实现中将看到上一页下一页返回第四节基干状态机的TWI通信模块
3.发送STOP信号将TWST()置位,即可发送STOP信号,但要注意的是TWEN,TWINT位的设置,这与发送START信号时类似。因为STOP信号发送后,代表一次通信过程已经结束,所以这行代码中,清除了TWIE标志位,用于关闭TWI中断。采用发送START信号时,打开TWI中断,发送STOP信号时,关闭TWI中断的方式,使得我们可以很容易地判断TWI总线是否处于忙状态。只要TWI中断处于使能状态,表明通信正在进行,TWI关闭,就表明一次通信结束(结束不一定代表成功)。上一页下一页返回第四节基干状态机的TWI通信模块4.发送REPEATESTART信号这段代码表明上看是与上面发送START信号一样,但我们如果在主机丢失总线控制权时,执行这条语句,目的是让主机发送REPEATESTART信号,重新参与总线的竞争5.主机接收时.应答ACK
将TWEA置1,表示应答ACK,在主机作为接收器时,每接收到一个字节都需要回送应答信号,如果主机还要接收数据,需要应答ACK,接收最后一个字节时,需要应答nACK,这时需要清零标志TWEA。再次强调,不能将TWEN和TWEA混为一谈。如下代码,应答nACK_.上一页下一页返回第四节基干状态机的TWI通信模块二、TWI的工作状态及后续操作在编写具体中断处理代码前,先来看看AVR的TWI接口处于各个工作状态时所对应的各种状态字,以及下一步的操作和应用程序的配置方案,如表10一3、表10一4、表10一5、表10一6、表10一7所示。表中给出了TWI在4种不同模式下,如何根据TWI接口的状态寄存器TWSR所提供的状态值,了解如何操作TWDR和设置控制寄存器TWCR,进入下一个符合总线操作规范的全部各种可能出现的情况,是我们编写基于状态机的TWI通信模块的主要依据上一页下一页返回第四节基干状态机的TWI通信模块
三、建立主机模式下的TWI通信状态机在全面了解了AVR的TWI模块可能所处的状态,及后续应该执行的动作后,我们来尝试建立TWI在主机模式下的通信状态机。根据前面表格给出来的信息,很容易确定在主机模式下总共有哪些状态上一页下一页返回第四节基干状态机的TWI通信模块1.主机发送模式(1)状态码0x08(TWI_start);该状态下表明START信号已经发送。在TWI总线处于空闲状态时,一旦在外部置位TWSTA、清零TWINT后,一个START信号就将被发送到总线上,此时中断发生,进入该状态,这个时候,需要做的就是将要访问的从机地址送到寄存器TWDR中,并在该地址字节的最后一位上包含R/W标志,并且在这之后,通过向TWINT写1,清零TWINT位,总线开始送出从机地址上一页下一页返回第四节基干状态机的TWI通信模块(2)状态码0x10(TWI_RepStart);REPEATEDSTART信号已经发送。当上一“对话”完成以后,主机不想在放弃总线的情况下,进行下一次“对话”它就会在最后使用一个REPEATEDSTART信号替代放弃总线的控制权的STOP信号。当这一信号发送成功时,中断发送,进入该状态,没有特殊要求的情况下,通常这一状态的操作和状态TWI_Start相同。上一页下一页返回第四节基干状态机的TWI通信模块
(3)状态码0x18(TWI_MTXAddrAck);SLA+W已发送,接收到ACK。通常如果从机地址正确发送,同时被寻址的从机也作了ACK应答后,则会进入该状态。此时,需要做的就是发送第一个数据。当然,如果只是想确认下从机是否存在,而没有任何数据需要发送时,就可以发送STOP或者REPEATEDSTART信号了。上一页下一页返回第四节基干状态机的TWI通信模块(4)状态码0x28TWI_mrxdataack):数据已发送,接收到ACK。在成功发送了一个数据以后,从机在接收到数据以后,通常会做出应答,表示收到该数据同时愿意接收下一个数据。这时,如果还有数据需要发送,就继续发送数据;如果已经没有数据发送,通常发送一个STOP信号,结束整个“对话”。因此,这里的处理和(3)中的处理类似。所以将两个部分的代码结合在一起上一页下一页返回第四节基干状态机的TWI通信模块
(5)状态码0x20(TWI_MTXAddrNAck);SLA+W已发送,接收到nACK。通常在地址帧已经正确发送,但被寻址的从机没有做出应答时,进入该状态。这个时候虽然也可强行发送数据,但那也是没有意义的,从机将不会接收这些数据。在该状态下通常的做法是直接发送一个STOP信号,结束本次“对话”。也可在发送STOP信号,再立即发送START信号重新参与总线竞争,再次启动数据发送。上一页下一页返回第四节基干状态机的TWI通信模块(6)状态码0x30TWI_mrxdataack):数据已发送,接收到nACK,在我们成功发送数据以后,从机虽然接收到了数据,但是由于种种原因(例如从机内部接收缓冲区满了),无法继续接收数据,因此从机以NACK回应主机。在该状态下,通常的做法也是发送STOP信号结束本次通信也可在发送STOP信号后,立即发送START信号重新发送数据上一页下一页返回第四节基干状态机的TWI通信模块(7)状态码0x38('PEI_ArbLoet):仲裁失败,丢失总线控制权,就会进入该状态个状态也表示数据因为某种原因,发送失败了。为了简化处理,对以上三种情况的出现简单的关闭TWI模块,并且设置任务状态标志Ma.s.saoraError上一页下一页返回第四节基干状态机的TWI通信模块2.主机接收模式现在,再来看看主机接收模式下的各个可能状态,及对应的处理代码。(1)状态码0x08TWIchart);该状态下表明START信号已经发送。在TWI总线处于空闲状态时,一旦在外部置位TWSTA、清零TWINT后,一个START信号就将被发送到总线上,此时中断发生,进入该状态,这个时候,需要做的就是将要访问的从机地址送到寄存器TWDR中,并在该地址字节的最后一位上包含R/W标志,并且在这之后,通过向TWINT写1,清零TWINT位,总线开始送出从机地址。可以看出该状态与主机发送模式下的相同,因此主机发送和主机接收可用相同的代码。上一页下一页返回第四节基干状态机的TWI通信模块(2)状态码0x10(TWI_ReStart);REPEATEDSTART信号已经发送。当上一“对话”完成以后,主机不想在放弃总线的情况下,进行下一次“对话”它就会在最后使用一个REPEATEDSTART信号替代放弃总线的控制权的STOP信号。当这一信号发送成功时,中断发送,进入该状态,没有特殊要求的情况下,通常这一状态的操作和状态TWI一Start相同这里也与主机发送模式下相同。(3)状态码0x38(TWI_ArhLoet):仲裁失败,丢失总线控制权,就会进入该状态。这个状态也表示因为某种原因,数据接收失败。这里我们也与主机发送模式下一样,简单的关闭TWI模块,设置任务失败标志
上一页下一页返回第四节基干状态机的TWI通信模块
(4)状态码0x40(TWI_MRXAddrAck);SLA+R已经发送,接收到ACK。通常如果地址帧发送正确,同时被寻址的从机做出了应答,则会进入该状态。在该状态下,下一个总线周期是接收数据,如果要接收多于一个字节的数据,置位TWEA,清零TWINT,指示硬件发送ACK,如果只需接收一个字节的数据,则清零TWEA,TWINT,指示硬件发送NACK上一页下一页返回第四节基干状态机的TWI通信模块(5)状态码0x50TWI_mrxdataack):接收到数据,ACK已经返回。如果成功地接收到了数据,中断发生,就会进入这一状态,此时寄存器TWDR中保存的就是读取到的数据在读取这一数据的同时,应该判断是否下一个接收的字节是要接收的最后字节,如果是,就清零TWEA,告知从机,这将是最后一次读取数据了;否则,应该置位TWEA,告知从机继续正常发送,可见在该模式下,除了要保存TWDR中接收到的代码外,其他操作和TWIMRXAddrAck状态相同,因此写了如下的处理代码,注意。aseTWI_MRXDataAck分支没有break语句,而是共享TWI_MRXAddrAck的代码上一页下一页返回第四节基干状态机的TWI通信模块(6)状态码0x58TWI_mrxdataack):接收到数据,NACK已返回。这一状态专门用于读取最后一个字节数据。因此也是处理较为简单的状态之一。该状态将是主机接收模式的“最后一站”,需要发送STOP结束整个通信。
上一页下一页返回第四节基干状态机的TWI通信模块(7)状态码0x48(TWI_MRXAddrNAcl);该状态表示SLA+R已发送,接收到NACK通常在虽然地址发送正确,但是寻址的从机没有做出应答,这会进入该状态。为了简化处理,该状态,我们和主机发送模式一样,只是关闭TWI中断,并设置任务执行失败标志因此也可以共享发送部分错误状态的处理代码。上一页下一页返回第四节基干状态机的TWI通信模块四、TWI通信状态图根据前文描述.可以分别画出主机发送和主机接收的状态图.如图10一10和图10一11所示五、模块的实现为了让大家对整个状态机的实现有个更完整清晰的认识,下面列出整个通信模块的代码,供参考上一页下一页返回第四节基干状态机的TWI通信模块上一页下一页返回第四节基干状态机的TWI通信模块上一页下一页返回第四节基干状态机的TWI通信模块上一页下一页返回第四节基干状态机的TWI通信模块上一页下一页返回第四节基干状态机的TWI通信模块上一页下一页返回第四节基干状态机的TWI通信模块上一页下一页返回第四节基干状态机的TWI通信模块上一页下一页返回第四节基干状态机的TWI通信模块上一页下一页返回第四节基干状态机的TWI通信模块上一页下一页返回第四节基干状态机的TWI通信模块上一页下一页返回第四节基干状态机的TWI通信模块上一页下一页返回第四节基干状态机的TWI通信模块上一页下一页返回第四节基干状态机的TWI通信模块上一页下一页返回第四节基干状态机的TWI通信模块上一页下一页返回第四节基干状态机的TWI通信模块上一页下一页返回第四节基干状态机的TWI通信模块上一页下一页返回第四节基干状态机的TWI通信模块上一页下一页返回第四节基干状态机的TWI通信模块上一页下一页返回第四节基干状态机的TWI通信模块上一页返回第五节实例14存储器24C02的读写
1.准备知识
24CXX系列是一种应用非常广泛的I2C接口的EEPROM存储器芯片,很多半导体公司都有兼容的产品,这里我们用Atmel公司生产的AT24C02为例,说明如何使用ATmega48的TWI接口操纵I2C器件24CXX系列以存储容量作为命名的方式,例如,24CO1是指存储容量为1KB(也即1024B),24002的容量为2KB,240256为256KB。现代的制作工艺可以保证EEPROM有10万次以上的重复擦/写寿命,数据保存100年不丢失1)AT24C02的引脚功能
AT24C02的引脚分布如图10一12所示,其引脚功能说明见表10一8下一页返回第五节实例14存储器24C02的读写
表10一8中A0,A1,A2用于配置芯片的物理地址,它们的配置值将作为器件在I2C总线上从机地址的一部分
WP用作写保护引脚,当WP为高电平时,存储器处于写保护状态,所有的写入命令都将被器件忽略,只允许读出存储器的数据。WP在芯片的内部有下拉电阻,当外部悬空时,由于内部下拉电阻的作用,WP为低电平,器件处在可读写状态。因此在我们的实验中可将该脚悬空处理,但在实际应用中,WP应有单片机的I/0口线控制,以保证硬件写保护机制发挥作用上一页下一页返回第五节实例14存储器24C02的读写2)AT24C02的器件地址和片内存储器地址AT24C02在I2C总线上的地址格式如下:从机地址的高4位固定为1010,低3位由引脚A2,A1,AO在电路连接上的配置所决定,这使得同一个I2C总线上可以最多接8个AT24C02。若我们将A2,A1,AO全连接到低电平的话,从机写地址为OxAO,读地址为OxAlAT24C02内部的存储容量是256B,采用线性地址排列,地址空间为00H一FFH,因此24C02内部的存储器地址长度为8位,用1个字节表示。AT24C02在内部把256B的存储器划分成了32页,每页有8B。因此8位的地址可以看成由两个部分组成:高5位(A7一A3)表示页码(0一31),低3位(A2一AO)表示页内偏移上一页下一页返回第五节实例14存储器24C02的读写在AT24C02内部有一个8位的地址指针寄存器,里面保存着当前存储单元的地址,对AT24C02的读写,就是对该地址指针所指向的存储器单元进行操作。该地址指针寄存器也是非易失性的,断电后,其地址内容不会消失和改变。这个地址指针寄存器有一个重要特性,一旦对当前存储器单元进行了操作(读或写)后,地址指针的值会自动加1,指向下一个单元,这种机制使得我们可以对AT24C02进行连续的数据读写,而不用每次都设置操作的存储单元地址。但要注意的是在对AT24C02进行写入操作时,该地址指针只有低3位(页内偏移)参与加1变化,页码保持不变,也就是说,如果对一页的最后一个地址进行写操作后,下一次操作会“折回”到当前页面的第一个地址,而不会自动的加1到下一页的第一个地址。上一页下一页返回第五节实例14存储器24C02的读写因此数据的写入操作不能跨越不同的页面。例如00一07属于AT24C02的第一页的8B,在将数据写入到地址07H内后,下一次写入将写到00H处主机对AT24C02下发了从机写寻址字节(OxAO)后,紧跟的1B被认定为片内存储器地址,AT24C02将把该字节的内容作为新的地址,保存在内部的地址指针寄存器中。
3)对AT24C02的写操作对AT24C02进行写操作,就是将数据写入AT24C02的EEPROM中,写操作支持两种模式:字节写入为一次写入1B和页写入则允许一次写入操作最多达8B(1页)。图10一13和图10一14合为2中写入操作的时序图上一页下一页返回第五节实例14存储器24C02的读写从图中我们可以看到,数据写入的操作方式为:(I)主机先发送IB的从机写地址,外加IB的存储器片内地址信息(2)在发送完从机地址和存储器片内地址后,主机就可以发送数据字节。(3)AT24Q02每收到1B后,会根据IZC协议规范返回相应的应答信号(AQL)在AT24C02支持的两种写入模式下,开始的2B都是一样的,作用是重新设置AT24C02内部的地址指针,从第3B开始才是真正要写入片内EEPROM中的数据上一页下一页返回第五节实例14存储器24C02的读写在AT24C02检测到STOP信号后,便启动内部的数据写操作,把接收到的数据写到制定的地址单元中。AT24C02内部写EEPROM的操作需要一定的时间,约5ms(不同的芯片写入时间可能不一样,应该参考该芯片的数据手册)才能完成,在这期间24C256不响应主机的寻址(返回NACI)。因此,主机在写AT24C02的操作后,不要马上对它进行新的操作,要等待至少5ms后,再开始新的操作上一页下一页返回第五节实例14存储器24C02的读写另外,要特别注意的是,页写入方式不能跨页操作,如果要使用页写入方式,那么最好采用固定的起始地址配合固定的数据长度,例如,起始地址为每页的第1个单元,写入8B4)对AT24C02的读操作对AT24C02进行读操作,就是从AT24C02内的EEPROM中读取数据。如果已经完全理解了前面的对AT24C02的写操作过程,那么读取AT24C02的操作就比较简单了读AT24C02的上一页下一页返回第五节实例14存储器24C02的读写操作方式有3种:读当前地址单元中的数据,读指定地址单元中的数据,以及连续读多个地址单元中的数据)图10一15、图10一16和图10一17分别给出了3种读操作的过程上一页下一页返回第五节实例14存储器24C02的读写最基本的读方式实际上就是读取当前地址单元的数据,AT24C02收到主机下发的从机寻址字节(最低位为1),并给出应答ACK后,马上就将当前地址单元中的数据发送到主机,然后内部地址指针加1读指定地址单元数据的操作实际是设置地址指针操作与读当前地址单元数据操作的结合。而连续地址单元的读操作则是读当前地址单元数据操作的扩展连续读操作没有个数的限制,也没有不能跨页的限制。上一页下一页返回第五节实例14存储器24C02的读写在进行AT24C02读操作时注意,主机每读一字节,需要向AT24C02返回一个ACK应答,这样AT24C02才会继续发送下一个单元的数据,如果是主机接收的最后一个字节数据,应该返回NACK应答,告知AT24C02数据读结束,再接着发送STOP信号2.硬件电路本实例使用的芯片AT24C02本身的I2C接口功能很简单,因此它只能作为从机使用,ATmega48在这里允当主机,连接电路如图10一18所示上一页下一页返回第五节实例14存储器24C02的读写
I2C总线的硬件结构决定了使用它的时候SDA线和SCL线一定要加上拉电阻。上拉电阻不但决定了总线能否工作,也决定了总线所能达到的通信速度。虽然,ATmega48的数据手册上说单片机端口内建上拉电阻
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026江西九江一中招聘考试参考题库及答案详解
- 宜春经济技术开发区2026年公开选调中小学教师【18人】笔试模拟试题及答案详解
- 甘肃2026特岗教师招聘出了没考试参考题库及答案详解
- 2026年6月永修县农旅投资开发有限公司面向社会公开招聘工作人员考试参考题库及答案详解
- 2026年阿勒泰地区引进高层次和急需紧缺人才(45人)考试模拟试题及答案详解
- 2026年西安新城金色童年幼儿园教师招聘考试参考题库及答案详解
- 2026首都医科大学附属北京朝阳医院招聘14人(第三批)考试模拟试题及答案详解
- 2026云南保山市商务局开招聘城镇公益性岗位人员1人笔试模拟试题及答案详解
- 2026年上海市泾南中学储备教师教辅招聘考试模拟试题及答案详解
- 2026年甘肃省陇南市宕昌县官鹅沟旅游开发有限责任公司职业经理人招聘笔试备考试题及答案详解
- 上市公司关务管理制度
- 国家综合性消防救援队伍《处分条令》解读(讲稿)
- 中国邮政合同样本
- 代办手续合同标准文本
- 中医药治疗心脑血管疾病
- 诗词大会-飞花令大全
- 暨南大学《实验室安全知识》2021-2022学年第一学期期末试卷
- 食品安全应急管理和突发事故报告制度
- 医院培训课件:《静脉中等长度导管临床应用专家共识》
- 2023中国光大银行南京分行对公/零售信贷审批岗招聘笔试历年典型考题及考点剖析附带答案详解
- 湖北省仙桃、天门、潜江2025届高一下数学期末综合测试试题含解析
评论
0/150
提交评论