IC2总线协议之我所感悟
IIC通信协议总结

IIC通信协议一.概述二.硬件结构三:数据的传输开始和停止条件的确定:在I2C总线传输过程中,将两种特定的情况定义为开始和停止条件(见图3):当SCL保持“高”时,SDA由“高”变为“低”为开始条件;当SCL保持“高”且SDA由“低”变为“高”时为停止条件。
开始和停止条件均由主控制器产生。
使用硬件接口可以很容易地检测到开始和停止条件,没有这种接口的微机必须以每时钟周期至少两次对SDA取样,以检测这种变化。
传输注意事项:1.SDA线上的数据在时钟“高”期间必须是稳定的,只有当SCL线上的时钟信号为低时,数据线上的“高”或“低”状态才可以改变。
因此在IIC总线上胡数据传输过程中,数据信号线SDA的变化只能发生在SCL为低电平的期间内。
从上图中可以清楚的看到这一点。
响应信号ACK宽度为1位,紧跟在8个数据位后面,所以发送1字节的数据需要9个SCL时钟脉冲。
响应时钟脉冲也是由主机产生的,主机在响应时钟脉冲期间释放SDA线,使其处在高电平(见图16—3上面的信号)。
而在响应时钟脉冲期间,接收方需要将SDA拉低,使SDA在响应时钟脉冲高电平期间保持稳定的低电平(见图16—3中间结束的信号)。
低电平用ACK表示,代表有应答;高电平用nACK表示,代表无应答。
应答信号在I2C总线的数据传输过程中起着非常重要的作用,它将决定总线及连接在总线上设备下一步的状态和动作。
一旦在应答信号上发生错误,例如接收方不按规定返回或返回不正确的应答信号,以及发送方对应答信号的误判,都将造成总线通信的失败。
2.输出到SDA线上的每个字节必须是8位,高位在前,低位在后。
每次传输的字节不受限制,但每个字节必须要有一个应答ACK。
如果一接收器件在完成其他功能(如一内部中断)前不能接收另一数据的完整字节时,它可以保持时钟线SCL为低,以促使发送器进入等待状态;当接收器准备好接受数据的其它字节并释放时钟SCL后,数据传输继续进行。
3.数据传送具有应答是必须的。
I2C总线协议及工作原理

