I2C总线时序与数据传输
16.1.2 I2C总线时序与数据传输
当I2C总线处在空闲状态时,因为各设备都是开漏输出,所以在上拉电阻的作用下,SDA和SCL均为高电平。
I2C总线上启动一次数据传输过程的标志为主机发送的起始信号,起始信号的作用是通知从机准备接收数据。
当数据传输结束时,主机需要发送停止信号,通知从机停止接收。
因此,一次数据传输的整个过程由从起始信号开始,到停止信号结束。
同时这两个信号也是启动和关闭I“C设备的信号。
图16—2是I2C总线时序示意图,图中最左边和最右边给出了起始信号和停止信号的时序条件。
>起始信号时序:当SCL为高电平时,SDA由高电平跳变到低电平。
>停止信号时序:当SCL为高电平时,SDA由低电平跳变到高电平。
I2C总线规定,当SCL为高电平时,SDA的电平必须保持稳定不变的状态,只有当SCL 处在低电平时,才可以改变SDA的电平值,但起始信号和停止信号是特例。
因此,当SCL 处于高电平时,SDA的任何跳变都会被识别成为一个起始信号或停止信号。
因此在I2C总线上的数据传输过程中,数据信号线5DA的变化只能发生在SCL为低电平的期间内。
从图16—2中间部分的时序中.可以清楚地看到这一点。
在I2C总线的数据传输过程中,发送到SDA信号线上的数据以字节为单位,每个字节必须为8位,而且是高位在前,低位在后,每次发送数据的字节数量不受限制。
但在这个数据传输过程中需要着重强调的是,当发送方发送完每一字节后,都必须等待接收方返回一个应答响应信号ACK,如图16—3所示。
响应信号ACK宽度为1位,紧跟在8个数据位后面,所以发送1字节的数据需要9个SCL时钟脉冲。
响应时钟脉冲也是由主机产生的,主机在响应时钟脉冲期间释放SDA线,使其处在高电平(见图16—3上面的信号)。
而在响应时钟脉冲期间,接收方需要将SDA拉低,使SDA在响应时钟脉冲高电平期间保持稳定的低电平(见图16—3中间的信号)。
实际上,图16—3中上面和中间的两个信号应该“线与”后呈现在SDA上的。
由于在这个过程中存在比较复杂的转换过程,所以将它们分开便于在下面做更仔细的分析。
>主机控制驱动SCL,发送9个时钟脉冲,前8个为传输数据所用,第9个为响应时钟脉冲(见图16—3下面的信号)。
>在前8个时钟脉冲期间,发送方作为发送器,控制SI)A输出8位数据到接收方。
>在前8个时钟脉冲期间,接收方作为接收器,处在输入的状态下,检测接收SDA上的6位数据。
>在第9个时钟脉冲期间,发送方释放SDA,此时发送方由先前的发送器转换成为接收器。
>在第9个时钟脉冲期间,接收方则从先前的接收器转换成为发送竭控制SDA,输出ACK信号。
>在第9个时钟脉冲期间,发送方作为接收器,处在输入的状态下,检测接收SDA上酌ACK信号。
>最后,发送和接收双方都依据应答信号的状态(ACK/nACK),各自确定下一步的角色转换,以及如何动作。
在上面的分析过程中,使用了发送方和接收方来表示通信的双方,而没有使用主机和从机的概念,这是因为数据的发送可以是主机,也可以是从机。
因此,不管是主机作为接收方,还是从机为接收方,在响应时钟脉冲期间都必须回送应答信号。
应答信号的状态有2个:低电平用ACK表示,代表有应答;高电平用nACK表示,代表天应答。
应答信号在I2C总线的数据传输过程中起着非常重要的作用,它将决定总线及连接在总线上设备下一步的状态和动作。
一旦在应答信号上发生错误,例如接收方不按规定返回或返回不正确的应答信号,以及发送方对应答信号的误判,都将造成总线通信的失败。
16.1.3 I2C总线寻址与通信过程
前面已经介绍过I2C总线是支持多机通信的数据总线,每一个连接在总线上的从机设备或器件都有一个唯一独立的地址,以便于主机寻访。
I2C总线上的数据通信过程是由主机发起的,以主机控制总线,发出起始信号作为开始。
在发送起始信号后,主机将发送一个用于选择从机设备的地址字节,以寻址总线中的某一个从机设备,通知其参与同主机之间的数据通信。
地址字节的格式如下:
地址字节的高7位数据是主机呼叫的从机地址,第8位用于标示紧接下来的数据传输方向:“0”表示要从机准备接收主机下发数据(主机发送/从机接收);而“l,,则表示主机向从机读取数据(主机接收/从机发送)。
当主机发出地址字节后,总线上所有的从机都将起始信号后的7位地址与自己的地址进行比较:如果相同,则该从机确认自己被主机寻址;而那些本机地址与主机下发的寻呼地址不匹配的从机,则继续保持在检测起始信号的状态,等待下一个起始信号的到来。
被主机寻址的从机,必须在第9个SCK时钟脉冲期间拉低SDA,给出ACK回应,以通知主机寻址成功。
然后,从机将根据地址字节中第8他的指示,将自己转换成相应的角色(0—从机接收器;1—从机发送器),参与接下来的数据传输过程。
图16—4所示为在I2C总线上一次数据传输的示例,它实现了简单的操作:主机向从机读取1字节。
图中描述了整个数据传输的全部过程,给出了I2C总线上的时序变化,SDA 上的数据情况、以及发送、接收双方相互转换与控制SDA的过程。
>主机控制SDA。
在I2C总线上产生起始信号,同时控制SCL,发送时钟脉冲。
在整个传输过程中,SCL都是由主机控制的。
>主机发送器发送地址字节。
地址字节的第8位为“1”。
表示准备向从机读取数据。
主机在字节发送完成后,放弃对5DA的控制,进入接收检测ACK的状态。
>所有从机在起始信号后为从机接收器,接收地址字节,与自己地址比对。
>被寻址的从机在第9个SCL时钟脉冲期间控制SDA.将其拉低,给出ACK应答。
>主机检测到从机的ACK应答后、转换成主机接收器。
准备接收从机发出的数据。
>从机则根据第8位“1”的设定,在第2个字节的8个时钟脉冲期间作为从机发送器控制SDA。
发送1字节的数据。
发送完成后放弃对SDA的控制,进入接收检测ACK的状态。
>在第2个字节的8个传输时钟脉冲期间,主机接收器接收从机发出的数据。
当接收到d0位后,主机控制SDA,将其拉低,给出ACK应答。
>从机接收检测主机的ACK应答c如果是ACK,则难备发送1个新的字节数据;如果是nACK,则转入检测下一个起始信号的状态。
>在这个示例中,主机收到l字节数据后,转成主机发送器控制SDA,在发出ACK应答信号后,马上发出停止信号,通知本次数据传输结束。
>从机检测到停止信号,转入检测下一个起始信号的状态。
以上介绍了I2C总线基本的特性、操作时序和通信规范,这些概念对了解、掌握、应用I2C总线尤为重要。
这是因为I2C总线在硬件连接上非常简单,只要将所有器件和设备的SDA、SCL并在一起就可以了,但复杂的通信规范的实现,往往需要软件的控制。
尽管A VR 的TWI接口在硬件层面上实现了更多的I2C底层协议和数据传送与接收的功能,但对于什么时间发出起始信号、停止信号,如何返回应答信号,以及主/从机之间的发送/接收器的相互转换,还是需要程序员根据实际情况,编写相应的、正确的系统程序才能实现。
关于I2C总线更多的特性,例如多主机的总线竞争与仲裁等,本书将不做介绍,有兴趣的读者可以通过本书所附光盘中的参考资料《I2C总线规范》进一步地深入学习。
I2C总线信号时序总结
I2C总线信号时序总结I2C(Inter-Integrated Circuit)总线是一种串行通信协议,它用于在集成电路之间进行短距离的数据交换。
I2C总线信号时序对于正确实现I2C通信非常重要。
本文将详细总结I2C总线信号时序,包括起始条件、数据传输、停止条件等。
1.总线状态2.起始条件起始条件是指从I2C主设备(Master)向I2C从设备(Slave)发送数据之前的一系列信号。
起始条件由两个信号组成:SCL(时钟)和SDA(数据)。
当SCL为高电平时,SDA发生一个下降沿,表示开始传输数据。
3.数据传输在数据传输阶段,数据位通过SCL时钟控制的边缘传输。
这个过程类似于同步串行通信协议。
数据的传输在I2C总线上是以字节为单位进行的,每个字节有8位(bit)。
数据传输过程中,SCL和SDA的状态发生变化的规则如下:-当SCL为低电平时,数据线SDA可以发生变化。
此时SDA数据线的电平变化将被忽略。
-当SCL为高电平时,SDA数据线的电平变化将被读取或写入。
4.读取数据在I2C总线上进行数据读取时,接收设备通常在时钟的上升沿读取数据。
主设备将在SCL为高电平时将数据传输到SDA数据线上。
而从设备将在SCL下降沿读取数据。
5.写入数据在I2C总线上进行数据写入时,发送设备通常在时钟的下降沿写入数据。
主设备在SCL为高电平时,将数据传输到SDA数据线上。
从设备将在SCL下降沿写入数据。
6.停止条件停止条件是指在I2C通信完成后,由主设备发送的一系列信号。
停止条件由两个信号组成:SCL(时钟)和SDA(数据)。
当SCL为高电平时,SDA发生一个上升沿,表示结束传输。
对于I2C总线信号时序的更详细说明可以如下:-在起始条件中,SCL先于SDA变为高电平。
SDA变化的任何时间必须在SCL变高之前完成。
起始条件的结束是在SCL为高电平时,SDA发生一个下降沿。
-在数据传输阶段,数据的传输是由主设备控制的,每个字节8位。
AT24C02操作方法及程序(含时序图)
总线工作原理
I2C 总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。
起始和终止信号 :SCL 线为高电平期间,SDA 线由高电平向低电平的变化表示起始信号;SCL 线为高电平期间,SDA 线由低电平向高电平的变化表示终止信号。
数据传送格式(1)字节传送与应答
每一个字节必须保证是8位长度。
数据传送时,先传送最高位(MSB ),每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9位)。
如果一段时间内没有收到从机的应答信号,则自动认为从机已正确接收到数据。
AT24C02的芯片地址如下图,1010为固定,A0,A1,A2正好与芯片的1,2,3引角对应,为当前电路中的地址选择线,三根线可选择8个芯片同时连接在电路中,当要与哪个芯片通信时传送相应的地址即可与该芯片建立连接,TX-1B 实验板上三根地址线都为0。
最后一位R/W 为告诉从机下一字节数据是要读还是写,0为写入,1为读出。
AT24C02的芯片地址(0xa0为写,0xa1为读)
任一地址写入数据格式
任一地址读取数据格式。
i2c 时序状态
i2c 时序状态
I2C总线是一种串行数据总线,用于连接微控制器(MCU)和外部设备。
它的时序状态包括:
- 启动信号:SCL为高电平的时候,SDA由高电平向低电平跳变。
- 结束信号:SCL为高电平的时候,SDA由低电平向高电平跳变。
- 数据传送时序:由于一个I2C总线上可以挂多个设备,因此开始信号后,要先发送7bit的从设备地址;第8个bit表示读或者写,该信号由主机发送;然后从机会发送ACK 的应答信号;之后才是要发送的数据,数据发送完,从机再发送ACK信号。
- 空闲状态:由I2C的启动条件可知,I2C总线在空闲时需要总线的SDA和SCL两条信号线同时处于高电平。
- 总线仲裁:I2C总线上可能挂接有多个器件,有时会发生两个或多个主器件同时想占用总线的情况,这种情况叫做总线竞争。
在使用I2C总线时,必须严格遵循其时序要求,以确保数据传输的可靠性和准确性。
如需了解更多关于I2C总线的信息,可以补充相关背景后再次向我提问。
i2c操作时序
i2c操作时序I2C(Inter-Integrated Circuit)是一种串行通信协议,广泛应用于各种电子设备之间的数据传输。
它由飞利浦公司(现在的NXP半导体)在1982年推出,并且成为了一种广泛采用的标准。
I2C操作时序是指在I2C总线上进行数据传输时,相关信号的时序顺序。
I2C总线上有两种设备:主设备和从设备。
主设备负责发起传输和提供时钟信号,而从设备则被动接收传输和依赖于主设备提供的时钟。
I2C总线上的所有设备共享一个共同的时钟信号(SCL线)和数据信号(SDA线)。
在I2C操作时序中,包括了以下几个步骤:1.起始条件(Start condition):主设备发送一个低电平脉冲到SDA线,而SCL线保持高电平。
这表示一个新的传输周期的开始。
2.地址和寻址(Address and addressing):主设备发送一个地址字节来选择要与之通信的从设备。
地址字节由从设备的7位地址和一个读/写位组成。
读写位为0表示主设备要写入数据,为1表示主设备要读取数据。
3. ACK(Acknowledge):接收到地址字节的从设备会返回一个应答位ACK。
主设备在发送地址或数据字节后会拉低SDA线,而从设备在SCL线上的一个时钟周期后将SDA线恢复为高电平。
如果从设备正常接收到了字节,它会将SDA线拉低表示应答。
如果从设备没有正确接收到字节,它会保持SDA线为高电平。
4.数据传输(Data transmission):主设备根据需要发送或接收数据字节。
发送时,主设备在一个时钟周期内将数据字节写入SDA线,并且引脚保持稳定直到SCL线拉高。
发送完数据字节后,主设备释放SDA线以允许从设备进行检测和准备。
接收时,主设备将SDA线释放并等待从设备发送数据位。
从设备在每个时钟周期内向SDA线写入数据字节,并且在SCL线拉高之后主设备读取该字节。
5.停止条件(Stop condition):主设备发送一个高电平脉冲到SDA线,而SCL线保持高电平。
I2C总线简介(很经典)
I2C总线简介1.概述:I²C是Inter-Integrated Circuit的缩写,发音为"eye-squared cee" or"eye-two-cee", 它是一种两线接口。
I²C 只是用两条双向的线,一条 Serial Data Line (SDA) ,另一条Serial Clock (SCL)。
SCL:上升沿将数据输入到每个EEPROM器件中;下降沿驱动EEPROM器件输出数据。
(边沿触发)SDA:双向数据线,为OD门,与其它任意数量的OD与OC门成"线与"关系。
2.输出级每一个I2C总线器件内部的SDA、SCL引脚电路结构都是一样的,引脚的输出驱动与输入缓冲连在一起。
其中输出为漏极开路的场效应管,输入缓冲为一只高输入阻抗的同相器,这种电路具有两个特点:1)由于SDA、SCL为漏极开路结构(OD),因此它们必须接有上拉电阻,阻值的大小常为1k8, 4k7 and 10k ,但1k8 时性能最好;当总线空闲时,两根线均为高电平。
连到总线上的任一器件输出的低电平,都将使总线的信号变低,即各器件的SDA及SCL都是线"与"关系。
2)引脚在输出信号的同时还将引脚上的电平进行检测,检测是否与刚才输出一致,为"时钟同步"和"总线仲裁"提供了硬件基础。
3.主设备与从设备系统中的所有外围器件都具有一个7位的"从器件专用地址码",其中高4位为器件类型,由生产厂家制定,低3位为器件引脚定义地址,由使用者定义。
主控器件通过地址码建立多机通信的机制,因此I2C总线省去了外围器件的片选线,这样无论总线上挂接多少个器件,其系统仍然为简约的二线结构。
终端挂载在总线上,有主端和从端之分,主端必须是带有CPU的逻辑模块,在同一总线上同一时刻使能有一个主端,可以有多个从端,从端的数量受地址空间和总线的最大电容 400pF的限制。
I2C通信时序图解析
I2C通信时序图解析⼀、I2C协议简介 I2C 通讯协议(Inter-Integrated Circuit)是由 Phiilps 公司开发的,由于它引脚少,硬件实现简单,可扩展性强,不需要 USART、CAN 等通讯协议的外部收发设备,现在被⼴泛地使⽤在系统内多个集成电路(IC)间的通讯。
关于I2C协议的更多内容,可阅读《I2C总线协议》,本博⽂主要分析I2C波形图,对于I2C的基础知识不在做介绍。
⼆、I2C协议标准代码2.1 起始信号&停⽌信号 起始信号:当 SCL 线是⾼电平时 SDA 线从⾼电平向低电平切换。
停⽌信号:当 SCL 线是⾼电平时 SDA 线由低电平向⾼电平切换。
2.1.1 起始信号代码void I2C_Start(void){I2C_SDA_High(); //SDA=1I2C_SCL_High(); //SCL=1I2C_Delay();I2C_SDA_Low();I2C_Delay();I2C_SCL_Low();I2C_Delay();}2.1.2 停⽌信号代码void I2C_Stop(void){I2C_SDA_Low();I2C_SCL_High();I2C_Delay();I2C_SDA_High();I2C_Delay();}2.2 发送⼀个字节 CPU向I2C总线设备发送⼀个字节(8bit)数据u8 I2C_SendByte(uint8_t Byte){uint8_t i;/* 先发送⾼位字节 */for(i = 0 ; i < 8 ; i++){if(Byte & 0x80){I2C_SDA_High();}else{I2C_SDA_Low();}I2C_Delay();I2C_SCL_High();I2C_Delay();I2C_SCL_Low();I2C_Delay();if(i == 7){I2C_SDA_High(); /* 释放SDA总线 */}Byte <<= 1; /* 左移⼀位 */I2C_Delay();}} 2.3 读取⼀个字节 CPU从I2C总线设备上读取⼀个字节(8bit数据)u8 I2C_ReadByte(void){uint8_t i;uint8_t value;/* 先读取最⾼位即bit7 */value = 0;for(i = 0 ; i < 8 ; i++){value <<= 1;I2C_SCL_High();I2C_Delay();if(I2C_SDA_READ()){value++;}I2C_SCL_Low();I2C_Delay();}return value;}2.4 应答2.4.1 CPU产⽣⼀个ACK信号void I2C_Ack(void){I2C_SDA_Low();I2C_Delay();I2C_SCL_High();I2C_Delay();I2C_SCL_Low();I2C_Delay();I2C_SDA_High();}2.4.2 CPU产⽣⼀个⾮ACK信号void I2C_NoAck(void){I2C_SDA_High();I2C_Delay();I2C_SCL_High();I2C_Delay();I2C_SCL_Low();I2C_Delay();}2.4.3 CPU产⽣⼀个时钟,并读取器件的ACK应答信号uint8_t I2C_WaitToAck(void){uint8_t redata;I2C_SDA_High();I2C_Delay();I2C_SCL_High();I2C_Delay();if(I2C_SDA_READ()){redata = 1;}else{redata = 0;}I2C_SCL_Low();I2C_Delay();return redata;}三、I2C通信时序图解析 有了上边的I2C总线标准代码的基础,下⾯我们进⼊本博⽂所要讲解的内容,怎么分析I2C的时序图,以O2Micro的OZ9350为例,OZ9350是⼀款模拟前端(AFE)的IC器件。
iic标准时序
iic标准时序
IIC(Inter-Integrated Circuit)是一种双线串行总线,也被称为I2C(发音为"I-squared C")。
它是由Philips公司开发的一种简单、双向、二线制同步串行总线。
IIC标准时序包括起始信号、数据传输、停止信号等步骤。
以下是IIC标准时序的基本步骤:
1.起始信号:当SCL线为高电平,SDA线由高电平跳变为低电平时,表示开始传输数据。
2.数据传输:在起始信号后,可以进行数据传输。
数据传输遵循以下规则:
在SCL线为高电平时,SDA线上的数据必须在稳定的电平状态,并且在SCL 线为低电平时,数据允许改变。
SDA线的数据在时钟信号SCL为高电平时保持稳定,在SCL为低电平时,数据可以改变。
3.停止信号:当SCL线为高电平,SDA线由低电平跳变为高电平时,表示停止传输数据。
4.应答信号:如果接收数据的设备能够正确接收数据,它将在SCL线的高电平期间将SDA线拉低,表示应答。
如果设备不能接收数据或发生错误,它不会拉低SDA线,表示非应答。
5.时钟同步:在数据传输过程中,主设备会生成时钟信号SCL,并用于同步数据传输。
从设备根据主设备的时钟信号来响应。
6.数据长度:一个IIC数据包中可以有1字节的数据,也可以有多个字节的数据。
多字节的数据必须以最高有效字节(MSB)在前的方式进行传输。
注意,上述是基本时序和规则,具体应用可能有所不同。
根据实际设备和具体需求,可能需要进一步了解和应用相关的具体参数和设置。
i2c传输时序
i2c传输时序I2C传输时序I2C(Inter-Integrated Circuit)是一种串行通信协议,用于在集成电路之间进行数据传输。
在I2C传输过程中,时序是非常重要的,它决定了数据的传输速率和可靠性。
本文将介绍I2C传输时序的基本概念、信号传输过程和时序相关的注意事项。
一、I2C传输时序的基本概念1. 时钟线(SCL):I2C总线上的时钟线,由主设备控制。
时钟信号的频率决定了数据传输的速率。
2. 数据线(SDA):I2C总线上的数据线,用于传输数据。
3. 主设备(Master):控制I2C通信的设备。
4. 从设备(Slave):被主设备控制的设备。
5. 起始条件(Start):主设备发送的开始信号,标志着一次传输的开始。
6. 停止条件(Stop):主设备发送的停止信号,表示一次传输的结束。
二、I2C传输时序的信号传输过程1. 起始条件:主设备将SCL线保持高电平,然后将SDA线从高电平切换到低电平,发送起始条件信号。
2. 从设备地址传输:主设备将从设备地址和读/写标志位发送到SDA线上。
从设备地址是每个从设备在I2C总线上的唯一地址。
3. 从设备应答:主设备发送完从设备地址后,释放SDA线,等待从设备的应答。
从设备通过将SDA线拉低来应答主设备。
4. 数据传输:主设备将数据传输到SDA线上,每传输一个字节,都要等待从设备的应答。
5. 停止条件:主设备在数据传输完毕后,发送停止条件信号,即将SCL线保持高电平的同时,将SDA线从低电平切换到高电平。
三、I2C传输时序的注意事项1. 时钟频率选择:时钟频率的选择要考虑主设备和从设备的最大工作频率,以及总线长度和电容负载等因素。
过高的时钟频率可能导致传输错误。
2. 信号电平:I2C总线上的信号电平一般为3.3V或5V,主设备和从设备的电平要保持一致。
3. 上拉电阻:在SDA和SCL线上需要连接上拉电阻,以保证在无信号传输时,线路保持高电平。
4. 总线冲突检测:在多个主设备控制的情况下,可能会发生总线冲突。
IIC总线读写时序
I2cStart();
I2cSendByte(0xa0);//发送写器件地址
I2cSendByte(addr);//发送要写入内存地址
I2cSendByte(dat);//发送数据
I2cStop();
}
/*******************************************************************************
/*******************************************************************************
*函数名: delay
*函数功能:延时函数,i=1时,大约延时10us
*******************************************************************************/
void datapros()
{
disp[0]=smgduan[num/1000];//千位
disp[1]=smgduan[num%1000/100];//百位
disp[2]=smgduan[num%1000%100/10];//个位
disp[3]=smgduan[num%1000%100%10];
{
unsigned char a=0,dat=0;
SDA=1;//起始和发送一个字节之后SCL都是0
Delay10us();
for(a=0;a<8;a++)//接收8个字节
{
SCL=1;
Delay10us();
dat<<=1;
dat|=SDA;
Delay10us();
iic通信协议读写时序
iic通信协议读写时序I2C(Inter-Integrated Circuit)是一种用于连接微控制器和各种外围设备的串行总线协议。
它只需要两根线:一根是双向的数据线SDA,另一根是时钟线SCL。
以下是I2C通信协议的基本读写时序:起始信号:当时钟线SCL为高电平时,数据线SDA由高电平变为低电平,表示开始传输。
这个信号只能由主设备(Master)发起。
地址传输:起始信号后,主设备发送一个7位的设备地址和一个读写位(共8位)。
设备地址用于寻址总线上的特定设备,读写位决定接下来的操作是读还是写。
应答信号:每个接收设备在接收到地址后,都会将其与自身的地址进行比较。
如果匹配,设备会产生一个应答信号(ACK)。
应答信号是在第9个时钟脉冲时,将SDA线拉低。
如果没有设备应答,主设备会检测到一个非应答信号(NACK),并可能终止传输或产生错误。
数据传输:在接收到应答信号后,主设备开始发送或接收数据。
数据是按字节传输的,每个字节后面都会跟随一个应答/非应答位。
数据的传输方向由起始信号后的读写位决定。
停止信号:当所有数据都传输完毕后,主设备会发送一个停止信号以结束传输。
停止信号是在时钟线SCL为高电平时,数据线SDA由低电平变为高电平。
对于写操作,主设备在发送完起始信号和设备地址(写)后,开始发送要写入的数据。
每个数据字节后面都需要等待一个应答信号。
当所有数据都发送完毕后,主设备发送停止信号。
对于读操作,主设备在发送完起始信号和设备地址(读)后,会释放SDA线并在SCL线上产生第9个时钟信号。
被选中的设备在确认是自己的地址后,开始在SDA线上传输数据。
主设备在每个数据字节后面都需要发送一个应答信号(除了最后一个字节)。
当读取完所有数据后,主设备发送一个非应答信号和一个停止信号。
以上是I2C通信协议的基本读写时序,但实际的实现可能会根据设备和需求有所不同。
