I2C总线中文讲解,详尽通俗

合集下载

TP I2C总线介绍

TP I2C总线介绍

I2C总线接口一、 I2C总线协议I2C总线是一种串行数据传输总线,连接master(主机)和slave(从机),在两者间进行数据传输。

I2C总线有两根传输线,一根是时钟线SCL,一根是数据线SDA。

其中时钟线由主机控制,数据线是双向工作总线,传输数据,数据传输格式为每传输一个字节后传输一位应答位(应答位低电平有效);两者均通过上拉电阻与电源连接,保持高电平。

+VccSCLSDAI2C总线连接I2C总线在主机和从机之间传输数据时可以分为主机向从机写入数据和从机由主机读取数据两种工作模式。

1、主机向从机写入数据在这种工作模式下主机作为发送器,发送数据;从机作为接收机,接收数据。

2、主机由从机读取数据在这种工作模式下从机作为发送器,发送数据;主机作为接收机,接收数据。

I2C 总线的工作原理:I2C 总线在传输数据时首先要判断其是否启动,启动后对从机进行寻址和读写判断,随后根据是否应答来传输数据,最后再判断总线是否停止。

I2C 总线启动判断:当SCL 处于高电平时,SDA 由高电平变为低电平,标志着总线启动。

I2C 总线停止判断:当SCL 处于高电平时,SDA 由低电平变为高电平,标志着总线停止。

当I2C 总线启动后且未停止时,SDA 在SCL 的低电平发生跳变,在SCL 高电平时保持稳定,保证数据能够被采集。

主机首先发送一个字节的数据对从机进行寻址和读写判断;其中数据的传输先发送最高位,第一个发送字节的高7位是从机地址,最低位是数据读写判断位。

当从机接收到地址后判断是否为其地址,然后对主机应答或非应答。

当主机接收到应答以后开始向从机写入数据或由从机读取数据。

主机向从机写入数据时,每完成一个字节,从机都向主机应答;主机由从机读取数据时,每完成一个字节,主机都对从机应答,当主机读完最后一个字节时主机对从机应答取反。

二、 模块数据流I2C总线接口模块设计图i2c_ctrl 模块:从机读写状态机模块i2c_shift模块:从机控制信号、应答等产生模块i2c_intf_ctrl模块:写串并转换、读数据存储模块主机向从机写入数据:主机首先向从机发送地址和写标志,当从机判断主机发送的地址为其地址时对主机应答,然后主机开始发送数据。