I2C总线和谈及工作道理I2C总线和谈及工作道理之杨若古兰创作一、概述1、I2C总线只要两根双向旌旗灯号线.一根是数据线SDA,另一根是时钟线SCL.SCL:上升沿将数据输入到每个EEPROM器件中;降低沿驱动EEPROM器件输出数据.(边沿触发)SDA:双向数据线,为OD门,与其它任意数量的OD与OC门成"线与"关系.I2C总线通过上拉电阻接正电源.当总线空闲时,两根线均为高电平(SDL=1;SCL=1).连到总线上的任一器件输出的低电平,都将使总线的旌旗灯号变低,即各器件的SDA及SCL都是线“与”关系.2、主设备与从设备零碎中的所有核心器件都具有一个7位的"从器件公用地址码",其中高4位为器件类型,由生产厂家拟定,低3位为器件引脚定义地址,由使用者定义.主控器件通过地址码建立多机通信的机制,是以I2C总线省去了核心器件的片选线,如许不管总线上挂接多少个器件,其零碎仍然为简约的二线结构.终端挂载在总线上,有主端和从端之分,主端必须是带有CPU的逻辑模块,在同一总线上同一时刻使能有一个主端,可以有多个从端,从端的数量受地址空间和总线的最大电容 400pF的限制.主端次要用来驱动SCL line;从设备对主设备发生呼应;二者都可以传输数据,但是从设备不克不及发起传输,且传输是受到主设备控制的.二、和谈1.空闲形态I2C总线总线的SDA和SCL两条旌旗灯号线同时处于高电平时,规定为总线的空闲形态.此时各个器件的输出级场效应管均处在截止形态,即释放总线,由两条旌旗灯号线各自的上拉电阻把电平拉高.2.起始位与停止位的定义:起始旌旗灯号:当SCL为高期间,SDA由高到低的跳变;启动旌旗灯号是一种电平跳变时序旌旗灯号,而不是一个电平旌旗灯号.停止旌旗灯号:当SCL为高期间,SDA由低到高的跳变;停止旌旗灯号也是一种电平跳变时序旌旗灯号,而不是一个电平旌旗灯号.起始和终止旌旗灯号都是由主机发出的,在起始旌旗灯号发生后,总线就处于被占用的形态;在终止旌旗灯号发生后,总线就处于空闲形态.接收器件收到一个完好的数据字节后,有可能须要完成一些其它工作,如处理内部间断服务等,可能没法立刻接收下一个字节,这时候接收器件可以将SCL线拉成低电平,从而使主机处于等待形态.直到接收器件筹办好接收下一个字节时,再释放SCL线使之为高电平,从而使数据传送可以继续进行.发送器每发送一个字节,就在时钟脉冲9期间释放数据线,由接收器反馈一个应对旌旗灯号. 应对旌旗灯号为低电平时,规定为无效应对位(ACK简称应对位),暗示接收器曾经成功地接收了该字节;应对旌旗灯号为高电平时,规定为非应对位(NACK),普通暗示接收器接收该字节没有成功.对于反馈无效应对位ACK的请求是,接收器在第9个时钟脉冲之前的低电平期间将SDA线拉低,而且确保在该时钟的高电平期间为波动的低电平. 如果接收器是主控器,则在它收到最初一个字节后,发送一个NACK旌旗灯号,以通知被控发送器结束数据发送,并释放SDA 线,以便主控接收器发送一个停止旌旗灯号P.如下图逻辑分析仪的采样结果:释放总线后,如果没有应对旌旗灯号,sda应当不断持续为高电平,但是如图中蓝色虚线部分所示,它被拉低为低电平,证实收到了应对旌旗灯号.这里面给我们的两个信息是:1)接收器在SCL的上升沿到来之前的低电平期间拉低SDA;2)应对旌旗灯号不断坚持到SCL的降低沿结束;正如前文红色标识所指出的那样.4.数据的无效性:I2C总线进行数据传送时,时钟旌旗灯号为高电平期间,数据线上的数据必须坚持波动,只要在时钟线上的旌旗灯号为低电平期间,数据线上的高电平或低电平形态才答应变更.5.数据的传送:在I2C总线上传送的每一名数据都有一个时钟脉冲绝对应(或同步控制),即在SCL串行时钟的配合下,在SDA上逐位地串行传送每一名数据.数据位的传输是边沿触发.工作过程总线上的所有通信都是由主控器激发的.在一次通信中,主控器与被控器老是在饰演着两种分歧的角色.主设备发送起始位,这会通知总线上的所有设备传输开始了,接上去主机发送设备地址,与这一地址匹配的slave将继续这一传输过程,而其它slave将会忽略接上去的传输并等待下一次传输的开始.主设备寻址到从设备后,发送它所要读取或写入的从设备的内部寄存器地址;以后,发送数据.数据发送终了后,发送停止位.(这段看不懂就别看了,没什么用)写入过程如下:发送起始位1)发送从设备的地址和读/写选择位;释放总线,等到EEPROM拉低总线进行应对;如果EEPROM接收成功,则进行应对;若没有握手成功或者发送的数据错误时EEPROM不发生应对,此时请求重发或者终止.2)发送想要写入的内部寄存器地址;EEPROM对其发出应对;3)发送数据4)发送停止位.5)EEPROM收到停止旌旗灯号后,进入到一个内部的写入周期,大概须要10ms,此间任何操纵都不会被EEPROM呼应具体:须要说明的是:①主控器通过发送地址码与对应的被控器建立了通信关系,而挂接在总线上的其它被控器虽然同时也收到了地址码,但因为与其本身的地址不符合合,是以提前退出与主控器的通信;2.主控器读取数据的过程:读的过程比较复杂,在从slave读出数据前,你必须先要告诉它哪个内部寄存器是你想要读取的,是以必须先对其进行写入(dummy write):1)发送起始位;2)发送slave地址+write bit set;3)发送内部寄存器地址;4)从头发送起始位,即restart;5)从头发送slave地址+read bit set;6)读取数据主机接收器在接收到最初一个字节后,也不会发出ACK 旌旗灯号.因而,从机发送器释放SDA线,以答应主机发出P旌旗灯号结束传输.7)发送停止位具体:2、数据传送格式(1)字节传送与应对每一个字节必须包管是8位长度.数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随一名应对位(即一帧共有9位).因为某种缘由从机分歧错误主机寻址旌旗灯号应对时(如从机正在进行实时性的处理工作而没法接收总线上的数据),它必须将数据线置于高电平,而由主机发生一个终止旌旗灯号以结束总线的数据传送.如果从机对主机进行了应对,但在数据传送一段时间后没法继续接收更多的数据时,从机可以通过对没法接收的第一个数据字节的“非应对”通知主机,主机则应发出终止旌旗灯号以结束数据的继续传送.当主机接收数据时,它收到最初一个数据字节后,必须向从机发出一个结束传送的旌旗灯号.这个旌旗灯号是由对从机的“非应对”来实现的.然后,从机释放SDA线,以答应主机发生终止旌旗灯号.(2)数据帧格式I2C总线上传送的数据旌旗灯号是广义的,既包含地址旌旗灯号,又包含真实的数据旌旗灯号.在起始旌旗灯号后必须传送一个从机的地址(7位),第8位是数据的传送方向位(R/),用“0”暗示主机发送数据(T),“1”暗示主机接收数据(R).每次数据传送老是由主机发生的终止旌旗灯号结束.但是,若主机但愿继续占用总线进行新的数据传送,则可以不发生终止旌旗灯号,马上再次发出起始旌旗灯号对另一从机进行寻址.在总线的一次数据传送过程中,可以有以下几种组合方式:a、主机向从机发送数据,数据传送方向在全部传送过程中不变:注:有暗影部分暗示数据由主机向从机传送,无暗影部分则暗示数据由从机向主机传送. A暗示应对,暗示非应对(高电平).S暗示起始旌旗灯号,P暗示终止旌旗灯号.b、主机在第一个字节后,立即由从机读数据c、在传送过程中,当须要改变传送方向时,起始旌旗灯号和从机地址都被反复发生一次,但两次读/写方向位正好反相.6、总线的寻址I2C总线和谈有明确的规定:采取7位的寻址字节(寻址字节是起始旌旗灯号后的第一个字节).(1)寻址字节的位定义D7~D1位构成从机的地址.D0位是数据传送方向位,为“0”时暗示主机向从机写数据,为“1”时暗示主机由从机读数据.主机发送地址时,总线上的每个从机都将这7位地址码与本人的地址进行比较,如果不异,则认为本人正被主机寻址,根据R/位将本人确定为发送器或接收器.从机的地址由固定部分和可编程部分构成.在一个零碎中可能但愿接入多个不异的从机,从机地址中可编程部分决定了可接入总线该类器件的最大数目.如一个从机的7位寻址位有4位是固定位,3位是可编程位,这时候仅能寻址8个同样的器件,即可以有8个同样的器件接入到该I2C总线零碎中.(2)寻址字节中的特殊地址固定地址编号0000和1111已被保存作为特殊用处.起始旌旗灯号后的第一字节的8位为“0000 0000”时,称为通用呼叫地址.通用呼叫地址的意图在第二字节中加以说明.格式为:第二字节为 06H(0110)时,所有能呼应通用呼叫地址的从机器件复位,并由硬件装入从机地址的可编程部分.能呼报命令的从机器件复位时不拉低SDA和SCL线,以避免堵塞总线.第二字节为 04H(0100)时,所有能呼应通用呼叫地址并通过硬件来定义其可编程地址的从机器件将锁定地址中的可编程位,但不进行复位.如果第二字节的方向位B为“1”,则这两个字节命令称为硬件通用呼叫命令.在这第二字节的高7位说明本人的地址.接在总线上的智能器件,如单片机或其他微处理器能识别这个地址,并与之传送数据.硬件主器件作为从机使用时,也用这个地址作为从机地址.格式为:在零碎中另一种选择可能是零碎复位时硬件主机器件工作在从机接收器方式,这时候由零碎中的主机先告诉硬件主机器件数据应送往的从机器件地址,当硬件主机器件要发送数据时就可以直接向指定从机器件发送数据了.(3)起始字节起始字节是提供给没有I2C总线接口的单片机查询I2C 总线时使用的特殊字节.不具备I2C总线接口的单片机,则必须通过软件不竭地检测总线,以便及时地呼应总线的请求.单片机的速度与硬件接口器件的速度就出现了较大的不同,为此,I2C总线上的数据传送要由一个较长的起始过程加以引诱.引诱过程由起始旌旗灯号、起始字节、应对位、反复起始旌旗灯号(Sr)构成.请求访问总线的主机发出起始旌旗灯号后,发送起始字节(0000 0001),另一个单片机可以用一个比较低的速率采样SDA线,直到检测到起始字节中的7个“0”中的一个为止.在检测到SDA线上的高电平后,单片机就可以用较高的采样速率,以便寻觅作为同步旌旗灯号使用的第二个起始旌旗灯号Sr.在起始旌旗灯号后的应对时钟脉冲仅仅是为了和总线所使用的格式分歧,其实不请求器件在这个脉冲期间作应对.总线数据传送的模拟。
I2C总线——总结

