您好,欢迎访问三七文档
特点3线(SDA,SCL,GND),同步,半双工,多主机,短距离。连接到相同总线的IC数量只受到总线的最大电容400pF限制,并可以通过中继器增加器件数量。四种工作模式:MasterTransmitter;MasterReceiver;SlaveTransmitter;SlaveReceiver。三种速度模式低速模式(标准模式,S):100kbps;快速模式(F):400kbps;高速模式(Hs):3.4Mbps。总线时序各种状态:起始(S)/重启(Sr),地址(ADDR),读/写(R/W),响应(ACK),数据(DATA),结束(P)。起始/重启:SCL为高时,SDA由高到低结束:SCL为高时,SDA由低到高数据:位传输:SDA线上的数据必须在时钟的高电平期间保持稳定,数据线的高或低电平状态只有在SCL线的时钟信号是低电平时才能改变。字节传输:MSBFirst,每个字节必须为8位,每次传输可以发送的字节数量不受限制。每个字节后必须跟一个响应位。响应:响应位的产生原则是谁接收谁响应。在响应的时钟脉冲期间,接收器必须进行响应。将SDA线拉低以产生ACK信号,表明接受输入;拉高表示NACK,表明拒绝输入。主机在传输完最后一个字节后,可以不产生ACK信号而直接产生停止信号。时钟同步与总线仲裁:当总线上存在多主机同时工作的时候,就需要进行时钟同步和总线仲裁。同步的目的是让总线上工作的器件按照一致的时钟进行数据收发。同步是在SCL上实现的,总线的SCL高电平时间长度由所有工作主机中高电平时间最短的一方决定,而低电平时间由低电平时间最长一方决定。任何时间上只能有一个主机获得总线控制权,总线的仲裁是在SDA上实现的。在其他主机发送低电平时,发送高电平的主机将因失去总线控制权而需要断开它的数据输出级,因为总线上的电平与它自己的发出的电平不相同。失去总线控制权的主机需要立刻转入Slave模式,以防当前被寻址器件就是它。仲裁不能在以下情况下进行:寻址包括7位地址和10位地址两种。7位地址中,0x0000XXX和0x1111XXX两组地址为系统保留地址,用于完成特殊任务,不能给特定的器件使用。实际能用的地址只有112个。10位寻址和7位寻址兼容,而且可以结合使用。10位寻址采用了保留的0x1111XXX作为起始条件S或重复起始条件Sr的后第一个字节的头7位,但是只使用了0x11110XX共4个组合,剩下的4个组合0x11111XX保留给以后增强的I2C总线。主机发送器用10位地址寻址从机接收器并写入数据(如无数据段则仅为寻址)主机接收器用10位地址寻址从机发送器并读取数据快速模式Hs时间对于负载最大是200pF的总线,每条总线的上拉器件可以是一个电阻;而对于负载在200pF~400pF之间的总线,上拉器件可以是一个电流源(最大值3mA)或者是一个开关电阻电路。Hs模式主机器件有一个SDAH信号的开漏输出缓冲器和一个在SCLH输出的开漏极下拉和电流源上拉电路。器件以高电平和低电平是1:2的比率产生一个串行时钟信号,解除了建立和保持时间的时序要求仲裁过程只在前期的F/S模式中进行,而不在Hs模式中进行。I2C接口EEPROM的操作软复位寻址器件寻址:根据Philips的分配,EEPROM器件的地址统一为0x1010XXX,因此总线上最多可以挂接8个EEPROM器件。内部寻址:AT24C00存储器有128bit(16Byte)空间,只需要使用一个字节的低四位进行内部寻址。但是它在器件寻址期间,不比较XXX位,因此当有它存在时,总线上无法挂接其他EEPROM器件,而且总线上只能有一个AT24C00。AT24C01/2只使用一个字节的内部地址即可完成所有存储单元的的寻址;AT24C04/8需要9/10位地址,除了使用一个字节用于内部寻址外,还借用1/2位的器件地址作为片内存储器的分页地址,组成9/10位的内部地址。AT24C16/32/64/128/256/512需要11~16位地址,无法继续通过借用器件地址的方式来扩展寻址范围,因此需要使用2个字节作为内部存储器的地址,并且根据地址位数不同,首字节的部分高位将会无效。AT24C1024需要17位地址,在使用2个字节作为内部寻址同时,与AT24C04一样,借用了器件地址的一位作为内部分页。读写操作单字节写入:使用写入方式寻址器件后,继续写入1~2字节的内部存储器地址,及一个字节数据,随后产生停止条件,完成单字节写入。S,DeviceAddress+W,WordAddress,OneByteData,P页写入:与单字节写入类似,只是数据量不是一个字节,而是多个字节,在写入完成前不产生停止条件。页写入的最大数据量由器件的页大小决定,超过页容量后将会回滚而不是翻页,后续的数据会从页的开始地址写入,直至覆盖之前写入的数据。S,DeviceAddress+W,WordAddress,NBytesData,P读当前地址:直接使用读取方式进行器件寻址,寻址后器件会从当前内部地址开始发送数据,如果主机在接受到数据后不产生NACK或者P条件,期间将会继续发送后续数据直至收到NACK或者P条件。S,DeviceAddress+R,NBytesData,P随机读取:使用写入方式对器件进行寻址后,只写入1~2字节的内部存储器地址,但不写入数据,然后产生Sr条件,然后进入读当前地址的模式。S,DeviceAddress+W,WordAddress,Sr,DeviceAddress+R,NBytesData,P与页写入不同,读取时,只要不产生NACK或者P,器件就会一直输出后续数据,在跨页时进行翻页操作,只有在超过器件的寻址空间后,才会进行回滚操作。ACK查询:在总线写入数据后,EEPROM将启动内部写入时序,在此期间将不会继续接收总线上的数据,也不会对数据进行ACK,因此主机需要启动ACK查询。查询方法为:S,DeviceAddress+R/W,S,DeviceAddress+R/W,S,。。。直到接收到ACK为止,才能进行后续的读/写操作。在ACK查询过程中的R/W信号,就是后续操作的方向。
本文标题:I2C总线协议笔记
链接地址:https://www.777doc.com/doc-2877618 .html