I2C总线简介(很经典)

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 【2 】总线入门1)比来进修51单片机,学到A/D,D/A转换的时刻发明我板子上的转换芯片不是书上所讲的ADC0804和DAC0832而是PCF8591T,看了一下它的数据手册,发明它并不是书上所说的并行传输数据,是应用 I2C 总线传输的.搞了两天才搞懂,写出来给大家分享一下,不足之处请务必不吝指出.以上是I2C总线的简略介绍.就比如说AT24C02存储芯片,和PCF8591数模模数转换芯片都支撑I2C端口.(如下图)2)接下来看若何应用I2C总线进行通讯以上是I2C总线通讯的格局.由上图可以看出进行通讯须要以下几个步骤a.初始化I2C总线就是把SDA和SCL都变成高电平.void init()//初始化{SDA=1;delay();SCL=1;delay();}delay()为延时函数void delay()//延时4-5个微秒{;;}b.发送肇端旌旗灯号就是保持SCL为高电平,而SDA从高电平降为低电平(这是I2C总线的划定,别问我为什么)void start()//肇端旌旗灯号{SDA=1;delay();SCL=1;delay();SDA=0;delay();}c.发送地址字(芯片的硬件地址)(8591的数据手册)前四位对统一种芯片来说是固定的,不同的芯片之间不同.就像pcf8591是1001而at24c02是1010接下来三位A0,A1,A2是可编程的三个地址位,这里说说的编程并不是经由过程软件编程,而是把A0,A1,A2三个引脚接不同的电压来肯定命值.接VCC表示1,接GND表示0.为什么要有这三个呢?因为有可能你在I2C总线上“并联”了不止一个雷同的元件(比如说接了三个8591),那你若何来分辩你要操作的是哪一个芯片呢,就是经由过程设置A0,A1,A2的数值,来差别.可编程的地址一个有三位,也就是说最多可以接8个雷同的芯片在统一个I2C总线上.最后一位是读/写位,1为读,0为写.@若何写数据写数据只须要按照时序图1.先将SCL置0(只有它为0的时刻SDA才许可变化)2.转变SDA是数值(就是你当前要穿的一位是0照样1)3.把SCL置1(此时芯片就会读取总线上的数据)下面是代码#define uchar unsigned char#define uint unsigned intvoid write_byte(uchar date)//写一字节数据{uchar i,temp;temp=date;for(i=0;i<8;i++){temp=temp<<1;//左移一位移出的一位在CY中SCL=0;//只有在scl=0时sda能变化值delay();SDA=CY;delay();SCL=1;delay();}SCL=0;delay();SDA=1;delay();}发送地址的时刻只需把地址传给该函数即可.d.应答(ACK)每接收或发送一字节数据后都须要发送一位应答,来表是否收到了前面一个字节的数据.void respons()//应答相当于一个智能的延时函数{uchar i;SCL=1;delay();while((SDA==1)&&(i<250))//充公到应答,我等!~~i++;//等了250次充公到就不管他了,就当他收到了-_-//其实充公到的话可以停滞程序的SCL=0;delay();}e.发送/接收数据(取决于前面地址字的最后一位读/写位)发送数据和上面的发送地址挪用统一个函数,只要穿给他数据即可.吸收数据其实和发送数据差不多,只不过要把吸收到的数据一位一位拼装成一字节数据,看代码~uchar read_byte(){uchar i,k;SCL=0;delay();SDA=1;delay();for(i=0;i<8;i++){SCL=1;delay();k=(k<<1)|SDA;//先左移一位,再在最低位接收当前位SCL=0;delay();}return k;}f.应答g.·······如斯轮回,直到数据一个字一个字的发完h.发送终止旌旗灯号就是SCL在高电平的时刻SDA由低电平变成高电平void stop()//停滞旌旗灯号{SDA=0;delay();SCL=1;delay();SDA=1;delay();}以上就是全部数据传输的进程了为了更好的控制I2C总线我在此放两个例子,一个是书上(郭天祥的,你们懂的)EPROM存储准不时光的例子,还有就是用PCF8591进行D/A转换的例子.1.EPROM存储准不时光//JP10(P0)接JP12//我发明数据手册(电路图pdf)上错了 SCL连的是P2^1 而SDA连的P2^0//程序功效:在数码管上显示数字,每隔1s增长1//但是每次复位或者失落电程序都邑把当前数值存储到AT24C02中,并鄙人次启动时读取#include <reg51.h>#define uchar unsigned char#define uint unsigned intbit write=0;//写24c02的标志sbit SCL=P2^1; //串行时钟输入端sbit SDA=P2^0; //串行数据输入端sbit LS138A=P2^2;//138译码器的3位控制数码管的sbit LS138B=P2^3;sbit LS138C=P2^4;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数显管字模uchar second,tempt;//second用来计秒数 ,tempt用光降时存放0.05s的次数满20即1s写入void delay()//延时4-5个微秒{;;}void delay_1ms(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void start()//肇端旌旗灯号{SDA=1;delay();SCL=1;delay();SDA=0;delay();}void stop()//停滞旌旗灯号{SDA=0;delay();SCL=1;delay();SDA=1;delay();}void respons()//应答相当于一个智能的延时函数{uchar i;SCL=1;delay();while((SDA==1)&&(i<250))//充公到应答,我等!~~i++;//等了250次充公到就不管他了,就当他收到了-_- //其实充公到的话可以停滞程序的SCL=0;delay();}void init()//初始化{SDA=1;delay();SCL=1;}void write_byte(uchar date)//写一字节数据{uchar i,temp;temp=date;for(i=0;i<8;i++){temp=temp<<1;//左移一位移出的一位在CY中SCL=0;//只有在scl=0时sda能变化值delay();SDA=CY;delay();SCL=1;delay();}SCL=0;delay();SDA=1;delay();}uchar read_byte(){uchar i,k;SCL=0;SDA=1;delay();for(i=0;i<8;i++){SCL=1;delay();k=(k<<1)|SDA;//先左移一位,再在最低位接收当前位SCL=0;delay();}return k;}void write_add(uchar address,uchar date){start();write_byte(0xa0);//10100000 前四位固定接下来三位全体被接地了所以都是0 最后一位是写所认为低电平respons();write_byte(address);respons();write_byte(date);respons();stop();}uchar read_add(uchar address) {uchar date;start();write_byte(0xa0);respons();write_byte(address);respons();start();write_byte(0xa1);respons();date=read_byte();stop();return date;}void display(uchar ge,uchar shi) {P0=0xff;LS138A=0;//第一位LS138B=0;LS138C=0;P0=table[ge];delay_1ms(5);P0=0xff;LS138A=1;//第二位LS138B=0;LS138C=0;P0=table[shi];delay_1ms(5);P0=0xff;}void main(){init();second=read_add(2);//读出保存的数据if(second>=100)second=0;TMOD=0x01;//准时器工作方法1ET0=1;EA=1;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1;//开端计时while(1){display(second/10,second%10);if(write==1){write=0;write_add(2,second);}}}void t0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;tempt++;if(tempt==20){tempt=0;second++;write=1;if(second==100)second=0;}}这是电路图为了更好的控制I2C总线我在此放两个例子,一个是书上(郭天祥的,你们懂的)EPROM存储准不时光的例子,还有就是用PCF8591进行D/A转换的例子.1.EPROM存储准不时光//I2C总线很壮大//程序功效:经由过程DA转换把输出电压逐渐增大,使加在上面的发光二级管慢慢变亮// 到最亮后再变暗,如斯轮回#include <reg51.h>#define uchar unsigned char#define uint unsigned int#define PCF8591 0x90 //PCF8591 地址sbit SCL=P2^1; //串行时钟输入端sbit SDA=P2^0; //串行数据输入端void delay()//延时4-5个微秒{;;}void delay_1ms(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void start()//开端旌旗灯号{SDA=1;delay();SCL=1;delay();SDA=0;delay();}void stop()//停滞旌旗灯号{SDA=0;delay();SCL=1;delay();SDA=1;delay();}void respons()//应答相当于一个智能的延时函数{uchar i;SCL=1;delay();while((SDA==1)&&(i<250))i++;SCL=0;delay();}void init()//初始化{SDA=1;delay();SCL=1;delay();}void write_byte(uchar date)//写一字节数据{uchar i,temp;temp=date;for(i=0;i<8;i++){temp=temp<<1;//左移一位移出的一位在CY中SCL=0;//只有在scl=0时sda能变化值delay();SDA=CY;delay();SCL=1;delay();}SCL=0;delay();SDA=1;delay();}void write_add(uchar control,uchar date){start();write_byte(PCF8591);//10010000 前四位固定接下来三位全体被接地了所以都是0 最后一位是写所认为低电平respons();write_byte(control);respons();write_byte(date);respons();stop();}void main(){uchar a;init();while(1){write_add(0x40,a);delay_1ms(5);a++;if(a>250)a=0;}}第21页,-共21页。

I2C简介中文翻译

I2C简介中文翻译

1.电气特性I2C运用一个漏极开路/集电极开路和一个输入缓冲在同一个线路上,它能够使用单一的数据线来传输双向数据流1.1漏极开路增益对于双向通信漏极开路参考一典型的输出,它能够上拉总线到电压(地,在大多数情况下)或者“释放”总线和让他通过一个电阻上拉,万一总线被主设备或者从设备使用,上拉的电阻(R PU)在线路上是为了负责上拉总线电压到电源线路上,即使没有一个器件强迫线路电源为高,这就意味着这个总线不会发生通信错误,当一个设备尝试传输高电平,和另一个设备传输低电平,造成一个短路(电源线路到地),I2C需要如果一个主设备在一个多个主设备的环境中传输高电平,但是看到这个线路上的数据是低电平(另一个设备被拉低),为了去停止通信,因为另一个设备正在运用这个总线,被上拉的接口不会允许接口的类型自由,这个就是I2C的好处。

图2显示了一个简单在SDA/SCL总线上的主或者从设备的内部结构框图,由一个输入缓冲器去读输入数据,一个下拉的FET去传输数据,一个设备是能够把总线拉低的(提供短路到地)或者释放总线(高阻抗到地)和允许上拉电阻到电源电路中,这是一个重要的概念去实现,当总线处理多个I2C器件时,没有一个设备能够保持这个总线为高电平,这个属性是允许双向通信的1.1漏极开路下拉到地正如之前描述的在之前的章节中,漏极开路的也许会设置上拉总线为低,或者释放总线和上拉一个电阻到电源,图3显示了数据流将数据将总线拉低,逻辑想要去传输一个低电平激活下拉的场效应管,将会提供一个短暂的时间到地,将线路拉低。

1.1.2 漏极开路释放总线当主设备或者从设备想要传输一个逻辑高电平时,它有可能释放总线通过关闭下拉的场效应管,这个电平总线悬浮,上拉的电阻上拉电压到电压线路中,它将被认为是一个高电平,数据4显示了数据流通过一个上拉的电阻将数据总线保持高电平。