I2C总线——总结I2C总线是一种串行数据通信协议,用于连接集成电路之间进行通信。
它由Phillips公司于1982年首次提出,并在随后的几十年中得到广泛应用和发展。
I2C总线采用两根线(SDA和SCL)进行通信,具有简单、高效的特点,适用于较短距离的通信。
首先,I2C总线的架构包括两个主要组成部分:主设备和从设备。
主设备通常是微控制器或其他控制器,负责发起和控制通信。
从设备是主设备的外围设备,例如传感器、电池芯片、存储器等。
主设备通过发送信号来控制从设备,并接收从设备发送的响应信号。
在I2C通信中,数据以字节为单位传输,每个字节都包含8位。
通信的起始由主设备发起,并发送设备地址标识。
从设备必须匹配该地址才能进入通信状态。
在通信过程中,主设备发送读取或写入指令,然后发送或接收数据。
每个数据字节都由从设备发送确认信号,以确保数据的准确接收。
除了基本的读写操作,I2C总线还支持一些高级功能,例如时钟同步、主从模式切换和热插拔功能。
这些功能使得I2C总线适用于各种应用场景,包括电子设备、通信系统、工业控制和汽车电子等。
然而,尽管I2C总线具有许多优点,但也存在一些限制和挑战。
首先,I2C总线在传输速度方面不如其他通信协议(如SPI和CAN)。
其次,长距离传输可能受到电压下降、信号失真和干扰等因素的影响。
此外,I2C总线的主设备需要额外的控制逻辑和处理能力,这可能增加系统的复杂性和成本。
综上所述,I2C总线是一种非常常用和实用的串行通信协议。
它具有简单、高效的特点,适用于较短距离的设备间通信。
通过多主机配置和高级功能支持,I2C总线可以满足各种应用的需求。
然而,需要根据具体的应用场景和要求来选择合适的通信协议,以确保系统的性能和可靠性。
I2C总线和SPI总线总结

I2C总线和SPI总线总结I2C(Inter-Integrated Circuit)总线是一种由Philips公司于1982年推出的串行通信协议。
它是一种双线制协议,使用两根线(一根为时钟线SCL,另一根为数据线SDA)进行通信。
其中SCL由主设备控制,用于发送时钟信号,而SDA用于双向数据传输。
其中,每个设备都有唯一的地址,可以由主设备选择通信。
I2C总线支持多主设备操作,即多个主设备可以对同一总线上的多个从设备进行通信。
1.速度较低:I2C总线的速度通常在100kHz、400kHz、1MHz等级,相对于其他总线来说较低。
这使得I2C总线适合用于较短距离的通信和低速设备。
2.优秀的设备兼容性:I2C总线的主设备可以与各种不同的从设备进行通信,如温度传感器、光照传感器、EEPROM存储器等。
这使得I2C总线在很多应用中被广泛使用。
3.线路简单:由于只需要两根线,所以I2C总线的线路相对简单,成本较低。
同时,可以通过电平转换器将3.3V和5V之间的设备连接到同一总线上。
4.支持多主结构:I2C总线可以连接多个主设备和多个从设备,实现多设备之间的通信。
这使得I2C总线非常适合在多个设备之间进行通信和控制。
SPI(Serial Peripheral Interface)总线是一种由Motorola公司于1980年代推出的串行通信协议。
与I2C总线不同,SPI总线是一种四线制协议,包括一个时钟线(SCLK)、一个主设备输出线(MOSI)、一个主设备输入线(MISO)和一个片选线(SS)。
SPI总线的主要特点是:1.高速传输:SPI总线通常支持较高的速度,可达到几百kHz甚至几十MHz的级别。
这使得SPI总线非常适合在高速设备之间进行快速数据传输,如存储器、传感器和带宽要求较高的外设。
2.数据传输双向:SPI总线支持双向数据传输,主设备可以向从设备发送数据,同时也可以接收从设备的数据。
这使得SPI总线适用于需要双向数据传输的应用,如存储器芯片的读写操作。
IIC总线协议最佳理解

