i2c总线协议标准速率.docx
- 文档编号:26535601
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:12
- 大小:22.53KB
i2c总线协议标准速率.docx
《i2c总线协议标准速率.docx》由会员分享,可在线阅读,更多相关《i2c总线协议标准速率.docx(12页珍藏版)》请在冰豆网上搜索。
i2c总线协议标准速率
竭诚为您提供优质文档/双击可除
i2c总线协议,标准速率
篇一:
iic总线协议最佳理解
iic总线协议
1)iic总线的概念
iic总线是一种串行总线,用于连接微控制器及其外围设备,具有以下特点:
①两条总线线路:
一条串行数据线(sda),一条串行时钟线(scl)②每个连接到总线的器件都可以使用软件更具它的唯一的地址来识别③传输数据的设备间是简单的主从关系
④主机可以用作主机发送器或主机接收器
⑤它是一个多主机总线,两个或多个主机同时发起数据传输时,可以通过冲突检测和仲裁来方式数据被破坏
⑥串行的8位双向数据传输,位速率在标准模式下可达100kbit/s,在快速模式下可达400kbit/s,在高速模式下可达3.4mbit/s
⑦片上的滤波器可以增加干扰功能,保证数据的完整
⑧连接到同一总线上的ic数量受到总线最大电容的限制
发送器:
发送数据到总线的器件
接收器:
从总线接收数据的器件
主机:
发起/停止数据传输、提供时钟信号的器件
从机:
被主机寻址的器件
多主机:
可以有多个主机试图去控制总线,但是不会破坏数据
仲裁:
当多个主机试图去控制总线时,通过仲裁可以使得只有一个主机获得总线控制权,并且它传输的信息不会被破坏
同步:
多个器件同步时钟信号的过程
i2c
总线通过上拉电阻接正电源。
当总线空闲时,两根线均为高电平。
连到总线上的任一器件输出的低电平,都将使总线的信号变低,即各器件的sda及scl都是线“与”关系。
每个接到i2c总线上的器件都有唯一的地址。
主机与其它器件间的数据传送可以是由主机发送数据到其它器件,这时主机即为发送器。
由总线上接收数据的器件则为接收器。
在多主机系统中,可能同时有几个主机企图启动总线传送数据。
为了避免混乱,i2c总线要通过总线仲裁,以决定由哪一台主机控制总线。
在80c51单片机应用系统的串行总线扩展中,我们经常遇到的是以80c51单片机为主机,其它接口器件为从机的单主机情况。
数据位的有效性规定:
i2c总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态
才允许变化。
2)iic总线的信号类型
iic总线在传送数据过程中共有3种类型信号:
开始信号、结束信号和响应信号①开始信号(s):
scl为高电平时,sda由高电平向低电平跳变,表示起始信号,开始传送数据
②结束信号(p):
scl为高电平时,sda由低电平向高电平跳变,表示结束信号,结束传送数据
③响应信号(ack):
接收器在接收到8位数据后,在第9个时钟周期,拉低sda电平。
即接收数据的ic在接收到8bit数据后,向发送数据的ic发出特定的低电平脉冲,表示已收到数据。
cpu向受控单元发出一个信号后,等待受控单元发出一个应答信号,cpu接收到应答信号后,根据实际情况作出是否继续传递信号的判断。
若未收到应答信号,由判断为受控单元出现故障。
开始信号s和结束信号p
起始和终止信号都是由主机发出的,在起始信号产生后,总线就处于被占用的状态;在终止信号产生后,总线就处于空闲状态。
连接到i2c总线上的器件,若具有i2c总线的硬件接口,则很容易检测到起始和终止信号。
对于不具备i2c总线硬件接口的有些单片机来说,为了检测起始和终止信号,必须保证在每个时钟周期内对数据线sda采样两次。
接收器件收到一个完整的数据字节后,有可能需要完成一些其它工作,如处理内部中断服务等,可能无法立刻接收下一个字节,这时接收器件可以将scl线拉成低电平,从而使主机处于等待状态。
直到接收器件准备好接收下一个字节时,再释放scl线使之为高电平,从而使数据传送可以继续进行。
应答信号ack
3)iic总线的数据传输格式
发送到sda线上的每个字节必须是8位的,每次传输可以发送的字节数量不受限制。
每一个字节必须保证是8位长度。
数据传送时,先传送最高位(msb),每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9位)。
如果从机要完成一些其他功能后才能继续接收或发送,从机可以拉低scl
迫使主机进入等待状态。
当从机准备好接收并释放
scl后,数据继续传输。
如果主机在传输数据期间也需要完成一些其他功能叶可以拉低scl以占住总线。
启动一个传输时,主机先发出s信号,然后发出8位数据。
前7位为从机地址,第8位表示传输方向(0表示写操作,1表示读操作)。
被选中的从机发出响应信号。
跟着传输一系列字节及响应位。
最后,主机发出p信号结束。
由于某种原因从机不对主机寻址信号应答时(如从机正在进行实时性的处理工作而无法接收总线上的数据),它必须将数据线置于高电平,而由主机产生一个终止信号以结束总线的数据传送。
如果从机对主机进行了应答,但在数据传送一段时间后无法继续接收更多的数据时,从机可以通过对无法接收的第一个数据字节的“非应答”通知主机,主机则应发出终止信号以结束数据的继续传送。
当主机接收数据时,它收到最后一个数据字节后,必须向从机发出一个结束传送的信号。
这个信号是由对从机的“非应答”来实现的。
然后,从机释放sda线,以允许主机产生终止信号。
篇二:
i2c总线时序详解
i2c总线时序详解
由于连接到i2c总线的器件有不同种类的工艺(cmos、
nmos、双极性),逻辑0(低)和逻辑1(高)的电平不是固定的,它由电源Vcc的相关电平决定,每传输一个数据位就产生一个时钟脉冲。
数据的有效性
sda线上的数据必须在时钟的高电平周期保持稳定。
数据线的高或低电平状态只有在scl线的时钟信号是低电平时才能改变。
i2c位传输数据有效性
起始和停止条件
scl线是高电平时,sda线从高电平向低电平切换,这个情况表示起始条件;
scl线是高电平时,sda线由低电平向高电平切换,这个情况表示停止条件。
起始和停止条件一般由主机产生,总线在起始条件后被认为处于忙的状态
起始和停止条件
,在停止条件的某段时间后总线被认为再次处于空闲状态。
如果产生重复起始条件而不产生停止条件,总线会一直处于忙的状态,
字节格式
发送到sda线上的每个字节必须为8位,每次传输可以发送的字节数量不受限制。
每个字节后必须跟一个响应位。
首先传输的是数据的最高位(msb),如果从机要完成一些其他功能后(例如一个内部中断服务程序)才能接收或发送下一个完整的数据字节,可以使时钟线scl保持低电平,迫使主机进入等待状态,当从机准备好接收下一个数据字节并释放时钟线scl后数据传输继续。
应答响应
数据传输必须带响应,相关的响应时钟脉冲由主机产生。
在响应的时钟脉冲期间发送器释放sda线(高)。
在响应的时钟脉冲期间,接收器必须将sda线拉低,使它在这个时钟脉冲的高电平期间保持稳定的低电平。
通常被寻址的接收器在接收到的每个字节后,除了用cbus地址开头的数。
i2c总线数据传输和应答
据,必须产生一个响应。
当从机不能响应从机地址时(例如它正在执行一些实时函数不能接收或发送),从机必须使数据线保持高电平,主机然后产生一个停止条件终止传输或者产生重复起始条件开始新的传输。
如果从机接收器响应了从机地址,但是在传输了一段时间后不能接收更多数据字节,主机必须再一次终止传输。
这个情况用从机在第一个字节后没有产生响应来表示。
从机使数据线保持高电平,主机产生一个停止或重复起始条件。
如果传输中有主机接收器,它必须通过在从机不产生时钟的最后一个字节不产生一个响应,向从机发送器通知数据结束。
从机发送器必须
7位寻址
第一个字节的头7位组成了从机地址,最低位(lsb)是第8位,它决定了传输的
普通的和带重复开始条件的7位地址格式
方向。
第一个字节的最低位是“0”,表示主机会写信息到被选中的从机;“1”表示主机会向从机读信息,当发送了一个地址后,系统中的每个器件都在起始条件后将头7位与它自己的地址比较,如果一样,器件会判定它被主机寻址,至于是从机接收器还是从机发送器,都由R/w位决定。
10位寻址
10位寻址和7位寻址兼容,而且可以结合使用。
10位寻址采用了保留的1111xxx作为起始条件(s),或重复起始条件(sr)的后第一个字节的头7位。
10位寻址不会影响已有的7位寻址,有7位和10位地址的器件可以连接
i2c总线10位地址格式
到相同的i2c总线。
它们都能用于标准模式(F/s)和高速模式(hs)系统。
保留地址位1111xxx有8个组合,但是只有4个组合11110xx用于10位寻址,剩下的4个组合11111xx保留给后续增强的i2c总线。
10位从机地址是由在起始条件(s)或重复起始条件(sr)后的头两个字节组成。
第一个字节的头7位是11110xx的组合,其中最后两位(xx)是10位地址的两个最高位(msb)。
第一个字节的第8位是R/w位,决定了传输的方向,第一个字节的最低位是“0”表示主机将写信息到选中的从机,“1”表示主机将向从机读信息。
如果R/w位是“0”,则第二个字节是10位从机地址剩下的8位;如果R/w位是“1”则下一个字节是从机发送给主机的数据。
编辑本段快速和高速模式
快速模式
快速模式器件可以在400kbit/s下接收和发送。
最小要求是:
它们可以和400kbit/s传输同步,可以延长scl信号的低电平周期来减慢传输。
快速模式器件都向下兼容,可以和标准模式器件在0~100kbit/s的i2c总线系统通讯。
但是,由于标准模式器件不向上兼容,所以不能在快速模式i2c总线系统中工作。
快速模式i2c总线规范与标准模式相比有以下额外的特征:
1、最大位速率增加到400kbit/s;
2、调整了串行数据(sda)和串行时钟(scl)信号的时序;
3、快速模式器件的输入有抑制毛刺的功能,sda和scl输入有施密特触发器;
4、快速模式器件的输出缓冲器对sda和scl信号的下降沿有斜率控制功能;
5、如果快速模式器件的电源电压被关断,sda和scl的i/o管脚必须悬空,不能阻塞总线;
6、连接到总线的外部上拉器件必须调整以适应快速模式i2c总线更短的最大允许上升时间。
对于负载最大是200pF的总线,每条总线的上拉器件可以是一个电阻,对于负载在200pF~400pF之间的总线,上拉器件可以是一个电流源(最大值3ma)或者是一个开关电阻电路。
高速模式
高速模式(hs模式)器件对i2c总线的传输速度有具大的突破。
hs模式器件可以在高达3.4mbit/s的位速率下传输信息,而且保持完全向下兼容快速模式或标准模式(F/s模式)器件,它们可以在一个速度混合的总线系统中双向通讯。
hs模式传输除了不执行仲裁和时钟同步外,与F/s模式系统有相同的串行总线协议和数据格式。
高速模式下i2c总线规范如下:
1、hs模式主机器件有一个sdah信号的开漏输出缓冲器和一个在sclh输出的开漏极下拉和电流源上拉电路。
这个电流源电路缩短了sclh信号的上升时间,任何时侯在hs模式,只有一个主机的电流源有效;
2、在多主机系统的hs模式中,不执行仲裁和时钟同步,以加速位处理能力。
仲裁过程一般在前面用F/s模式传输主机码后结束;
3、hs模式主机器件以高电平和低电平是1:
2的比率产生一个串行时钟信号。
解除了建立和保持时间的时序要求;
4、可以选择hs模式器件有内建的电桥。
在hs模式传输中,hs模式器件的高速数据(sdah)和高速串行时钟(sclh)线通过这个电桥与F/s模式器件的sda和scl线分隔开来。
减轻了sdah和sclh线的电容负载,使上升和下降时间更快;
5、hs模式从机器件与F/s从机器件的唯一差别是它们工作的速度。
hs模式从机在sclh和sdah输出有开漏输出的缓冲器。
sclh管脚可选的下拉晶体管可以用于拉长sclh信号的低电平,但只允许在hs模式传输的响应位后进行;
6、hs模式器件的输出可以抑制毛刺,而且sdah和sclh输出有一个施密特触发器;
7、hs模式器件的输出缓冲器对sdah和sclh信号的下降沿有斜
篇三:
i2c协议
iic即inter-integratedcircuit(集成电路总线),这种总线类型是由飞利浦半导体公司在八十年代初设计出来的,主要是用来连接整体电路(ics),iic是一种多向控制总线,也就是说多个芯片可以连接到同一总线结构下,同时每个芯片都可以作为实时数据传输的控制源。
这种方式简化了信号传输总线。
1.i2c简介:
即i2c,一种总线结构。
例如:
内存中的spd信息,通过iic,与bx芯片组联系,iic存在于英特尔piix4结构体系中。
随着大规模集成电路技术的发展,把cpu和一个单独工作系统所必需的Rom、Ram、i/o端口、a/d、d/a等外围电路集成在一个单片内而制成的单片机或微控制器愈来愈方便。
目前,世界上许多公司生产单片机,品种很多。
其中包括各种字长的cpu,各种容量的Rom、Ram以及功能各异的i/o接口电路等等,但是,单片机的品种规格仍然有限,所以只能选用某种单片机来进行扩展。
扩展的方法有两种:
一种是并行总线,另一种是串行总线。
由于串行总线的连线少,结构简单,往往不用专门的母板和插座而直接用导线连接各个设备。
因此,采用串行线可大大简化系统的硬件设计。
philips公司早在十几年前就推出了i2c串行总线,利用该总线可实现多主机系统所需的裁决和高低速设备同步等功能。
因此,这是一种高性能的串行总线。
飞利浦电子公司日前推出新型二选一i2c主选择器,可以使两个i2c主设备中的任何一个与共享资源连接,广泛适用于从mp3播放器到服务器等计算、通信和网络应用领域,从而使制造商和终端用户从中获益。
pca9541可以使两个i2c主设备在互不连接的情况下与同一个从设备相连接,从而简化了设计的复杂性。
此外,新产品以单器件替代了i2c多个主设备应用中的多个芯片,有效节省了系统成本。
2.硬件结构:
i2c串行总线一般有两根信号线,一根是双向的数据线sda,另一根是时钟线scl。
所有接到i2c总线设备上的串行数据sda都接到总线的sda上,各设备的时钟线scl接到总线的scl上。
为了避免总线信号的混乱,要求各设备连接到总线的输出端时必须是漏极开路(od)输出或集电极开路(oc)输出。
设备上的串行数据线sda接口电路应该是双向的,输出电路用于向总线上发送数据,输入电路用于接收总线上的数据。
而串行时钟线也应是双向的,作为控制总线数据传送的主机,一方面要通过scl输出电路发送时钟信号,另一方面还要检测总线上的scl电平,以决定什么时候发送下一个时钟脉冲电平;作为接受主机命令的从机,要按总线上的scl信号发出或接收sda上的信号,也可以向scl线发出低电平信号以延长总线时钟信号周期。
总线空闲时,因各设备都是开漏输出,上拉电阻Rp使sda和scl线都保持高电平。
任一设备输出的低电平都将使相应的总线信号线变低,也就是说:
各设备的sda是“与”关系,scl也是“与”关系。
总线对设备接口电路的制造工艺和电平都没有特殊的要求(nmos、cmos都可以兼容)。
在i2c总线上的数据传送率可高达每秒十万位,高速方式时在每秒四十万位以上。
另外,总线上允许连接的设备数以其电容量不超过400pF为限。
总线的运行(数据传输)由主机控制。
所谓主机是指启动数据的传送(发出启动信号)、发出时钟信号以及传送结束时发出停止信号的设备,通常主机都是微处理器。
被主机寻访的设备称为从机。
为了进行通讯,每个接到i2c总线的设备都有一个唯一的地址,以便于主机寻
访。
主机和从机的数据传送,可以由主机发送数据到从机,也可以由从机发到主机。
凡是发送数据到总线的设备称为发送器,从总线上接收数据的设备被称为接受器。
i2c总线上允许连接多个微处理器以及各种外围设备,如存储器、led及lcd驱动器、a/d及d/a转换器等。
为了保证数据可靠地传送,任一时刻总线只能由某一台主机控制,各微处理器应该在总线空闲时发送启动数据,为了妥善解决多台微处理器同时发送启动数据的传送(总线控制权)冲突,以及决定由哪一台微处理器控制总线的问题,i2c总线允许连接不同传送速率的设备。
多台设备之间时钟信号的同步过程称为同步化。
3.数据传输:
在i2c总线传输过程中,将两种特定的情况定义为开始和停止条件:
当scl保持“高”时,sda由“高”变为“低”为开始条件;当scl保持“高”且sda由“低”变为“高”时为停止条件。
开始和停止条件均由主控制器产生。
使用硬件接口可以很容易地检测到开始和停止条件,没有这种接口的微机必须以每时钟周期至少两次对sda取样,以检测这种变化。
sda线上的数据在时钟“高”期间必须是稳定的,只有当scl线上的时钟信号为低时,数据线sda上的“高”或“低”状态才可以改变。
输出到sda线上的每个字节必须是8位,每次传输的字节不受限制,但每个字节必须要有一个应答ack。
如果一接收器件在完成其他功能(如一内部中断)前不能接收另一数据的完整字节时,它可以保持时钟线scl为低,以促使发送器进入等待状态;当接收器准备好接受数据的其它字节并释放时钟scl后,数据传输继续进行。
数据传送具有应答是必须的。
与应答对应的时钟脉冲由主控制器产生,发送器在应答期间必须下拉sda线。
当寻址的被控器件不能应答时,数据保持为高并使主控器产生停止条件而终止传输。
在传输的过程中,在用到主控接收器的情况下,主控接收器必须发出一数据结束信号给被控发送器,从而使被控发送器释放数据线,以允许主控器产生停止条件。
i2c总线在开始条件后的首字节决定哪个被控器将被主控器选择,例外的是“通用访问”地址,它可以在所有期间寻址。
当主控器输出一地址时,系统中的每一器件都将开始条件后的前7位地址和自己的地址进行比较。
如果相同,该器件即认为自己被主控器寻址,而作为被控接收器或被控发送器则取决于R/w位。
4.应用:
i2c总线是各种总线中使用信号线最少,并具有自动寻址、多主机时钟同步和仲裁等功能的总线。
因此,使用i2c总线设计计算机系统十分方便灵活,体积也小,因而在各类实际应用中得到广泛应用。
目前,51、96系列的单片机应用很广,但是由于它们都没有i2c总线接口,从而限制了在这些系统中使用具有i2c总线接口的器件。
通过对i2c总线时序的分析,可以用51单片机的两根i/o线来实现i2c总线的功能。
接i2c总线规定:
scl线和sda线是各设备对应输出状态相“与”的结果,任一设备都可以用输出低电平的方法来延长scl的低电平时间,以迫使高速设备进入等待状态,从而实现不同速度设备间的时钟同步。
因此,即使时钟脉冲的高、低电平时间长短不一,也能实现数据的可靠传送,可以用软件控制i/o口做i2c接口。
在单主控器的系统中,时钟线仅由主控器驱动,因此可以用51系列的一根i/o线作为scl的信号线,将其设置为输出方式(即sda=0);,并由软件控制来产生串行时钟信号。
在实际系统中使用了p1.3。
另一根i/o线p1.2作为i2c总线的串行数据线sda,可在软件控制下只能在时钟scl的低电平期间读取或输出数据。
系统传输数据的过程如下:
先由单片机发出一个启始数据信号,接着送出要访问器件的7位地址数据,并等待被控器件的应答信号。
当收到应答信号后,根据访问要求进行相应的操作。
如果是读入数据,则数据线可一直设为输入方式,中间不需要改变sda线的工作方式,每读入一个字节均应依次检测应答信号;如果是输出数据,则首先将sda设置为输出方式,当发送完一个字节后,需要改变sda线为输入方式,此时读入被控器件的应答信号就完成了一个字节的传送。
当所有数据传输完毕后,应向sda发出一个停止信号,以结束该次数据传输。
5.i2c范例:
下面给出51系列用c语言实现启始、停止、读、写、应答的程序,读者也可以根据i2c总线时序在96系列或其它单片机上实现i2c总线接口。
voidstart()//iic开始,当scl保持“高”时,sda由“高”变为“低”为开始条件{
sda=1;
delayms();
scl=1;
delayms();
sda=0;
delayms();
scl=0;
}
voidstop()//iic结束,当scl保持“高”且sda由“低”变为“高”时为停止条件{
sda=0;
delayms();
scl=1;
delayms();
sda=1;
delayms();
}
//iic读取应答
voidRack()
{
sda=1;
nop4();
scl=1;
nop4();
scl=0;
}
//iic发送非应答
voidno_ack()
{
sda=1;
scl=1;
nop4();
scl=0;
sda=0;
}
//iic向从设备写入一字节数据voidwrite_a_byte(ucharb){
uchari;
for(i=0;i {
b sda=cy;_
nop_();
scl=1;
nop4();
scl=0;
}
Rack();
}
//iic向从设备的指定地址写入数据voidwrite_iic(ucharaddr,uchardat){
start();
write_a_byte(0xa0);
write_a_byte(addr);
write_a_byte(dat);
stop();
delayms(10);
}
//iic从从设备读取数据ucharRead_a_byte()
{
uchari,b;
for(i=0;i {
scl=1;b returnb;
}
//iic从从设备的当前地址读取数据ucharRead_current()
{
uchard;
start();
write_a_byte(0xa1);
d=Read_a_byte();
no_ack();
stop();
returnd;
}
//iic从从设备的任意地址读取数据ucharRandom_Read(ucharaddr){
start();
write_a_byte(0xa0);
write_a_byte(addr);
stop();
returnRead_current();
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- i2c 总线 协议 标准 速率