2I2C接口2.1通用I2C操作这个I2C总线是一个标准的双向接口,运用一个控制器,就是众所周知的主设备,去控和从设备沟通,一个从设备不会去传输数据,除非它的地址已经被主设备所获得了,每个设备在I2C总线上都有一个唯一的器件地址去区别于其他下挂在I2C总线上的设备,许多从设备在启动时将会做一些启动设置,这是每个从设备通常会做的当这个主设备接入这个从设备的内部寄存器,就会获得一个专用的寄存器地址,一个设备将会有一个或者多个寄存器去存储,读,写的数据。

I2C总线中文讲解,详尽通俗

I2C总线中文讲解,详尽通俗

一. I2C总线简介I2C管理总线:(Intel-Integrated Circuit bus)I2C总线是一种由飞利浦Philip公司开发的串行总线,产生于80年代,最初为音频和视频设备开发,现主要在服务器管理中使用。

是两条串行的总线,它由一根数据线(SDA)和一根时钟线(SDL)组成。

◆I2C总线的数据传输过程基本过程为:●主机发出开始信号。

●主机接着送出1字节的从机地址信息,其中最低位为读写控制码(1为读、0为写),高7位为从机器件地址代码。

●从机发出认可信号。

●主机开始发送信息,每发完一字节后,从机发出认可信号给主机。

●主机发出停止信号。

I2C数据传输图◆I2C总线上各信号的具体说明:●开始信号:在时钟线(SCL)为高电平其间,数据线(SDA)由高变低,将产生一个开始信号。

●停止信号:在时钟线(SCL)为高电平其间,数据线(SDA)由低变高,将产生一个停止信号。

●应答信号:既认可信号,主机写从机时每写完一字节,如果正确从机将在下一个时钟周期将数据线(SDA)拉低,以告诉主机操作有效。

在主机读从机时正确读完一字节后,主机在下一个时钟周期同样也要将数据线(S DA)拉低,发出认可信号,告诉从机所发数据已经收妥。

(注:读从机时主机在最后1字节数据接收完以后不发应答,直接发停止信号)。

注意:在I2C通信过程中,所有的数据改变都必须在时钟线SCL为低电平时改变,在时钟线SCL为高电平时必须保持数据SDA信号的稳定,任何在时钟线为高电平时数据线上的电平改变都被认为是起始或停止信号。

◆I2C总线数据格式:I2C数据格式图I2C支持两种数据格式:_ 7-bit/10-bit 寻址数据格式_ 7-bit/10-bit 寻址和重复开始信号的数据格式✧S ―I2C 开始标识✧Slava address ―从设备地址。

有两种从地址类型:1)固定的从地址,I2C总线只能接一个同类型的固定的从地址设备。

2)半固定的从地址,前半部分地址是固定的,后半部分地址是可编程的,I2C总线只能接多个同类型的半固定的从地址设备。

i2c通信的详细讲解

i2c通信的详细讲解

i2c通信的详细讲解I2C(全称Inter-IntegratedCircuit)是一种基于两线式总线系统,可以利用它让一台机器和另一台机器或者一个器件与另一个器件之间建立通信连接。

它由一个多晶片系统(Multi-Chip System)所创造出来,可以减少实现多晶片系统的内部连接的数量,从而减少印制电路板的体积。

它允许多达127个从设备以最低物理开销(Low Physical Overhead)与一个主设备连接,具有低成本和高可靠性,现已成为很多类型的微控制器(Microcontroller)和处理器(Processors)的标准总线,应用非常广泛。

1. I2C概述I2C从最初的Philips经过20多年的发展,已经成为一种横跨多个行业的解决方案。

它可以在不同的系统上提供高性能片上系统(System-on-a-Chip,SoC)间的通信和协调,支持多达127的电子设备连接。

主要由两条信号线,称为SDA(Data Line)和SCL(Clock Line)构成,它们分别连接电子设备的数据和时钟,每个设备还有一个物理上的地址,用于标识彼此来进行通信。

I2C总线具有速度快、低功耗、简单易用等优点,现在已经被应用在系统和高速处理器、传感器、可编程逻辑器件(PLD)、多媒体设备、电源管理、液晶/LED等多个行业中。

2. I2C通信原理I2C通信可以说是一种异步通信方式,它是一种时钟控制的异步通信方式,发送一个字节,都要经过下面几个步骤:(1)发送起始条件:S(Start):该条件由SDA和SCL电平组合构成,SDA在SCL电平为高时从高电平变低电平。

(2)发送设备地址:在I2C总线上,设备都会有自己的地址,每个设备可以收发多个字节,这样就可以确定设备的身份。

(3)发送控制位:也称命令位,它用于确定主设备发送的是某种命令,比如写入数据,读取数据,还是其它的控制信息。

(4)发送数据:数据由SDA高低电平传输,而SDA电平的变化必须在SCL的上升沿才能有效。

I2C总线入门(很详细,很经典)

I2C总线入门(很详细,很经典)

I2C总线入门1)最近学习51单片机,学到A/DQ/A转换的时候发现我板子上的转换芯片不是书上所讲的ADC0804和DAC0832而是PCF859仃,看了一下它的数据手册, 发现它并不是书上所说的并行传输数据,是使用I2C总线传输的。

搞了两天才搞懂,写出来给大家分享一下,不足之处请务必不吝指出。

! ≡tt f Itiief II R J Ih PHiLlPSt j ΓC bFC 口対由⅞⅛⅞κΓt r SDA IUB L f W r■I. SeiL閃離找L#參G [⅛总蠻H件嗣时Mtfl ι⅛X⅛ttStM'QUIA ft/i CPU 1√ Kf?IC ZlHh IC J J Ie Z糾幣町遊i;I^I ILW*s4t∣ιIkh i P"⅛.BtflK硏是Jl伯的内评.iaiT IT K以上是I2C总线的简单介绍。