IIC总线协议最佳理解IIC(Inter-Integrated Circuit)总线协议是一种广泛应用于集成电路之间通信的串行通信协议。
它由Philips公司在20世纪80年代初推出,并被广泛应用于各种电子设备中,包括传感器、存储器、微控制器等。
IIC总线协议具有简单、高效、可靠的特点,因此成为了当今领域最为流行的串行通信协议之一IIC总线协议由两条信号线构成:串行数据线(SDA)和串行时钟线(SCL)。
除此之外,还有供电线(VCC)和接地线(GND)。
通过这两条信号线的电平变化和时序控制,设备间可以进行高速、同步的数据传输。
在IIC总线协议中,通信设备分为主设备(Master)和从设备(Slave)。
主设备负责发起总线操作,而从设备则负责接收和响应主设备的指令。
主设备通过发送起始位和地址来选择从设备,然后通过发送数据来完成通信,最后发送停止位结束通信。
起始位(Start)和停止位(Stop)用于标识一次通信的开始和结束。
起始位和停止位都是通过在SCL线为高电平时,SDA线由高电平跳变到低电平或由低电平跳变到高电平来完成的。
地址用于选择从设备。
IIC总线协议支持7位或10位地址,其中7位地址模式下最多可以连接128个从设备,10位地址模式下最多可以连接1024个从设备。
地址的最高有效位指示了通信设备是主设备还是从设备。
数据传输时序由SCL线上的时钟频率(Clock Frequency)和传输速率(Bit Rate)确定。
时钟频率是指每秒钟的时钟脉冲数量,而传输速率则是指在每个时钟周期内传输的数据位数。
IIC总线协议支持多种不同的时钟频率和传输速率,以适应不同设备的需求。
除了基本的起始位、地址和数据传输之外,IIC总线协议还支持一些额外的功能,如应答(ACK/NACK)和多主设备。
应答机制用于从设备向主设备发送应答信号,以确认收到数据。
应答信号是在主设备发送完一个字节的数据后,由从设备通过将SDA线拉低来发送的。
CANI2SI2CSPI总线接口总结

CANI2SI2CSPI总线接口总结CAN(Controller Area Network)是一种面向实时通信的串行总线标准。
它最初是由Bosch公司开发,主要用于汽车电子系统中的控制和通信。
CAN总线采用差分信号传输,拥有较高的抗干扰能力和可靠性,可实现在复杂电气环境下的快速数据传输。
CAN总线可以支持多个设备的分布式通信,通过先进的协议机制实现高效的数据传输和数据帧的优先级设置。
CAN总线的通信速率通常为1 Mbps,可以满足实时性要求较高的应用场景,如汽车电子、工业控制和航空航天等。
I2S(Inter-IC Sound)是一种串行音频接口标准。
它由飞利浦(Philips)公司提出,用于在音频设备之间传输音频数据。
I2S接口采用三线制的同步通信方式,包括一个时钟线、一个数据线和一个帧同步线。
I2S接口支持双向通信,可以同时传输音频数据和控制信号。
I2S接口的主要特点是高保真音频传输和灵活的系统集成能力。
它广泛应用于消费电子产品,如音频解码器、音频处理器、音频放大器等。
I2C(Inter-Integrated Circuit)是一种串行通信总线标准。
它由Philips公司开发,用于连接集成电路之间的通信。
I2C总线采用双线制的同步通信方式,包括一个时钟线和一个数据线。
I2C总线可以支持多个设备的串行连接,每个设备都有一个唯一的地址,可以通过该地址进行单独访问。
I2C总线具有简单、低功耗和可靠的特点,适用于连接存储器、传感器、显示器和其他外设等。
它的通信速率通常在100 kbps到3.4 Mbps之间,适用于中等速度的数据传输。
SPI(Serial Peripheral Interface)是一种串行外设接口标准。
它最早由Motorola公司提出,用于连接微控制器和外设之间的通信。
SPI总线采用四线制的同步通信方式,包括一个时钟线、一个主从选择线、一个主机输出从机输入线和一个主机输入从机输出线。
I2C总结笔记

