集成电路互连总线I2C

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

集成电路互连总线I2C主要内容1.1I2C总线通用知识1.2I2C总线的硬件相关术语与典型电路1.3I2C总线数据通信协议概要1.4主机向从机读/写1个字节数据的过程1.5关于I2C的进一步讨论1.1I2C总线通用知识1.1.1I2C总线的历史概况与特点I2C(Inter-IntegratedCircuit)总线标准的历史概况1992年PHILIPS首次发布I2C总线规范Version1.01998年PHILIPS发布I2C总线规范Version2.0,至此标准模式和快速模式的I2C总线已经获得了广泛应用,标准模式传输速率为100kbps,快速模式400kbps。同时,I2C总线也由7位寻址发展到10位寻址,满足了更大寻址空间的需求2001年PHILIPS又发布了I2C总线规范Version2.1,完善和扩展了I2C总线的功能,并提出了传输速率可达3.4Mbps的高速模式,这使得I2C总线能够支持现有及将来的高速串行传输,如EEPROM和Flash存储器等I2C总线特点在硬件上,二线制的I2C串行总线使得各IC只需最简单的连接,而且总线接口都集成在IC中,不需另加总线接口电路I2C总线还支持多主控(multi-mastering)串行的8位双向数据传输位速率在标准模式下可达100kbps,快速模式下可达400kbps,高速模式下可达3.4Mbps连接到相同总线的IC数量只受到总线最大电容(400pf)的限制。但如果在总线中加上82B715总线远程驱动器可以把总线电容限制扩展十倍,传输距离可增加到15m1.2I2C总线的硬件相关术语与典型电路I2C总线硬件相关术语主机(主控器):在I2C总线中,提供时钟信号,对总线时序进行控制的器件从机(被控器):在I2C系统中,除主机外的其它设备均为从机地址:每个I2C器件都有自己的地址,以供自身在从机模式下使用发送器:发送数据到总线的器件接收器:从总线接收数据的器件SDA(SerialDAta):串行数据线SCL(SerialCLock):串行时钟线I2C总线的典型电路下图给出一个由MCU作为主机,通过I2C总线带3个从机的单主机I2C总线系统。这是最常用、最典型的I2C总线连接方式I2C总线的典型连接1.3I2C总线数据通信协议概要I2C总线上数据的有效性I2C总线以串行方式传输数据,从数据字节的最高位开始传送,每个数位在SCL上都有一个时钟脉冲相对应。在一个时钟周期内,当时钟线高电平时,数据线上必须保持稳定的逻辑电平状态,高电平为数据1,低电平为数据0。当时钟信号为低电平时,才允许数据线上的电平状态变化I2C总线上数据的有效性I2C总线上的信号类型开始信号(START):如下(图1)当SCL为高电平时,SDA由高电平向低电平跳变,产生开始信号。当总线空闲的时候(例如没有主动设备在使用总线,即SDA和SCL都处于高电平),主机通过发送开始信号(START)建立通信停止信号(STOP):如下(图1)当SCL为高电平时,SDA由低电平向高电平的跳变,产生停止信号。主机通过发送停止信号,结束时钟信号和数据通信。SDA和SCL都将被复位为高电平状态重新开始信号(RepeatedSTART):在I2C总线上,由主机发送一个开始信号启动一次通信后,在首次发送停止信号之前,主机通过发送重新开始信号,可以转换与当前从机的通信模式,或是切换到与另一个从机通信。如下(图1)所示,当SCL为高电平时,SDA由高电平向低电平跳变,产生重新开始信号,它的本质就是一个开始信号图1:开始、重新开始和停止信号应答信号(A):接收数据的IC在接收到8位数据后,向发送数据的IC发出的特定的低电平脉冲。每一个数据字节后面都要跟一位应答信号,表示已收到数据I2C总线的应答信号I2C总线上数据传输格式一般情况下,一个标准的I2C通信由四部分组成:开始信号、从机地址传输、数据传输和结束信号。I2C总线上传送的每一个字节均为8位,首先发送的数据位为最高位,每传送一个字节后都必须跟随一个应答位,每次通信的数据字节数是没有限制的;在全部数据传送结束后,由主机发送停止信号,结束通信I2C总线的数据传输格式I2C总线寻址约定为了消除I2C总线系统中主控器与被控器的地址选择线,最大限度地简化总线连接线,I2C总线采用了独特的寻址约定,规定了起始信号后的第一个字节为寻址字节,用来寻址被控器件,并规定数据传送方向。在I2C总线系统中,寻址字节由被控器的7位地址位(D7~D1位)和一位方向位(D0位)组成。方向位为0时,表示主控器将数据写入被控器,为1时表示主控器从被控器读取数据。主控器发送起始信号后,立即发送寻址字节,这时总线上的所有器件都将寻址字节中的7位地址与自己器件地址比较。如果两者相同,则该器件认为被主控器寻址,并发送应答信号,被控器根据数据方向位(R/W)确定自身是作为发送器还是接收器。1.4主机向从机读/写1个字节数据的过程主机向从机写1个字节数据的过程主机要向从机写1个字节数据时,主机首先产生START信号,然后紧跟着发送一个从机地址,这个地址共有7位,紧接着的第8位是数据方向位(R/W),0表示主机发送数据(写),1表示主机接收数据(读),这时候主机等待从机的应答信号(ACK),当主机收到应答信号时,发送要访问的地址,继续等待从机的响应信号,当主机收到响应信号时,发送1个字节的数据,继续等待从机的响应信号,当主机收到响应信号时,产生停止信号,结束传送过程。主机向从机写数据主机从从机读1个字节数据的过程当主机要从从机读1个字节数据时,主机首先产生START信号,然后紧跟着发送一个从机地址,注意此时该地址的第8位为0,表明是向从机写命令,这时候主机等待从机的应答信号(ACK),当主机收到应答信号时,发送要访问的地址,继续等待从机的应答信号,当主机收到应答信号后,主机要改变通信模式,所以主机发送重新开始信号,然后紧跟着发送一个从机地址,注意此时该地址的第8位为1,表明将主机设置成接收模式开始读取数据,这时主机等待从机的应答信号,当主机收到应答信号时,就可以接收1个字节的数据,当接收完成后,主机发送非应答信号,表示不再接收数据,主机进而产生停止信号,结束传送过程。主机从从机读数据*AW60的I2C模块寄存器AW60的I2C模块相关寄存器寄存器名称缩写地址访问权限基本功能地址寄存器I2C1A0x00000058读/写设置从机地址分频寄存器I2C1F0x00000059读/写设置I2C模块的工作频率等控制寄存器I2C1C0x0000005A读/写设置传输格式、中断使能等状态寄存器I2C1S0x0000005B读/写表明I2C模块的工作状态数据I/O寄存器I2C1D0x0000005C读/写收发数据I2C地址寄存器I2C地址寄存器(I2CAddressRegister,I2C1A)D7~D1—ADR7~ADR1为MCU作为从机时的从机地址。当主机在I2C总线上发送从机地址寻址从机,MCU作为从机设备时,将该地址与I2C1A的高7位比较,查看自己是否被主机选中D0—保留位。该位是为了将来的兼容性而设置的保留位,读出总是0。写I2C1A时,D0位不使用数据位D7D6D5D4D3D2D1D0数据地址0/不用复位00000000I2C分频寄存器I2C分频寄存器(I2CFrequencyDividerRegister,I2C1F)用于产生相应的分频因子I2C分频寄存器的高2位MULT定义了增频因子a,a和SCL的分频因子配合使用,产生I2C波特率。当MULT为00、01、10时,a的值分别为1、2、4;MULT=11不使用I2C的低6位定义了I2C时钟速率(ICR),这6位用来定义SCL分频因子b和SDA保持值,分频因子b乘以增频因子a的值用于产生I2C总线波特率,公式如下:I2C总线波特率=CPU总线频率(Hz)/(a×b)SDA保持时间是从SCL线上时钟的下降沿开始到SDA线上数据稳定这段时间,SDA保持值就是用来计算SDA保持时间的,公式如下:SDA保持时间=CPU总线周期×SDA保持值数据位D7D6D5D4D3D2D1D0定义MULTICR复位00000000ICR中不同的内容对应着不同的SCL分频因子值和不同的SDA保持值,下面举例说明I2C总线波特率和SDA保持时间计算方法设CPU总线频率为8MHz,MULT设置为01(a=2),要想得到100kbps的I2C总线波特率,则计算过程如下:根据公式:I2C总线波特率=CPU总线频率(Hz)/(a×b),将已知相应值带入得:100000=8000000/(2×b),b=40根据SCL分频因子b的值,在表10-2中查找相应的ICR值和SDA保持值,可以看到,当b=40时,ICR=$07或$0B,而相应的SDA保持值=10或9根据公式:SDA保持时间=CPU总线周期×SDA保持值,算得:ICR=$07,SDA保持值=10时,SDA保持时间=1/8000000×10=1.25μsICR=$0B,SDA保持值=9时,SDA保持时间=1/8000000×9=1.125μs较长的SDA保持时间,会降低通信速率,但同时也增加了稳定性,并且能延长设备间的通信距离。编程时应以通信的可靠性为原则,选择合适的SDA保持时间来确定ICR值。如程序中选用SDA保持值=9,就能得到可靠的通信,那么将ICR设定为$0B即可;如果当SDA保持值=9时通信不稳,就选择另一个为10的值进行实验,若通信仍不稳定,在保持I2C总线频率不变的前提下,可通过改变MULT位来调整SDA保持时间I2C控制寄存器I2C控制寄存器(I2CControlRegister,I2C1C)D7—I2CEN(I2CEnable)为I2C使能位D6—I2CIE(I2CInterruptEnable)为I2C中断请求允许位D5—MST(MasterModeSelect)为主模式选择位D4—TX(TransmitModeSelect)为发送模式选择位D3—TXAK(TransmitAcknowledgeEnable)为发送应答使能位D2—RSTA(RepeatSTART)位,当MCU在主机模式下,向该位写1,将产生一个重新开始信号。该位读出时总是0D1~D0—读I2C1C时,D1、D0位为0;写I2C1C时,D1、D0位不使用数据位D7D6D5D4D3D2D1D0定义I2CENI2CIEMSTTXTXAK0/RSTA0/不用0/不用复位00000000I2C状态寄存器I2C状态寄存器(I2CStatusRegister,I2C1S)D7—TCF(TransferCompleteFlag)为发送完成标志位D6—IAAS(AddressedasaSlave)为地址被选择标志位D5—BUSY(BusBusy)为总线忙标志位D4—ARBL(ArbitrationLost)为仲裁丢失标志位D3—读I2C1S时,D3位为0;写I2C1S时,D3位不使用D2—SRW(SlaveRead/Write)为从机读写标志位D1—I2CIF(I2CInterruptFlag)为I2C中断标志位。I2CIF位可读可写D0—RXAK(ReceiveAcknowledge)为接收应答标志位数据位D7D6D5D4D3D2D1D0读TCFIAASBUSYARBL0SRWI2CIFRXAK写未定义未定义未定义未定义未定义复位00000000I2CI/O数据寄存器I2CI/O数据寄存器(I2CDataI/ORegister,I2C1D)在主机发送模式下,将数据写入I2C1D就初始化了数据发送,先发送数据字节的最高位。在主机接收模式下,读该寄存器,准备接收从机发往总线上的数据字节。该寄存器在MCU为从机模式时仍具有相同功能。值得注意的是,当MCU要从主接收模式变为主发送模式时,应在从I2C1D寄存器读取数据之前,进行模式转换。数据位D7D6D5D4D3D2D1

1 / 25
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功