就比如说AT24C02存储芯片,和PCF8591数模模数转换芯片都支持I2C端口(如下图)2)接下来看如何使用I2C总线进行通信3. I S C总线通信格式图8,i+2 ⅛ PC总统上进彳J -次数撫传输的通信格式HJ. λ5WuJΓ IMPuJT λWλ√[T+ *1⅛∕'f ⅛ff融戟代答ftK >⅛祎:J*j*hrn⅛释止他号图S.I .2 I3C总纽上遊打谀散据传输的JfflG⅛A 以上是I2C 总线通信的格式。

由上图可以看出进行通信需要以下几个步骤S-Iead PDlPAOL1 8□ VCCAl匚⅛WPA2匚3GND匚4£AJNOITU迴VDDAINlI 2ISj AOUTAIN2 3]回” RE FAIN3 I 41^I3] AGNDPCF8591PAO ^5∏^↑2∖ EXTAt叵TrlOSCA2 T/JO)SeL^kVSS叵(VJ SDAIH2引脚图(Dlla.初始化I2C总线就是把SDA和SCL都变成高电平。

Void in it() 〃初始化{SDA=1;delay();SCL=1;delay();}delay ()为延时函数void delay() 〃延时4-5个微秒{;;}b.发送起始信号就是保持SCL为高电平,而SDA从高电平降为低电平(这是I2C总线的规定, 别问我为什么)void Start()// 起始信号{SDA=1;delay();SCL=1;delay();SDA=0;delay();}C.发送地址字(芯片的硬件地址)74地址12C总线象统中的每一片PCF859J通过发送有效地址封该黠件来激活。

I2C详解

I2C详解

I2C详解1 I2C接口简介I2C全称:Inter-Integrated Circuit,是一种同步、半双工的通信总线。

同步:发送接收端要严格同步,一般有同步时钟线。

半双工:I2C只有一条数据线,所以master发数据与收数据不能同时进行。

I2C通信速率:模式速率标准模式100 kbps快速模式400 kbps高速模式3.4 MbpsI2C诞生的背景:最初的嵌入系统是使用内存映射(memory-mapped I/O)的方式来互连微控制器和外围设备的。

要实现内存映射,设备必须并行连入微控制器的数据线和地址线,也就意味着:如果要连接一款新的外围设备,需在设计芯片时候确定好。

所以很不灵活并且成本高。

1982年,Philips实验室开发了I2C,方便CPU与外设之间通信。

1.1 I2C原理简介我理解的是:I2C设计时的理念是:信号线尽量少并且速率要尽量高。

信号线少,可以减少引脚占用,这对早期的芯片(引脚很少)的很重要。

当然,如果单纯说减少信号线,1-wire总线只使用1根线通信(比如DS18B20、DHT11等都是使用这种协议),但是1-wire总线是异步通信,所以1-wire总线速率不可能太高(1-wire总线传输速率一般为16.3Kbit/s,最大可达142 Kbit/s,通常情况下采用100Kbit/s 以下的速率传输数据)。

标准的I2C需要两根信号线:SCL(Serial Clock):时钟线,时钟都是有master提供的SDA(Serial Data):双向数据线,发数据或者收数据(收发不能同时)I2C多master多slave示意图:图中是2个master+2个slave的示意,同一时刻只有一个master 与一个slave通信。

若想实现这个效果:1 多个master-slave 时钟、数据线连在一起,需要实现信号的“线与”逻辑(所以SDA、SCL 被设计为漏极开路结构,外加上拉电阻实现“线与”)2 需要实现“时钟同步”和“总线仲裁”,引脚在输出信号的同时还能对引脚上的电平进行检测,检测是否与刚才输出一致,为“时钟同步”和“总线仲裁”提供硬件基础。

I2C总线——总结

I2C总线——总结

I2C总线1.简介I2C(Inter-IC)总线10多年前由Philips公司推出,是近年来在微电子通信控制领域广泛采用的一种新型总线标准。

它是同步通信的一种特殊形式,具有接口线少,控制方式简化,器件封装形式小,通信速率较高等优点。

在主从通信中,可以有多个I2C总线器件同时接到I2C总线上,通过地址来识别通信对象。

2.I²C 总线术语发送端 - 发送数据到总线的器件。

当发送端器件可以主动将数据放到总线,我们称为主控发送端,若可以回应主控端的要求,即称为从属发送端。

接收端- 接收来自总线传输数据的器件。

当接收端器件可以主动接收数据时,我们称为主控接收端,若依照主控端要求而接收,称为从属接收端。

主控端 - 为启动数据传送 (START 指令)、产生时钟 (SCL) 信号并中止数据传送 (STOP指令) 的器件,主控端必须是传送端或接收端。

从属端 - 由主控端定址的器件。

从属端可以扮演接收端或发送端的角色。

多重主控端 - 在总线上可同时存一个以上的主控端,并且不会造成冲突或数据遗失。

通常来说运用 "bit-banged" 软件的主控端并不具有多重主控端能力,I²C 总线控制器提供了一个将多重主控端硬件 I²C 连接端口加入到 DSP 或 ASIC 的简单方法。

仲裁机制- 预先定义在特定时间内只有一个主控端能够取得总线控制权。

同步 - 预先将二个或二个以上的主控端时钟信号予以同步化的定义程序。

SDA- 串行数据信号线 (Serial Data)SCL - 串行时钟信号线 (Serial Clock)3.I2C总线结构I2C 总线上数据的传输速率在标准模式下可达100kbit/s,在快速模式下可达400kbit/s,在高速模式下可达3.4Mbit/s。

I2C串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。

所有接到I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。

认识I2C总线

认识I2C总线

delay5us(); //延时5us
SCL=0;
}
3、 发送应答信号
void Ack(void) //产生应答
SCL=1;
//SCL由低变高,产生一个时钟
delay5us(); //延时5us
SCL=0;
//SCL变低,以便继续接收
}
4、发送非应答信号
如果主器件发送数据,在一个字节发送完后,第 9个时钟位上应释放数据线,使其处于高电平状态, 以便从器件在这一位上送出应答信号。
从机输出低电平表示应答信号, 若从机输出高电平表示非应答信
说明要继续接收。
号,说明停止接收。
5、器件地址
I2C总线上的每一个从器件均有一个唯一的地址, 每次主器件发出起始信号后,必须接着发出一个字 节的器件地址,以选取挂在总线上的某一从器件并 控制总线的传输方向。
例:
已知芯片24C02的器件标识地址为1010,如 果引脚A2~A0全部接高电平,那么该芯片的器 件地址为AEH或AFH,AEH表示写数据到该器 件,AFH表示从该器件读数据。
说明:
器件地址只表明选择挂在总线的哪一个器件及 数据传送方向,而器件内部的地址是由编程者 在传送第一个数据时指定的,即第一个数据为 器件内的子地址。
任务二、用I/O口模拟I2C总线操作 目 前 不 少 的 单 片 机 内 部 集 成 了 I2C 总 线 接 口 , 如 MCS-51 系 列 的 8XC550 、 8XC552 、 8XC571 等 , 低价位的单片机内部虽然没有集成I2C总线接口, 但可以通过软件实现I2C总线操作。
假设采用80C51单片机,晶振频率为12MHz, 即机器周期为1us,使用P1.0作为数据线SDA, P1.1作为时钟线SCL。

I2C总线简介(很经典)

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总线基本概念I2C总线是由菲利普公司开发的一种总线系统。