I2c总线总结I2c总线是一种双线制双向传输的总线,由数据线SDA与时钟线SCL组成。
在总线备用时,双线都必需保持高电平状态,只有关闭总线时才将时钟线SCL钳位在低电平。
总线在数据传输时,当时钟线为高电平时数据线上的数据才是有效的且不允许改变,只有时钟为低电平时数据才允许变化。
Ic2总线拥有线“与”的功能,只有一条线上所有的输出为高电平时该线才能为高电平。
标准i2c模式下数据传输速率为100Kbit/s,快速模式下为400Kbit/s,高速模式下为3.4Mbit/s。
实际传输中可选择不同的数据传输速率,同时也可以采用延长时钟线SCL低电平周期来控制数据传输速率。
连接到总线的IC 数量只受到该总线的最大电容400pF 限制。
状态:过程状态I2c总线总线各各过程状态1.总线起始信号:时钟线为高电平,数据线从高电平变为低电平,启动i2c总线。
兼容I2C 总线的器件在接收到起始或重复起始条件时必须复位它们的总线逻辑以接收对比下面的寻址地址。
2.数据传输的开始—地址读写位:开始信号之后,发送7位的寻址地址和1位的R/W位‘0’表示写操作‘1’表示读操作。
如果一次传输中数据传输方向发送改变,则可重复发送起始信号Sr与地址读写信号以更改数据传输方向。
*数据传输等待情况:如果从机要完成一些其他功能后(例如一个内部中断服务程序)才能接收或发送下一个完整的数据字节,可以使时钟线SCL在完成应答信号后(如图中英文标示)保持低电平迫使主机进入等待状态。
当从机准备好接收下一个数据字节并释放时钟线SCL 后,数据传输继续。
3.应答信号:总线上每传输一个字节数据后都必须有应答信号,应答信号所对应的时钟信号由主控器提供,同时发送器释放数据线,使其处于高电平,以便接收器获取总线发送应答信号。
应答信号在第九个时钟位上出现,接受器输出低电平为应答信号A输出高电平则为非应答信号/A。
*如果被控制器由于某种原因不能产生应答时,必须释放总线将数据线置为高电平,这时主控器可发送一个停止信号终止总线传输。
I2C总线协议笔记

特点3线(SDA,SCL,GND),同步,半双工,多主机,短距离。
连接到相同总线的IC 数量只受到总线的最大电容400pF 限制,并可以通过中继器增加器件数量。
四种工作模式:Master Transmitter;Master Receiver;Slave Transmitter;Slave Receiver。
三种速度模式低速模式(标准模式,S):100kbps;快速模式(F):400kbps;高速模式(Hs):3.4Mbps。
总线时序各种状态:起始(S)/重启(Sr),地址(ADDR),读/写(R/W),响应(ACK),数据(DA TA),结束(P)。
起始/重启:SCL为高时,SDA由高到低结束:SCL为高时,SDA由低到高数据:位传输:SDA 线上的数据必须在时钟的高电平期间保持稳定,数据线的高或低电平状态只有在SCL 线的时钟信号是低电平时才能改变。
字节传输:MSB First,每个字节必须为8 位,每次传输可以发送的字节数量不受限制。
每个字节后必须跟一个响应位。
响应:响应位的产生原则是谁接收谁响应。
在响应的时钟脉冲期间,接收器必须进行响应。
将SDA 线拉低以产生ACK信号,表明接受输入;拉高表示NACK,表明拒绝输入。
主机在传输完最后一个字节后,可以不产生ACK信号而直接产生停止信号。
时钟同步与总线仲裁:当总线上存在多主机同时工作的时候,就需要进行时钟同步和总线仲裁。
同步的目的是让总线上工作的器件按照一致的时钟进行数据收发。
同步是在SCL上实现的,总线的SCL高电平时间长度由所有工作主机中高电平时间最短的一方决定,而低电平时间由低电平时间最长一方决定。
任何时间上只能有一个主机获得总线控制权,总线的仲裁是在SDA上实现的。
在其他主机发送低电平时,发送高电平的主机将因失去总线控制权而需要断开它的数据输出级,因为总线上的电平与它自己的发出的电平不相同。
失去总线控制权的主机需要立刻转入Slave模式,以防当前被寻址器件就是它。
I2C协议总结

I2C协议总结串行总线I2C由数据线SDA和时钟线SCL构成,可实现完善的双工同步数据传输,能方便的构成多机系统和外围器件扩展系统,I2C采用器件地址的硬件设置方法,通过软件进行寻址。
I2C总线系统中,以共同挂接的I2C总线作为通信手段的每个器件均构成I2C总线的一个器件节点。
根据节点是否带有智能,可将这些节点分为主器件节点和外围器件节点。
主器件节点可作为主控器,用来对总线进行主动控制。
在一次通信过程中,由主控器负责向总线上发送启动信号、同步时钟信号、被控器件地址码、重启动信号和停止信号等。
而被控器(即受控器件)可分别由这两种节点充当。
如果在系统中同时存在2个或2个以上的主器件节点企图控制总线,则形成总线冲突状态。
由于I2C引入了同步时钟和总线仲裁机制,即使出现总线冲突也不会造成信息丢失。
发生总线冲突时,为了避免信息丢失,需要进行总线仲裁以决定谁是主控器。
总线仲裁是通过裁定SDA线上的控制权来解决的。
时钟同步是连接到SCL线上的所有器件进行“线与”实现的。
只要有一个器件向SCL输出低电平,SCL就为低电平。
因此SCL线的低电平时间由时钟低电平期最长的器件决定,而高电平时间由时钟高电平期最短的器件决定,由此形成了时钟的同步。
下图所示为一次完整的通信过程的时序。
图1 i2c总线数据传送时序(注:图中,SCL线上1~7位为7位地址码,第8位为读写位R\~D,第9位为ACK应答位,紧接着的为第一个数据字节,然后是一位应答位,后面继续第2个数据字节。
)如图所示,主控器在检测到总线空闲(数据线SDA和时钟线SCL同时处于高电平状态)时,首先发送一个启动信号S(在时钟线SCL保持高电平期间,数据线SDA上电平被拉低),它标志着一次数据传输的开始。
之后主控器发送一个地址字节包括7位地址码和一个读写位。
被控器收到地址字节后反馈一个应答信号ACK=0,主控器接收到ACK后开始发送第一个数据字节,被控器接收到第一个数据字节后,由反馈一个应答信号ACK=0。
全面剖析i2c总线的原理与控制技术

