i2c协议以及其相关bug分析总结.docx
- 文档编号:24855721
- 上传时间:2023-06-02
- 格式:DOCX
- 页数:13
- 大小:23.35KB
i2c协议以及其相关bug分析总结.docx
《i2c协议以及其相关bug分析总结.docx》由会员分享,可在线阅读,更多相关《i2c协议以及其相关bug分析总结.docx(13页珍藏版)》请在冰豆网上搜索。
i2c协议以及其相关bug分析总结
i2c协议以及其相关bug分析总结
篇一:
I2C协议以及其相关bug分析总结_袁刚20XX1202
一、I2C通信协议......................................................................................................2
1、I2C协议:
.............................................................................................2
2、I2C时序.................................................................................................3
3、I2C协议中文版本...................................................................................7
二、I2C协议中遇到的BUG分析................................................................................8
1、项目A72A中时序问题...........................................................................8
2、T03Lightsensor无ACK问题...................................................................8
3、S26I电池以及F01电池问题...................................................................9
4、现象ACK后面的半高的小毛刺分析......................................................10
5、T05CG-sensor无数据问题....................................................................11
三、I2C协议使用注意事项......................................................................................12
1、I2Clevelshift普通MOS以及levelshiftIC..............................................12
2、I2C使用注意事项以及bug总结............................................................15
文档整理人:
袁刚20XX年12月2日
一、I2C通信协议
1、I2C协议:
I2C总线支持任何IC生产过程(NMOS、CMOS、双极性)。
两线的串行数据SDA和串行时钟SCL线在连接到总线的器件间传递信息,每个器件都有一个唯一的地址识别(无论是微控制器、LCD驱动器、存储器或键盘接口),而且都可以作为一个发送器或接收器,由器件的功能决定,很明显LCD驱动器只是一个接收器,而存储器则既可以接收又可以发送数据。
除了发送器和接收器外器件,在执行数据传输时也可以被看作是主机或从机,如下表1。
主机是初始化总线的数据传输并产生允许传输的时钟信号的器件,此时任何被寻址的器件都被认为是从机。
表格1
①I2C总线的一些特征:
只要求两条总线线路:
一条串行数据线SDA一条串行时钟线SCL
每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机从机关系软件
设定地址主机可以作为主机发送器或主机接收器
它是一个真正的多主机总线如果两个或更多主机同时初始化数据传输可以通过冲突检
测和仲裁防止数据被破坏
串行的8位双向数据传输位速率在标准模式下可达100kbit/s,快速模式下可达
400kbit/s高速模式下可达/s
片上的滤波器可以滤去总线数据线上的毛刺波保证数据完整
连接到相同总线的IC数量只受到总线的最大电容400pF限制
②I2C总线的传输:
I2C总线是一个多主机的总线,这就是说可以连接多于一个能控制总线的器件到总线,由于主机通常是微控制器,让我们考虑以下数据在两个连接到I2C总线的微控制器之间传输的情况。
这突出了I2C总线的主机-从机和接收器-发送器的关系,应当注意的是,这些关系不是持久的,只由当时数据传输的方向决定传输数据的过程如下:
A、假设微控制器A要发送信息到微控制器B
微控制器A(主机)寻址微控制器B(从机)
微控制器A(主机)发送器发送数据到微控制器B(从机)接收器
微控制器A终止传输
B、如果微控制器A想从微控制器B接收信息
微控制器A(主机)寻址微控制器B从机
微控制器A(主机)接收器从微控制器B(从机)发送器接收数据
微控制器A终止传输
在I2C总线上产生时钟信号通常是主机器件的责任。
当在总线上传输数据时,每个主机产生自己的时钟信号,主机发出的总线时钟信号只有在以下的情况才能被改变:
慢速的从机器件控制时钟线并延长时钟信号,或者在发生仲裁时被另一个主机改变。
③I2C数据传输中得信号:
I2C总线在传送数据过程中共有三种类型信号
开始信号:
SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。
结束信号:
SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。
应答信号:
接收数据的从机在接收到8bit数据后,向发送数据的主机发出特定的低电平脉冲,表示已收到数据。
主机向受控单元发出一个信号后,等待受控单元发出一个应答信号,主机接收到应答信号后,根据实际情况作出是否继续传递信号的判断。
若未收到应答信号,由判断为受控单元出现故障。
④I2C数据的有效性:
只有在SDA数据必须在时钟的高电平周期保持稳定,数据线的高或低电平状态只有在SCL线的时钟信号是低电平时才能改变。
图1
⑤I2C总线的优点:
极低的电流消耗
抗高噪声干扰
电源电压范围宽
工作的温度范围广
故障诊断和调试都很简单故障可被立即寻迹
在系统中增加或删除IC不会影响总线的其他电路
2、I2C时序
I2C
的时序主要可以分为:
总线空闲状态、启动信号、停止信号、数据传输位、应答信号、
插入等待时间、重启动信号、时钟同步、总线冲突和总线仲裁、总线封锁状态。
①总线空闲状态。
I2C总线的SDA和SCL两条信号线同时处于高电平时,规定为总线的空闲状态。
此时各个器件的输出级场效应管均处在截止状态,即释放总线,由两条信号线各自的上拉电阻把电平拉高。
②启动信号
在时钟线SCL保持高电平期间,数据线SDA上的电平被拉低(即负跳变),定义为I2C总线的启动信号,它标志着一次数据传输的开始。
启动信号是一种电平跳变时序信号,而不是一个电平信号。
启动信号是由主控器主动建立的,在建立该信号之前I2C总线必须处于空闲状态,如图2
图2
③停止信号
在时钟线SCL保持高电平期间,数据线SDA被释放,使得SDA返回高电平(即正跳变),称为I2C总线的停止信号,它标志着一次数据传输的终止。
如图2
停止信号也是一种电平跳变时序信号,而不是一个电平信号,停止信号也是由主控器主动建立的,建立该信号之后,I2C总线将返回空闲状态。
④数据位传送
在I2C总线上传送的每一位数据都有一个时钟脉冲相对应(或同步控制),即在SCL串行时钟的配合下,在SDA上逐位地串行传送每一位数据。
进行数据传送时,在SCL呈现高电平期间,SDA上的电平必须保持稳定,低电平为数据0,高电平为数据1。
只有在SCL为低电平期间,才允许SDA上的电平改变状态。
逻辑0的电平为低电压,而逻辑1的电平取决于器件本身的正电源电压VDD(当使用独立电源时),如图3所示。
图3
⑤应答信号
I2C总线上的所有数据都是以8位字节传送的,发送器每发送一个字节,就在时钟脉冲9期间释放数据线,由接收器反馈一个应答信号。
应答信号为低电平时,规定为有效应答位(ACK简称应答位),表示接收器已经成功地接收了该字节;应答信号为高电平时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功。
对于反馈有效应答位ACK的要求是,接收器在第9个时钟脉冲之前的低电平期间将SDA线拉低,并且确保在该时钟的高电平期间为稳定的低电平。
如果接收器是主控器,则在它收到最后一个字节后,发送一个NACK信号,以通知被控发送器结束数据发送,并释放SDA线,以便主控接收器发送一个停止信号P,如图4所示。
图4
⑥插入等待时间。
如果被控器需要延迟下一个数据字节开始传送的时间,则可以通过把时钟线SCL电平拉低并且保持,使主控器进入等待状态。
一旦被控器释放时钟线,数据传输就得以继续下去,这样就使得被控器得到足够时间转移已经收到的数据字节,或者准备好即将发送的数据字节。
带有CPU的被控器在对收到的地址字节做出应答之后,需要一定的时间去执行中断服务子程序,来分析或比较地址码,其间就把SCL线钳位在低电平上,直到处理妥当后才释放SCL线,进而使主控器继续后续数据字节的发送,如图5所示。
篇二:
I2C协议总结
I2C协议总结
串行总线I2C由数据线SDA和时钟线SCL构成,可实现完善的双工同步数据传输,能方便的构成多机系统和外围器件扩展系统,I2C采用器件地址的硬件设置方法,通过软件进行寻址。
I2C总线系统中,以共同挂接的I2C总线作为通信手段的每个器件均构成I2C总线的一个器件节点。
根据节点是否带有智能,可将这些节点分为主器件节点和外围器件节点。
主器件节点可作为主控器,用来对总线进行主动控制。
在一次通信过程中,由主控器负责向总线上发送启动信号、同步时钟信号、被控器件地址码、重启动信号和停止信号等。
而被控器(即受控器件)可分别由这两种节点充当
。
如果在系统中同时存在2个或2态。
由于I2C引入了同步时钟和总线仲裁机制,即使出现总线冲突也不会造成信息丢失。
发生总线冲突时,为了避免信息丢失,需要进行总线仲裁以决定谁是主控器。
总线仲裁是通过裁定SDA线上的控制权来解决的。
时钟同步是连接到SCL线上的所有器件进行“线与”实现的。
只要有一个器件向SCL输出低电平,SCL就为低电平。
因此SCL线的低电平时间由时钟低电平期最长的器件决定,而高电平时间由时钟高电平期最短的器件决定,由此形成了时钟的同步。
下图所示为一次完整的通信过程的时序。
图1i2c总线数据传送时序
(注:
图中,SCL线上1~7位为7位地址码,第8位为读写位R\~D,第9位为ACK应答位,紧接着的为第一个数据字节,然后是一位应答位,后面继续第2个数据字节。
)
如图所示,主控器在检测到总线空闲(数据线SDA和时钟线SCL同时处于高电平状态)时,首先发送一个启动信号S,它标志着一次数据传输的开始。
之后主控器发送一个地址字节包括7位地址码和一个读写位。
被控器收到地址字节后反馈一个应答信号ACK=0,主控器接收到ACK后开始发送第一
个数据字节,被控器接收到第一个数据字节后,由反馈一个应答信号ACK=0。
主控器收到应答信号后开始传送第二个数据字节。
依次循环,主控器发送完数据后,就发送一个停止信号P,并释放总线,使得总线返回空闲状态。
在通信过程应注意以下6点:
1进行数据传送时,在SCL为高电平期间,SDA线上电平必须保持稳定,只有SCL为低时,才允许SDA线上电平改变状态。
并且每个字节传送时都是高位在前。
2对于应答信号,ACK=0时为有效应答位,说明接收器已经成功接收到该字节,若为1则说明接受不成功。
3如果被控器需要延迟下一个下一个数据字节开始传送的时间,可以通过把SCL电平拉低并保持来强制主控器进入等待状态。
4主控器完成一次通信后还想继续占用总线在进行一次通信,而又不释放总线,就要利用重启动信号Sr。
它既作为前一次数据传输的结束,又作为后一次传输的开始。
5总线冲突时,按“低电平优先”的仲裁原则,把总线判给在数据线上先发送低电平的主器件。
6在特殊情况下,若需禁止所有发生在I2C总线上的通信,可采用封锁或关闭总线,具体操作为挂接在总线上的任一器件将SCL锁定在低电平即可。
什么是I2C协议
什么是I2C协议
I2C协议是单片机与其它芯片常用的通讯协议,由于只需要两根线,所以很好使用。
1.I2C总线的特点
只要求两条总线线路一条串行数据线SDA一条串行时钟线SCL
每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机/从机关系软件设定地址;主机可以作为主发送器或主机接收器
它是一个真正的多主机总线,如果两个或更多主机同时初始化数据传输可以通过冲突检测和仲裁防止数据被破坏
串行的8位双向数据传输位速率在标准模式下可达100kbit/s快速模式下可达400kbit/s高速模式下可达.4Mbit/s
片上的滤波器可以滤去总线数据线上的毛刺波保证数据完整
连接到相同总线的IC数量只受到总线的最大电容400pF限制
2.I2C总线术语的定义
3.I2C协议总线信号时序分析
数据的有效性:
SDA线上的数据必须在时钟的高电平周期保持稳定数据线的高或低电平状态只有在SCL线的时钟信号是低电平时才能改变。
如图I2C
总线的位传输所示。
图I2C总线的位传输
起始和停止条件
当SCL线是高电平时,SDA线从高电平向低电平切换,这个情况表示起始条件。
当SCL线是高电平时,SDA线由低电平向高电平切换表示停止条件。
如图I2C起始和停止条件所示。
图起始和停止条件
总线空闲状态
SDA和SCL两条信号线都处于高电平,即总线上所有的器件都释放总线,两条信号线各自的上拉电阻把电平拉高;
数据传输与应答信号ACK
发送到SDA线上的数据必须是8位的。
每次传输可以发送的数据不受限制。
每个字节后必须在时钟的第9个脉冲期间释放数据总线(SDA为高),由接收器发送一个ACK来表示数据成功接收。
如图I2C总线响应。
图I2C总线响应
首先传输的是数据的最高位(MSB)。
如果从机要完成一些其他功能后(例如一个内部中断服务程序)才能接收或发送下一个完整的数据字节,可以使时钟SCL保持低电平迫使主机进入等待状态。
当从机准备好接收下一个数据字节并释放时钟线SCL后,数据传输继续。
如图I2C总线数据传输所示。
图I2C总线数据传输
4.地址格式
数据的传输遵循如图完整的数据传送所示,在起始条件之后,发送一个7位的从机地址,紧接着第8位是数据方向(R/—W),0-表示发送数据(写),1-表示接收数据(读)。
数据传输一般由主机产生的停止位(P)终止。
但是如果主机仍希望在总线上通讯,它可以产生重复起始条件(Sr),和寻址另一个从机,而不是首先产生一个停止条件。
在这种传输中,可能有不同的读/写格式结合。
如图I2C总线完整的数据传输。
篇三:
协议总结
I2C协议
技术性能:
工作速率有100K和400K两种;
支持多机通讯;
支持多主控模块,但同一时刻只允许有一个主控;
由数据线SDA和时钟SCL构成的串行总线;
每个电路和模块都有唯一的地址;
每个器件可以使用独立电源
二.基本工作原理:
以启动信号START来掌管总线,以停止信号STOP来释放总线;
每次通讯以START开始,以STOP结束;
启动信号START后紧接着发送一个地址字节,其中7位为被控器件的地址码,一位为读/写控制位R/W,R./W位为0表示由主控向被控器件写数据,R/W为1表示由主控向被控器件读数据;
当被控器件检测到收到的地址与自己的地址相同时,在第9个时钟期间反馈应答信号;每个数据字节在传送时都是高位在前;
写通讯过程:
1.主控在检测到总线空闲的状况下,首先发送一个START信号掌管总线;
2.发送一个地址字节;
3.当被控器件检测到主控发送的地址与自己的地址相同时发送一个应答信号;
4.主控收到ACK后开始发送第一个数据字节;
5.被控器收到数据字节后发送一个ACK表示继续传送数据,发送NACK表示传送数据结束;
6.主控发送完全部数据后,发送一个停止位STOP,结束整个通讯并且释放总线;
读通讯过程:
1.主控在检测到总线空闲的状况下,首先发送一个START信号掌管总线;
2.发送一个地址字节;
3.当被控器件检测到主控发送的地址与自己的地址相同时发送一个应答信号;
4.主控收到ACK后释放数据总线,开始接收第一个数据字节;
5.主控收到数据后发送ACK表示继续传送数据,发送NACK表示传送数据结束;
6.主控发送完全部数据后,发送一个停止位STOP,结束整个通讯并且释放总线;
四.总线信号时序分析
1.总线空闲状态
SDA和SCL两条信号线都处于高电平,即总线上所有的器件都释放总线,两条信号线各自的上拉电阻把电平拉高;
2.启动信号START
时钟信号SCL保持高电平,数据信号SDA的电平被拉低。
启动信号必须是跳变信号,而且在建立该信号前必修保证总线处于空闲状态;
3.停止信号STOP
时钟信号SCL保持高电平,数据线被释放,使得SDA返回高电平,停止信号也必
须是跳变信号。
4.数据传送
SCL线呈现高电平期间,SDA线上的电平必须保持稳定,低电平表示0,高电平表示1。
只有在SCL线为低电平期间,SDA上的电平允许变化。
5.应答信号ACK
I2C总线的数据都是以字节的方式传送的,发送器件每发送一个字节之后,在时钟的第9个脉冲期间释放数据总线,由接收器发送一个ACK来表示数据成功接收。
6.无应答信号NACK
在时钟的第9个脉冲期间发送器释放数据总线,接收器不拉低数据总线表示一个NACK,NACK有两种用途:
a.一般表示接收器未成功接收数据字节;
b.当接收器是主控器时,它收到最后一个字节后,应发送一个NACK信号,以通知被控发送器结束数据发送,并释放总线,以便主控接收器发送一个停止信号STOP。
五.寻址约定
地址的分配方法有两种:
1.含CPU的智能器件,地址由软件初始化时定义,但不能与其它的器件有冲突;
2.不含CPU的非智能器件,由厂家在器件内部固化,不可改变。
高7位为地址码,其分为两部分:
1.高4位属于固定地址不可改变,由厂家固化的统一地址;
2.低三位为引脚设定地址,可以由外部引脚来设定;
开始信号:
SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。
结束信号:
SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。
应答信号:
接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。
CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判断。
若未收到应答信号,由判断为受控单元出现故障。
下面对I2C总线通信过程中出现的几种信号状态和时序进行分析。
①总线空闲状态。
I2C总线总线的SDA和SCL两条信号线同时处于高电平时,规定为总线的空闲状态。
此时各个器件的输出级场效应管均处在截止状态,即释放总线,由两条信号线各自的上拉电阻把电平拉高。
②启动信号。
在时钟线SCL保持高电平期间,数据线SDA上的电平被拉低(即负跳变),定义为I2C总线总线的启动信号,它标志着一次数据传输的开始。
启动信号是一种电平跳变时序信号,而不是一个电平信号。
启动信号是由主控器主动建立的。
在建立该信号之前I2C总线必须处于空闲状态,如图1所示
③停止信号。
在时钟线SCL保持高电平期间,数据线SDA被释放,使得SDA返回高电平(即正跳变),称为I2C总线的停止信号,它标志着一次数据传输的终止。
停止信号也是一种电平跳变时序信号,而不是一个电平信号,停止信号也是由主控器主动建立的,建立该信号之后,I2C总线将返回空闲状态。
④数据位传送。
在I2C总线上传送的每一位数据都有一个时钟脉冲相对应(或同步控制),即在SCL串行时钟的配合下,在SDA上逐位地串行传送每一位数据。
进行数据传送时,在SCL呈现高电平期间,SDA上的电平必须保持稳定,低电平为数据0,高电平为数据1。
只有在SCL为低电平期间,才允许SDA上的电平改变状态。
逻辑0的电平为低电压,而逻辑1的电平取决于器件本身的正电源电压VDD(当使用独立电源时),如图2所示。
⑤应答信号。
I2C总线上的所有数据都是以8位字节传送的,发送器每发送一个字节,就在时钟脉冲9期间释放数据线,由接收器反馈一个应答信号。
应答信号为低电平时,规定为有效应答位(ACK简称应答位),表示接收器已经成功地接收了该字节;应答信号为高电平时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功。
对于反馈有效应答位ACK的要求是,接收器在第9个时钟脉冲之前的低电平期间将SDA线拉低,并且确保在该时钟的高电平期间为稳定的低电平。
如果接收器是主控器,则在它收到最后一个字节后,发送一个NACK信号,以通知被控发送器结束数据发送,并释放SDA线,以便主控接收器发送一个停止信号P,如图3所示。
⑥插入等待时间。
如果被控器需要延迟下一个数据字节开始传送的时间,则可以通过把时钟线SCL电平拉低并且保持,使主控器进入等待状态。
一旦被控器释放时钟线,数据传输就得以继续下去,这样就使得被控器得到足够时间转移已经收到的数据字节,或者准备好即将发送的数据字节。
带有CPU的被控器在对收到的地址字节做出应答之后,需要一定的时间去执行中断服务子程序,来分析或比较地址码,其间就把SCL线钳位在低电平上,直到处理妥当后才释放SCL线,进而使主控器继续后续数据字节的发送,如图4所示。
⑦重启动信号。
在主控器控制总线期间完成了一次数据通信(发送或接收)之后,如果想继续占用总线再进行一次数据通信(发送或接收),而又不释放总线,就需要利用重启动Sr信号时序。
重启动信号Sr既作为前一次数据传输的结束,又作为后一次数据传输的开始。
利用重启动信号的优点是,在前后两次通信之间主控器不需要释放总线,这样就不会丢失总线的控制权,即不让其他主器件节点抢占总线。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- i2c 协议 以及 相关 bug 分析 总结