I2C总线系统问世后,迅速在彩电等家电产品中得到广泛的应用,尤其是在新型彩电中应用最多。

I2C总线(I2C BUS,Inter Integrated-circuit Bus)常见的中文译名有集成电路间总线或内部集成电路总线。

下面简要介绍一下作为彩电维修人员应掌握的一些关于I2C总线的基本概念。

一、I2C总线的基本电路结构1 I2C总线是一种串行总线系统CPU电路上的I2C总线有两根线组成,一根是串行时钟线(SCL),一根是串行数据线(SDA)。

CPU利用串行时钟线发出时钟信号,利用串行数据线发送或接收数据。

CPU电路是I2C总线系统的核心,I2C总线由CPU电路引出,彩电中很多需要由CPU控制的集成电路、组件电路、高频头等都可以挂接在I2C总线上,CPU通过I2C总线对这些电路进行控制。

I2C总线上挂接的被控集成电路功能与通常彩电相同,如存储器集成电路、色度/扫描集成电路等,只不过这些被控集成电路需要增加I2C总线接口电路。

被控集成电路通过I2C总线接口电路接收由CPU发出的控制指令和数据,实现CPU对被控集成电路的控制。

2 I2C总线接口电路为了通过I2C总线与主控CPU进行通信,在I2C总线上挂接的每一个被控集成电路中,都设有一个I2C总线接口电路。

在接口电路中设有解码器,以便接收由主控CPU发出的控制指令和数据。

由于在彩电中使用的集成电路多为模拟电路,因此在接口电路中还设有数/模变换器(D/A变换器)和控制开关,CPU送来的数据经解码和D/A变换后才能对被控集成电路执行控制操作。

3 I2C总线属于双向总线系统CPU可以通过I2C总线向被控集成电路发送数据,被控集成电路也可通过I2C总线向CPU 传送数据。

但被控集成电路接收还是发送数据则由主控CPU控制。

由于I2C总线是双向总线系统,因此CPU可以对I2C总线上挂接的电路进行故障检查。

I2C总线协议中文版

I2C总线协议中文版

I2C总线协议中文版I2C(Inter-Integrated Circuit)总线是一种串行通信协议,用于在不同的集成电路之间进行通信。

它是由飞利浦公司(现在的恩智浦半导体)开发并于1982年发布。

I2C总线协议主要应用于各种数字设备之间的通信,例如传感器、存储设备、显示器和其他外围设备。

I2C总线协议使用两个线路进行通信:时钟线(SCL)和数据线(SDA)。

SCL线由主设备控制,用于对通信进行时钟同步。

SDA线用于传输数据,可以由主设备或从设备进行控制。

每个设备在总线上都有一个唯一的地址,以便在通信时进行识别。

在I2C总线中,通信被称为传输。

每个传输由一个起始条件和一个停止条件组成。

起始条件表明一个传输的开始,而停止条件表示传输的结束。

传输还包括设备地址、数据和确认位。

I2C总线协议定义了两种设备角色:主设备和从设备。

主设备在总线上产生时钟信号,并控制数据传输的发起。

从设备被动响应主设备的请求,并提供所需的数据。

主设备有权选择从设备,并在传输开始时向其发送设备地址。

从设备通过识别其唯一的设备地址来判断传输是否与自己有关。

I2C总线协议支持两种传输模式:主设备模式和从设备模式。

主设备模式下,主设备发送起始条件,并在通信中负责产生时钟信号。

主设备可以向一个或多个从设备发送数据,并在传输结束时发送停止条件。

从设备模式下,从设备只提供响应并在所需时提供数据。

在每个传输中,主设备发送数据位,并等待从设备返回一个ACK(应答)位。

ACK位用于确认数据的接收。

如果从设备成功接收了数据,它会返回一个ACK位。

如果从设备无法接收或处理数据,它可以返回一个NACK(非应答)位,表示传输的结束。

I2C总线协议还支持数据的读取和写入。

在写入模式下,主设备将数据发送给从设备,并等待ACK位的返回。

在读取模式下,主设备提供一个设备地址,并请求从设备发送数据。

从设备接收到请求后,会将数据发送给主设备,并等待ACK位的返回。

(完整版)I2C总线

(完整版)I2C总线

概述I2C总线(I2C bus,Inter-IC bus)是一个双向的两线连续总线,提供集成电路(ICs)之间的通信线路。

I2C总线是一种串行扩展技术,最早由Philips公司推出,广泛应用于电视,录像机和音频设备。

I2C总线的意思是“完成集成电路或功能单元之间信息交换的规范或协议”。

Philips公司推出的I2C总线采用一条数据线(SDA),加一条时钟线(SCL)来完成数据的传输及外围器件的扩展;对各个节点的寻址是软寻址方式,节省了片选线,标准的寻址字节SLAM为7位,可以寻址127个单元。

I2C总线有三种数据传输速度:标准,快速模式和高速模式。

标准的是100Kbps,快速模式为400Kbps,高速模式支持快至3.4Mbps的速度。

所有的与次之传输速度的模式都是兼容的。

I2C总线支持7位和10位地址空间设备和在不同电压下运行的设备。

特征1、只要求两条总线线路:一条串行数据线SDA,一条串行时钟线SCL;2、每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机/从机关系软件设定地址,主机可以作为主机发送器或主机接收器;3、它是一个真正的多主机总线,如果两个或更多主机同时初始化,数据传输可以通过冲突检测和仲裁防止数据被破坏;4、串行的8 位双向数据传输位速率在标准模式下可达100kbit/s,快速模式下可达400kbit/s,高速模式下可达3.4Mbit/s;5、连接到相同总线的IC 数量只受到总线的最大电容400pF 限制。

术语发送器:发送数据到总线的器件;接收器:从总线接收数据的器件;主机:启动数据传送并产生时钟信号的设备;从机:被主机寻址的器件;多主机:同时有多于一个主机尝试控制总线但不破坏传输;主模式:用I2CNDAT支持自动字节计数的模式;位I2CRM,I2CSTT,I2CSTP控制数据的接收和发送;从模式:发送和接收操作都是由I2C模块自动控制的;仲裁:是一个在有多个主机同时尝试控制总线但只允许其中一个控制总线并使传输不被破坏的过程;同步:两个或多个器件同步时钟信号的过程。

I2C总线详细介绍

I2C总线详细介绍

I2C总线详细介绍I2C是一种串行总线的外设接口,它采用同步方式串行接收或发送信息,两个设备在同一个时钟下工作。

I2C总线只用两根线:串行数据SDA(Serial Data)、串行时钟SCL(Serial Clock)。

由于I2C只有一根数据线,因此其发送信息和接收信息不能同时进行。

信息的发送和接收只能分时进行。