全面剖析i2c总线的原理与控制技术IIC总线,是INTER-IC串行总线的缩写。
INTER-IC原文大意是用于相互作用的集成I2C总线的特点与特性I2C总线与传统的PWM调宽脉冲相比较,其最大的特点是串行数据线和时钟线都是双向传输线。
I2C总线在实际电路的应用中,两根线各自通过一个上拉I2C总线的控制技术由于在I2C总线中的多主控器的控制权总是相互竞争,并且在相互竞争中进行寻址和数据发送,因此总线上没有中央微处理器,也没有任何优先级。
在I2C总线上进行数据传输时,所有的主控器都会在串行时钟线上产生自己的时钟信号,而且只有当时钟线上的信号处于高电平时,数据线上的数据才是有效的。
因此,当各主控器向总线上输出各不相同的时钟频率时,只有通过仲裁过程,才可使总线上有一个统一的时钟信号。
只有总线上的时钟线上的一种“线与”连接和双向传输特性来实现的。
因此,I2C总线的控制基础主要是仲裁过程和时钟同步。
在总线的仲裁过程中,一旦有一主控器输出一个低电平时钟信号,则串行时钟线将由此变为低电平,直到该主控器时钟信号的高电平状态到来,数据信号才开始传送。
在总线上这个时钟线的电平转换,将影响所有主控器的时钟信号低电平周期的计时。
事实上,当一个主控器的时钟信号由低电平向高电平转换时,它可能并不会改变串行时钟线的低电平状态,因为此时可能有另一个主控器仍然处于时钟低电平周期。
也就是说,在I2C总线控制中,时钟线将由时钟低电平周期最长的主要控器保持为低电平状态,而其他时钟低电平周期较短的主控器则将相继进入时钟高电平等待状态。
只有当总线上的所有主控器都结束了时钟低电平周期的计时后,时钟线才被完全释放,即时钟线的状态达到一致高电平状态。
当所有主控器时钟信号都进入高电平状态后,便开始了各自的时钟信号高电平周期计时。
当有一个主控器的时钟高电平状态计时结束时,这个主控器将再次使I2C总线上的时钟线SCL处于低电平状态。
从而,在总线的仲裁过程中,使时钟线通过各主控的时钟输出产生一个统一的时钟同步信号成为现实。
iic总线学习心得

主控端 - 为启动数据传送 (START 指令)、产生时钟 (SCL) 信号并中止数据传送 (STOP指令) 的器件,主控端必须是传送端或接收端。
从属端 - 由主控端定址的器件。
从属端可以扮演接收端或发送端的角色。
多重主控端 - 在总线上可同时存一个以上的主控端,并且不会造成冲突或数据遗失。
通常来说运用 "bit-banged" 软件的主控端并不具有多重主控端能力,I²C 总线控制器提供了一个将多重主控端硬件 I²C 连接端口加入到 DSP 或ASIC 的简单方法。
仲裁机制 - 预先定义在特定时间内只有一个主控端能够取得总线控制权。
同步 - 预先将二个或二个以上的主控端时钟信号予以同步化的定义程序。
SDA - 串行数据信号线 (S erial DA ta)SCL - 串行时钟信号线 (S erial CL ock)目标器件的 I²C 地址在第一个位组中送出,而这个起始位组中最不重要位(LSB) 则用来表明主控端将进行发送 (写入) 数据或由接收端接收 (读取) 数据,称为从属器件,每笔数据交换必须以 START 指令开头,并以 STOP 或RESTART 情况结束。
如果同一个 I²C 总线上有两个主控端,且同时发出 START 指令要控制总线时,那么就会以仲裁机制处理。
当主控端,如微控器,已经控制总线时,其他的主控端必须等到第一个主控端送出 STOP 指令,并且将总线回复闲置状态时,才能控制总线。
总线数据传送术语F (FREE) - 总线为可用或闲置状态,这时 SDA 串行数据线与 SCL 串行时钟均为高电位状态。
S (START) 或 R (RESTART) - 数据传送是以 START 情况开始,这时 SDA 串行数据线的电压位准会从高电位转变为低电位,而 SCL 串行时钟则保持在高电位,当这个情况发生时,代表了总线进入忙碌 (BUSY) 状态。
总结IIC协议学习心得

总结IIC协议学习心得无论在51或者stm32的学习中,我们都会使用到IIC总线的数据传送,从当初51到现在的stm32的学习。
iic一直都是只会简单的使用并未很仔细的去研究中间每一个过程或者时序。
今天用了一天的时间去理解IIC。
当然这都是建立在以往的学习经验之中而得。
一下都是我自己的一些理解和对照程序而写的一些IIC的使用过程。
iic总线时序理解:24C04引脚:NC (1)VCC(8)A1 (2)WP (7)A2 (3)SCL(6)GBD(4)SDA(5)注:SCL设置start信号和stop信号,由于此时是STM32对24c02发送信号,所以SCL和SDA设置为输出状态,即:SDA_OUT(); 由时序图可知:START:SCL=1,SDA=1,delay(),SDA=0,delay(),SCL=0,//时钟线为高,数据线从高到低的跳变STOP :SCL=0,SDA=0,delay(),SCL=1,delay(),SDA=1,//时钟线为高,数据线从低到高的跳变STM32程序:void IIC_Start(void){SDA_OUT(); //sda线输出IIC_SDA=1;IIC_SCL=1;delay_us(4);IIC_SDA=0;//START:when CLK is high,DATA change form highto lowdelay_us(4);IIC_SCL=0;//钳住I2C总线,准备发送或接收数据}void IIC_Stop(void){SDA_OUT();//sda线输出IIC_SCL=0;IIC_SDA=0;//STOP:when CLK is high DATA change form low to highdelay_us(4);IIC_SCL=1;IIC_SDA=1;//发送I2C总线结束信号delay_us(4);}iic每成功传送完一个字节后,接收器都必须产生一个应答信号,应答器件在第九个时钟周期讲SDA拉低,表示已经接收到8位,此时对于24c02有两种可能的工作方式,第一种是24c02工作于读,另一种则是工作于写。
简单的IC协议理解

