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 需要实现“时钟同步”和“总线仲裁”,引脚在输出信号的同时还能对引脚上的电平进行检测,检测是否与刚才输出一致,为“时钟同步”和“总线仲裁”提供硬件基础。

  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 总线连接端口或多功器/交换器来达成总线上较小数量的器件,作为另一个解决这个定址的考量。

相关文档
最新文档