I2C串行总线工作时传输速率最高可达400K bit/s。

I2C总线上的所有器件的SDA线并接在一起,所有器件的SCL线并接在一起,且SDA线和SCL线必须通过上拉电阻连接到正电源。

I2C总线的数据传输协议要比SPI总线复杂一些,因为I2C总线器件没有片选控制线,所以I2C总线数据传输的开始必须由主器件产生通信的开始条件(SCL高电平时,SDA产生负跳变);通信结束时,由主器件产生通信的结束条件(SCL高电平时,SDA产生正跳变)。

SDA线上的数据在SCL高电平期间必须保持稳定,否则会被误认为开始条件或结束条件,只有在SCL低电平期间才能改变SDA线上的数据。

I2C总线的数据传输波形图如下图所示。

I2C应用实例AT24C系列为美国ATMEL公司推出的串行COMS型E2PROM,具有功耗小,宽电压范围等优点。

下图为AT24C系列E2PROM的引脚图。

图中A0、A1、A2为器件地址引脚,Vss为地,Vcc 为正电源,WP为写保护,SCL为串行时钟线,SDA为串行数据线。

AT24C系列E2PROM采用I2C总线,I2C总线上可挂接多个接口器件,在I2C总线上的每个器件应有唯一的器件地址,按I2C总线规则,器件地址为7位二进制数,它与一位数据方向位构成一个器件寻址字节。

器件寻址字节的最低位(D0)为方向位(读/写),最高4位(D7~D4)为器件型号地址(不同的I2C 总线接口器件的型号地址由厂家给定,AT24C系列E2PROM的型号地址都为1010);其余3位(D3~D1)与器件引脚地址A2A1A0相对应。

一文了解I2C----总线概述

一文了解I2C----总线概述