简单的I2C协议理解I2C(Inter-Integrated Circuit)总线是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。
是微电子通信控制领域广泛采用的一种总线标准。
它是同步通信的一种特殊形式,具有接口线少,控制方式简单,器件封装形式小,通信速率较高等优点。
I2C 总线支持任何IC 生产过程(CMOS、双极性)。
通过串行数据(SDA)线和串行时钟(SCL)线在连接到总线的器件间传递信息。
每个器件都有一个唯一的地址识别(无论是微控制器——MCU、LCD 驱动器、存储器或键盘接口),而且都可以作为一个发送器或接收器(由器件的功能决定)。
LCD 驱动器只能作为接收器,而存储器则既可以接收又可以发送数据。
除了发送器和接收器外,器件在执行数据传输时也可以被看作是主机或从机。
主机是初始化总线的数据传输并产生允许传输的时钟信号的器件。
此时,任何被寻址的器件都被认为是从机。
一. 技术性能:工作速率有100K和400K两种;支持多机通讯;支持多主控模块,但同一时刻只允许有一个主控;由数据线SDA和时钟SCL构成的串行总线;每个电路和模块都有唯一的地址;每个器件可以使用独立电源i2C接口的SCL和SDA均为漏极开路,需要加上拉电阻,不同器件的供电电压可以不同,如3.3V和5V,但是低电压供电的芯片相应引脚需要5V耐受。
漏极开路输出和集电极开路一样,顾名思义,开漏电路就是指从MOSFET的漏极输出的电路。
典型的用法是在漏极外部的电路添加上拉电阻到电源如图所示。
完整的开漏电路应由开漏器件和开漏上拉电阻组成。
这里的上拉电阻R的阻值决定了逻辑电平转换的上升/下降沿的速度。
阻值越大,速度越低,功耗越小。
因此在选择上拉电阻时要兼顾功耗和速度。
标准的开漏脚一般只有输出的能力。
添加其它的判断电路,才能具备双向输入、输出的能力。
很多单片机等器件的I/O就是漏极开路形式,或者可以配置成漏极开路输出形式,如51单片机的P0口就为漏极开路输出。
学习i2c心得

I2C学习心得我最近刚做完I2C通信协议的编写与调试,下面介绍一下我从一开始理解夏老师的程序,修改程序,直到下板调试整个的学习过程,希望对大家学习I2C有一定的帮助。
一、分析源代码学习I2C,首先我们要知道I2C是一种串行接口,I2C通信是一种串行通信。
在实际的数字系统中,我们的数据经常是以并行的方式产生及存储的。
而将数据通过进行传输时,通常会是串行地发送和接收的。
比如我们常见的SPI,UART,I2C,USB,SATA等接口,均是串行接口。
因此,在数字系统中我们经常会遇到需要将串行数据接收下来转为并行数据存储,或者是将并行数据转换成串行数据发送出去的情况。
说白了,就是发送端要将数据排个队,一个一个地往外蹦,接收端接收到了这些数据又要将它们像串糖葫芦一个一个串起来,成为并行的数据。
那么我们要做的I2C协议,其实就是按照I2C总线协议的要求,将本地的数据串行地发送出去,或者将外部的数据串行地接收回来的这么一个过程。
由于以前从未搞过I2C方面的工作,我的第一步是从理解夏老师的程序开始的,通过浏览I2C设计实例,可以知道要设计一个I2C通信程序,我们需要一个主机和一个从机,如下图1所示,它们之间采用I2C协议进行串行通信,设计实例中的signal模块和EEPROM_WR模块是用来模拟主机发送方的,EEPROM_WR模块是一个可综合的EEPROM读写器模型,它通过SCL和SDA两根线与EEPROM器件进行通信,并且SCL与SDA上的信号必须满足I2C通信协议的要求。
EEPROM模块只是EEPROM的行为级模型,signal模块与EEPROM模块都是为了仿真需要而存在的。
先简单的介绍一下I2C总线特征。
只有在总线处于“非忙”状态时,才能开始数据传输。
在数据传输期间,只要时钟线为高电平,数据线都必须保持稳定,否则数据线上的任何变化都被当作“启动”或“停止”信号。
图1是总线状态的定义。
(1)总线非忙状态(A 段):数据线SDA 和时钟线 SCL 都保持高电平。
I2C总线协议的分析