一文了解I2C----总线概述I2C(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。

I2C总线产生于在80年代,最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个组件状态的通信。

I2C版本概况:版本1.0-1992l 删除了用软件编程从机地址的内容, 因为实现这个功能相当复杂,而且不被使用.l 删除了”低速模式”,实际上这个模式是整个I2C总线规范的子集,不需要明确的详细说明.l 增加了快速模式,它将位速率增加4倍到达400kbit/s,快速模式器件都向下兼容,即她们可以在0~100kbit/s的I2C总线系统中使用.l 增加了10位寻址,允许1024个额外的从机地址. l 快速模式器件的斜率控制和输入滤波改善了EMC性能.版本2.0-1998l 增加了高速模式(Hs模式),它将位速率增加到3.4Mbit/s,Hs模式的器件可以和I2C总线系统中快速和标准模式器件混合使用,位速率从0~3.4Mbit/s.l 电源电压是2V或更低的器件的低输出电平和滞后调整到符合噪声容限的要求,而且保持和电源电压更高的器件兼容.l 快速模式输出级的0.6V6mA要求被删除. l 新器件的固定输入电平被总线电压相关的电平代替. l 增加了双向电平转换器的应用信息.版本2.1-2000l在Hs模式的重复起始条件后,可以延长始终信号SCLH.l Hs模式中的一些时序参数变得更随意.I2C总线支持任何IC生产过程(NMOS,CMOS,双极性).两线—串行数据(SDA)和串行时钟(SCL)线在连接到总线的器件间传递信息.每个器件都有唯一的地址识别(无论是微控制器,LCD驱动器,存储器或键盘接口),而且都可以作为一个发送机或接收机(由器件的功能决定).I2C总线是一个多主机的总线,可以连接多个能控制总线的器件到总线.。

I2C介绍

I2C介绍

I2C介绍I2C总线是两线式串行总线。

I2C总线最主要的优点是其简单性和有效性,支持多主控(multimastering)。

占用空间小,芯片管脚数量少。

总线的长度可高达25英尺,并且能够以10Kbps的最大传输速率支持40个组件。

最高传送速率100kbps。

I2C总线在传送数据过程中共有三种类型信号,它们分别是:开始信号、结束信号和应答信号。

开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。

结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。

应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。

CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判断。

若未收到应答信号,由判断为受控单元出现故障。

I2C规程运用主/从双向通讯。

器件发送数据到总线上,则定义为发送器,器件接收数据则定义为接收器。

主器件和从器件都可以工作于接收和发送状态。

总线必须由主器件(通常为微控制器)控制,主器件产生串行时钟(SCL)控制总线的传输方向,并产生起始和停止条件。

SDA线上的数据状态仅在SCL为低电平的期间才能改变,SCL为高电平的期间,SDA状态的改变被用来表示起始和停止条件。

I2C总线是一种用于IC器件之间连接的二线制总线。

它通过SDA(串行数据线)及SCL(串行时钟线)两根线在连到总线上的器件之间传送信息,并根据地址识别每个器件:不管是单片机、存储器、LCD驱动器还是键盘接口。

1.I2C总线的基本结构采用I2C总线标准的单片机或IC器件,其内部不仅有I2C接口电路,而且将内部各单元电路按功能划分为若干相对独立的模块,通过软件寻址实现片选,减少了器件片选线的连接。

CPU不仅能通过指令将某个功能单元电路挂靠或摘离总线,还可对该单元的工作状况进行检测,从而实现对硬件系统的既简单又灵活的扩展与控制。

I2C总线介绍

I2C总线介绍

I2C总线介绍1、⾸先I2C这是个什么玩意? I2C⾸先百度上的定义是双向⼆线制同步串⾏总线。

它只需要两根线即可在连接与总线上的器件之间传送信息。

当然在我看来,I2C⾸先是⼀个通信接⼝,同理通信接⼝就是⽤于模块之间的通信的,同SPI接⼝学习思路⼀样,⾸先明⽩它是⼀个接⼝,然后再理解它是⼀个怎样的接⼝。

I2C(Inter - Integrated Circuit)总线是由Philips公司开发的⼀种简单、双向⼆线制同步串⾏总线。

它只需要两根线即可在连接于总线上的器件之间传送信息(当然设备必须⽀持I2C接⼝)。

具体在应⽤的时候总线上的设备节点分为主机和从机两种⾓⾊。

在物理上传统标准的I2C接⼝定义: 除去地线外,⼈民常说的只有两根线:SDA和SCL,SDA是串⾏数据线,SCL是串⾏时钟线,都是双向IO线 接⼝电源为开漏输出,需通过上拉电阻接电源VCC,当总线空闲时,两根线都是⾼电平,连接总线的外同器件都是CMOS器件,输出级也是开漏电器。

在总线上消耗的电流很⼩,因此,总线上扩展的器件数量主要由电容负载来决定,因为每个器件的总线接⼝都有⼀定的等效电容,⽽线路中电容会影响总线传输速度。

当电容过⼤时,有可能造成传输错误,所以,其负载能⼒为400pF,因此可以估算出总线允许长度和所接器件数量。

其实I2C总线上的每⼀个器件内部的SDA、SCL引脚电路结构都是相同的,引脚的输出驱动与输⼊缓冲连在⼀起,输出为漏极开路的场效应管、输⼊缓冲为⼀个⾼输⼊阻抗的同相器。

这种电路具有两个特点:(1)由于SDA、SCL为漏极开管电路,借助于外部的上拉电阻实现了信号的线与逻辑 (2)引脚在输出信号的同时还将引脚上的电平进⾏检测,检测是否与刚才输出⼀致。

为“时钟同步”和“总线仲裁”提供硬件基础 I2C标准连接如下图: 模拟I2C与硬件I2C有什么区别? 原理上:硬件I2C(提供专门的SDA,SCL⼝)的时钟是由系统产⽣的,⼀般由晶振分频产⽣。

IIC总线简介

IIC总线简介
时钟信号和终止发送的器件
▪ 从机(Slave):被主机寻址的器件
I2C 总线上数据的有效性
起始条件和停止条件
从机地址
▪ I2C 总线不需要额外的地址译码器和片选信号。
多个具有I2C 总线接口的器件都可以连接到同一
条I2C 总线上,它们之间通过器件地址来区分。
主机是主控器件,它不需要器件地址,其它器件
都属于从机,要有器件地址。必须保证同一条
I2C 总线上所有从机的地址都是唯一确定的,不
能有重复,否则I2C 总线将不能正常工作。一般
从机地址由7 位地址位和一位读写标志R/W 组
成,7 位地址占据高7 位,读写位在最后。读写
位是0,表示主机将要向从机写入数据;读写位
是1,则表示主机将要从从机读取数据
D:数据(Data),每个数据都必须是8 位
P:停止位(STOP)
阴影:主机产生的信号
无阴影:从机产生的信号
基本的数据传输格式示意图
传输一个字节数据的时序图
I2C总线模式





主发送器模式
主接收器模式
从接收器模式
从发送器模式
I2C主复合模式
I2C总线扩展
数据结构图符号定义




















S:起始位(START)
SA:从机地址(Slave Address),7 位从机地址
W:写标志位(Write),1 位写标志
R:读标志位(Read),1 位读标志
A:应答位(Acknowledge),1 位应答

I2C总线协议中文版

I2C总线协议中文版

I2C总线协议中文版一、概述:I2C总线协议(Inter-Integrated Circuit)是由飞利浦公司(现在的恩智浦)于1980年代开发的一种串行通信协议。

它是一种双线制协议,使用一根数据线(SDA,Serial Data Line)和一根时钟线(SCL,Serial Clock Line)进行数据传输。

二、工作原理:I2C总线协议采用主从架构。

每个设备都有一个唯一的7位地址,用于通信标识。

通信始于主设备(Master)向从设备(Slave)发送一个起始信号。

接下来,主设备向从设备发送地址和数据,从设备则负责接收和处理这些信息。

通信完成后,主设备发送停止信号。

三、起始信号:起始信号用于标识I2C总线上的数据传输开始。

它是一个由高电平转为低电平的信号,由主设备发出。

起始信号表示数据传输的开始,准备发送地址和数据。

四、停止信号:停止信号用于标识I2C总线上的数据传输结束。

它是一个由低电平转为高电平的信号,由主设备发出。

停止信号表示数据传输的结束,释放总线并准备下一次通信。

五、地址传输:地址传输用于将主设备的地址发送给从设备。

地址是一个7位的二进制数,表示设备的唯一标识。

地址传输始于起始信号。

主设备在发送地址时,位0到6表示从设备的地址,最高位表示读或写操作(0表示写,1表示读)。

六、数据传输:数据传输用于通过I2C总线在主设备和从设备之间传送数据。

数据传输必须在起始信号和停止信号之间进行。

主设备首先发送一个字节的数据,接着从设备对数据进行确认(ACK)操作。

如果从设备收到的数据正确,它会产生一个ACK信号,否则会产生一个NACK信号。

数据传输可以是字节模式(8位数据)或位模式(1位数据),由主设备发起。

七、时钟传输:时钟传输用于同步主设备和从设备之间的数据传输。

时钟信号由主设备产生,并控制整个通信过程。

主设备在时钟线上输出高或低电平,从设备在时钟线上读取该电平。

时钟信号的频率可以通过修改I2C总线速率来调整。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一. I2C总线简介I2C管理总线:(Intel-Integrated Circuit bus)I2C总线是一种由飞利浦Philip公司开发的串行总线,产生于80年代,最初为音频和视频设备开发,现主要在服务器管理中使用。

是两条串行的总线,它由一根数据线(SDA)和一根时钟线(SDL)组成。

◆I2C总线的数据传输过程基本过程为:●主机发出开始信号。

●主机接着送出1字节的从机地址信息,其中最低位为读写控制码(1为读、0为写),高7位为从机器件地址代码。

●从机发出认可信号。

●主机开始发送信息,每发完一字节后,从机发出认可信号给主机。

●主机发出停止信号。

I2C数据传输图◆I2C总线上各信号的具体说明:●开始信号:在时钟线(SCL)为高电平其间,数据线(SDA)由高变低,将产生一个开始信号。

●停止信号:在时钟线(SCL)为高电平其间,数据线(SDA)由低变高,将产生一个停止信号。

●应答信号:既认可信号,主机写从机时每写完一字节,如果正确从机将在下一个时钟周期将数据线(SDA)拉低,以告诉主机操作有效。

在主机读从机时正确读完一字节后,主机在下一个时钟周期同样也要将数据线(S DA)拉低,发出认可信号,告诉从机所发数据已经收妥。

(注:读从机时主机在最后1字节数据接收完以后不发应答,直接发停止信号)。

注意:在I2C通信过程中,所有的数据改变都必须在时钟线SCL为低电平时改变,在时钟线SCL为高电平时必须保持数据SDA信号的稳定,任何在时钟线为高电平时数据线上的电平改变都被认为是起始或停止信号。

◆I2C总线数据格式:I2C数据格式图I2C支持两种数据格式:_ 7-bit/10-bit 寻址数据格式_ 7-bit/10-bit 寻址和重复开始信号的数据格式✧S ―I2C 开始标识✧Slava address ―从设备地址。

有两种从地址类型:1)固定的从地址,I2C总线只能接一个同类型的固定的从地址设备。

2)半固定的从地址,前半部分地址是固定的,后半部分地址是可编程的,I2C总线只能接多个同类型的半固定的从地址设备。

如7bit半固定从地址通常7-bit 中四个较重要的位(MSB) 为固定的,并依器件本身性质的分类区分,如1010 即代表串行EEPROM,而其他三个较不重要的位(LSB),即A2、A1 与A0 则可以通过硬件电子引脚设定,并取得高达8 个不同的I²C 地址组合,因此在同一个I²C 总线上可以有8 个相同形式的器件运作,这些引脚固定在VCC 高电压代表逻辑1,固定在接地低电压则代表逻辑0,7-bit 的定址方式可以带来总线上128 个器件的组合,但由于部份地址设定保留给特殊指令应用,因此实际上最高器件数大约为120 个。

✧R/W ―读写操作表示位,0 表示写,1表示读。

✧ACK ―读写完一个byte的地址数据的应答信号✧Data ―数据,紧跟设备地址传输的第一个byte数据(Data)可以是子地址(sub-address)表示设备的寄存器。

✧S ―I2C结束标识◆关于从地址的分配I2C器件的从地址是由I2C总线协会实行统一分配的,飞利浦作为标准I2C总线标准的维护者,负责所有I2C从地址的注册程序以确保能够适当协助授权厂商或其他公司进行从地址的分配。

为了避免I2C器件的从地址的冲突必须依赖现有从地址的完整性和可靠的申请注册资料才能达成,所以I2C器件厂家必须向philip公司提交I2C从地址申请并提交一定的费用。

从地址的申请有两种:第一种是为某一特定的I2C器件设备申请从地址;第二种是为某一同功能的I2C器件设备群组申请从地址。

具体如何申请可参考:/markets/mms/protocols/i2c/support/requestform/index .html✧IIC设备规类:◆OMAP730 I2C 简介二.I2C总线详细介绍I²C 总线操作原理任何I²C 器件都可以连接到I²C 总线上,而每一个总线上的器件也能和任何一个主控端沟通互相传送信息,在总线上至少必须有一个主控端,如微控器或 DSP,每个主控端拥有相同的优先权,且在I²C 总线上加入或移除器件都非常简便。

总线的电容总和必须低于 400 pF,大约 20 到 30 个器件或 10 m 的传输长度,以符合上升与下降时间的要求,每个器件必须驱动 3mA 形成逻辑低位准,并在开漏极总线内置大约 2 K 到 10 K ohms 的提升电阻与 0.4 mA 的电流,同时并具有双向I²C 总线缓冲器可以用来隔离总线上不同接线的电容,以带来更大(2000pF) 与更长 (2000 m) 的总线结构。

每个I²C 器件都拥有一个独一无二的 7-bit I²C 地址,让主控端知道通信传输的对象是谁,通常 7-bit 中四个较重要的位 (MSB) 为固定的,并依器件本身性质的分类区分,如 1010 即代表串行 EEPROM,而其他三个较不重要的位 (LSB),即 A2、A1 与 A0 则可以通过硬件电子引脚设定,并取得高达 8 个不同的I²C 地址组合,因此在同一个I²C 总线上可以有 8 个相同形式的器件运作,这些引脚固定在 VCC 高电压代表逻辑 1,固定在接地低电压则代表逻辑 0,7-bit 的定址方式可以带来总线上 128 个器件的组合,但由于部份地址设定保留给特殊指令应用,因此实际上最高器件数大约为 120 个。

I²C 总线术语发送端 - 发送数据到总线的器件。

当发送端器件可以主动将数据放到总线,我们称为主控发送端,若可以回应主控端的要求,即称为从属发送端。

接收端 - 接收来自总线传输数据的器件。

当接收端器件可以主动接收数据时,我们称为主控接收端,若依照主控端要求而接收,称为从属接收端。

主控端 - 为启动数据传送 (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) 状态。

C (CHANGE)- 当 SCL 串行时钟数据线为低电位时,数据位就可以由发送端放置到 SDA 串行数据在线,在这段时间内,只要 SCL 串行时钟一直维持在低电位状态,SDA 可以改变它的状态。

D (DATA)- SDA 串行数据在线高或低电位的数据在 SCL 串行时钟线处于高位准时,在整个传输过程中时钟必须稳定维持在高电位以避免错误判读为 START 或STOP 情况。

P (STOP)- 数据传输在收到 STOP 指令时结束,这时候 SDA 串行数据线的位准由低电位回复到高电位,而 SCL 串行时钟线则维持在高电位,一但数据传送结束后,总线会在自动回复到可用状态。

电位转换I²C由于新的I²C 器件以各种不同的电压运作,因此飞利浦半导体开发出一个解决方案,几乎不需要任何额外的动作或成本就能使不同电源电压的I²C 器件拥有完整的双向数据传输电路,只要在I²C 总线的不同电压位准间加上两颗低成本的晶体管,将电位转换器两端总线上的逻辑电压位准加以隔离,这样的安排同时也让这个电压转换电路可以用来隔离总线上已经断电的装置,使连上电源的I²C 器件持续正常运作,这些电位转换功能也可以由低成本电位转换总线缓冲器或GTL 转换器件来达成,I²C 总线规格也拓展到运作电压在 2.7 V 以下的器件,确保I²C 总线在迈入新世纪时仍是新一代系统串行总线的最佳选择。

高速模式I²C 总线高速串行存储器与混合技术电信系统的发展使得总线必须在不同电源电压下高速运作,而I²C 总线高速 (High speed) 模式 (3.4MHz) 正好可以满足这些需求,在完全不影响与现有的(Standard) 与快速 (Fast) 模式器件的兼容性,并保留低成本、简易的特色,不需任何特殊逻辑电位、时序或驱动能力。

高速模式主控端内特别设计的桥接器结构可以让快速与标准模式器件在同一个I²C 总线系统中双向通信,在必要时主控端也可以进行双向电位转换,以支持各种不同电源电压的器件,这种高速模式通常只出现在需要传送大量的数据的器件上,如LCD 显示屏、高位数 ADC 或高容量 EEPROM 等,其他大多数的维护与控制应用则以 100kHz 速度运作的I²C 总线为主。

10-bit I²C 定址机制10-bit I²C 定址可以使用高达 1024 个额外地址,避免因I²C 器件快速增加所带来的从属地址分配问题。

它并未改变I²C 总线规格中所定义的地址格式,而是使用现有规格中所保留的地址。

10-bit 定址并不会影响现有的 7-bit 定址功能,采用 7-bit 与 10-bit 定址的器件可以连接到相同的I²C 总线上,而两种形式的器件也可以使用在标准、快速或高速模式系统中,虽然多数的I²C 器件都还是采用 7-bit 定址,然而设计工程师仍可以利用多个I²C 总线连接端口或多功器/交换器来达成总线上较小数量的器件,作为另一个解决这个定址的考量。

相关文档
最新文档