一、I2C总线定义I2C(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。
I2C总线产生于在80年代,最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个组件状态的通信。
例如管理员可对各个组件进行查询,以管理系统的配置或掌握组件的功能状态,如电源和系统风扇。
可随时监控内存、硬盘、网络、系统温度等多个参数,增加了系统的安全性,方便了管理。
二、I2C总线特点I2C总线最主要的优点是其简单性和有效性。
由于接口直接在组件之上,因此I2C总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。
总线的长度可高达25英尺,并且能够以10Kbps的最大传输速率支持40个组件。
I2C总线的另一个优点是,它支持多主控(multimastering),其中任何能够进行发送和接收的设备都可以成为主总线。
一个主控能够控制信号的传输和时钟频率。
当然,在任何时间点上只能有一个主控。
三、I2C总线工作原理I2C总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。
在CPU与被控IC之间、IC与IC之间进行双向传送,最高传送速率100kbps。
各种被控制电路均并联在这条总线上,但就像电话机一样只有拨通各自的号码才能工作,所以每个电路和模块都有唯一的地址,在信息的传输过程中,I2C总线上并接的每一模块电路既是主控器(或被控器),又是发送器(或接收器),这取决于它所要完成的功能。
CPU发出的控制信号分为地址码和控制量两部分,地址码用来选址,即接通需要控制的电路,确定控制的种类;控制量决定该调整的类别(如对比度、亮度等)及需要调整的量。
这样,各控制电路虽然挂在同一条总线上,却彼此独立,互不相关。
四、总线的构成及信号类型I2C总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。
在CPU与被控IC之间、IC与IC之间进行双向传送,最高传送速率100kbps。
IIC通信协议总结

IIC通信协议一.概述二.硬件结构三:数据的传输开始和停止条件的确定:在I2C总线传输过程中,将两种特定的情况定义为开始和停止条件(见图3):当SCL保持“高”时,SDA由“高”变为“低”为开始条件;当SCL保持“高”且SDA由“低”变为“高”时为停止条件。
开始和停止条件均由主控制器产生。
使用硬件接口可以很容易地检测到开始和停止条件,没有这种接口的微机必须以每时钟周期至少两次对SDA取样,以检测这种变化。
传输注意事项:1.SDA线上的数据在时钟“高”期间必须是稳定的,只有当SCL线上的时钟信号为低时,数据线上的“高”或“低”状态才可以改变。
因此在IIC总线上胡数据传输过程中,数据信号线SDA的变化只能发生在SCL为低电平的期间内。
从上图中可以清楚的看到这一点。
响应信号ACK宽度为1位,紧跟在8个数据位后面,所以发送1字节的数据需要9个SCL时钟脉冲。
响应时钟脉冲也是由主机产生的,主机在响应时钟脉冲期间释放SDA线,使其处在高电平(见图16—3上面的信号)。
而在响应时钟脉冲期间,接收方需要将SDA拉低,使SDA在响应时钟脉冲高电平期间保持稳定的低电平(见图16—3中间结束的信号)。
低电平用ACK表示,代表有应答;高电平用nACK表示,代表无应答。
应答信号在I2C总线的数据传输过程中起着非常重要的作用,它将决定总线及连接在总线上设备下一步的状态和动作。
一旦在应答信号上发生错误,例如接收方不按规定返回或返回不正确的应答信号,以及发送方对应答信号的误判,都将造成总线通信的失败。
2.输出到SDA线上的每个字节必须是8位,高位在前,低位在后。
每次传输的字节不受限制,但每个字节必须要有一个应答ACK。
如果一接收器件在完成其他功能(如一内部中断)前不能接收另一数据的完整字节时,它可以保持时钟线SCL为低,以促使发送器进入等待状态;当接收器准备好接受数据的其它字节并释放时钟SCL后,数据传输继续进行。
3.数据传送具有应答是必须的。
最近因为工作需要涉及到了I2C总线。虽然我过去用过I2c,但看了

最近因为工作需要涉及到了I2C总线。
虽然我过去用过I2c但看了Linux kernel 后才发现一个layer 能被做到这样完善。
1.Linux的I2C驱动架Linux中I2C总线的驱动分为两个部分总线驱动BUS和设备驱动DEVICE。
其中总线驱动的职责是为系统中每个I2C总线增加相应的读写方法。
但是总线驱动本身并不会进行任何的通讯它只是存在在那里等待设备驱动调用其函数。
设备驱动则是与挂在I2C总线上的具体的设备通讯的驱动。
通过I2C总线驱动提供的函数设备驱动可以忽略不同总线控制器的差异不考虑其实现细节地与硬件设备通讯。
1.1. 总线驱动在系统开机时首先装载的是I2C总线驱动。
一个总线驱动用于支持一条特定的I2C总线的读写。
一个总线驱动通常需要两个模块一个struct i2c_adapter和一个struct i2c_algorithm来描述static struct i2c_adapter pb1550_board_adapter name: quotpb1550 adapterquot id:I2C_HW_AU1550_PSC algo: NULL algo_data: amppb1550_i2c_info inc_use:pb1550_inc_use dec_use: pb1550_dec_use client_register: pb1550_reg client_unregister: pb1550_unreg client_count: 0 这个样例挂接了一个叫做“pb1550 adapter”的驱动。
但这个模块并未提供读写函数具体的读写方法由第二个模块struct i2c_algorithm提供。
static struct i2c_algorithm au1550_algo .name quotAu1550 algorithmquot .idI2C_ALGO_AU1550 .master_xfer au1550_xfer .functionality au1550_funci2c_adap-gtalgo ampau1550_algo 这个样例给上述总线驱动增加了读写“算法”。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
I2C开始与结束: 起始为SCL为高电平 SDA从高电平跳转到低电平 停止:SCL为高电平 SDA从低电平跳转到高电平
数据改变:SCL为低电平时,SDA线才能改变传输的bit
数据传送时,SCL必须为高电平,SDA必须为固定状态,不允许有跳变。数据传输:SCL为高电平时,SDA线若保持稳定,那么SDA上是在传输数据bit 。也就是说当时钟线SCL为高电平时,数据线的任何电平变化都被当做启动和停止条件。
发送到SDA线上的每个字节必须为8位每次传输可以发送的字节数量不受限制每个字节后必须跟一个响应位