搜档网
当前位置:搜档网 › I2C通信原理

I2C通信原理

I2C通信原理
I2C通信原理

I2C通信原理

一、

I2C的时序是比较复杂的,你如果能把I2C的时序弄清,那其他器件的时序都不成问题了。

我就按照我的理解来跟你讲吧。

直接用程序来说明吧。

NOP(),一个机器周期时间的延迟,12M晶振时为1微秒

NOPS(),4个NOP()。

sbit SDA P2^0;

sbit SCL P2^1; 定义数据线和时钟线接口

首先,I2C有2个重要的线,SDA数据线SCL时钟线,当总线上没有进行信息传送时,SDA 和SCL都为高电平,我们称之为释放总线。

开始传送信息时,要有一个开始信号,

开始信号:定义为在SCL为高电平的时候,SDA从高电平拉低。

start()

{

SDA=1;

NOP(); //同你图中SDA/SCL上升/下降所用时间1US

SCL=1;

NOPS(); //建立开始信号(同你图中TSU起始信号建立时间一样4US)

SDA=0; //SDA拉低

NOPS();

SCL=0; //SCL拉低,钳住总线,准备发送或接收数据

NOP();

}

结束信号:与开始信号相反,在SCL为高电平时,SDA从低拉高

stop()

{

SDA=0;

NOP();

SCL=1;

NOPS(); //建立信号时间

SDA=1; //拉高结束。

NOPS();

}

我晕,发现写了半天还有好多。。算了帮人帮到底了

发送/接收一个数据:数据的发送和接收都是在SCL为低电平的时候发生,因为SCL为高电平时已给了开始和结束信号。发送数据时,当数据准备读入时,将SCL线暂时拉高(SCL 为高时,SDA无法改变状态),保持一段时间然后拉低(同你图中的TDH,数据输出保持时间),这时数据则发送完毕到SDA上。接收则与之大同小异。当SDA线上有数据过来时,先将SCL拉高,建立好时间,然后拉低,数据则被读入。(关于如何被发出以及如何

被读入则是芯片做的事,我们不用管,只需记住SCL拉低,数据发出/读入)

用程序来讲就是:

send(uchar c) //发送一个字节

{

uint i;

for(i=0;i<8;i++) //该字节8位从高往低发送

{

if((c<

else SDA=0;

NOP();

SCL=1; //建立信号时间

NOPS();

SCL=0; //发送完毕

}

}

recieve()

{

uchar r;uint i;

r=0;SDA=1;

for(i=0;i<8;i++) //读取8位数据

{

NOP();

SCL=0;

NOPS();

SCL=1;

NOP();

r<<=1;

if(SDA==1) r+=1;

NOP();

}

SCL=0;

NOP();

return (r);

}

程序可能有点难懂,不过没关系,使用I2C时候,直接调用写好的程序,如我写的

start.stop.send receive 等,这些程序应该有现成的。

发送一个字节后会有一个应答函数,应答函数定义为,当发送完一个字节也就是8位的时候,如果这是SDA为低电平,则为有应答,反之则无。如果要发送多个字节,一个字节发完后需要一个应答函数才能继续发下面一个字节。程序也就大同小异。掌握好时序就行了。

I2C用的最多的就是E2PROM了。

给你举个例子

如果我想往E2PROM的0x50单元写一个‘a’,则我这样写:

start(); //开始

send(0xa0); //选择我要发送的器件。0xa0为E2PROM的器件地址

answer(); //应答

send(0x50); //选择E2PROM中的0X50地址单元

answer(); //应答

send('a'); //发送数据‘a’

stop(); //停止

摒弃复杂的情况,这里只对I2C做简单的介绍。

一、I2C 总线的一些特征:

?只要求两条总线线路一条串行数据线SDA 一条串行时钟线SCL

?每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机从机关系软件设定地址主机可以作为主机发送器或主机接收器

?它是一个真正的多主机总线如果两个或更多主机同时初始化数据传输可以通过冲突检测和仲裁防止数据被破坏

?串行的8 位双向数据传输位速率在标准模式下可达100kbit/s 快速模式下可达400kbit/s 高速模式下可达3.4Mbit/s

?片上的滤波器可以滤去总线数据线上的毛刺波保证数据完整

?连接到相同总线的IC 数量只受到总线的最大电容400pF 限制

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

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

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

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

起始和结束:

bool I2C_Start(void)

{

SDA_H;

SCL_H;

I2C_delay();

if(!SDA_read)return FALSE; // SDA线为低电平则总线忙,退出

SDA_L; // 拉低SDA线(当SCL为高电平时,SDA由高电平向低电平跳变表示开始信号)

I2C_delay();

if(SDA_read) return FALSE; // SDA线为高电平则总线出错,退出

SDA_L; //数据为准备好时,拉低SCL线

I2C_delay();

return TRUE;

}

发出开始信号之后,设备在数据未准备好时,拉低SCL线,这样主设备可知从设备未发送数据,从设备在数据准备好,可以发送的时候,停止拉低SCL线,这时候才开始真正的数据传输

void I2C_Stop(void)

{

SCL_L;

I2C_delay();

SDA_L;

I2C_delay();

SCL_H; // SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据

I2C_delay();

SDA_H;

I2C_delay();

}

STOP在单主环境下非必要,但在多主环境就非常必要,主控总线的设备发送STOP后,通知总线其他设备总线已经闲置.

void I2C_Ack(void)

{

SCL_L;

I2C_delay();

SDA_L;

I2C_delay();

SCL_H;

I2C_delay();

SCL_L;

I2C_delay();

}

当主机作为接收设备时,主机对最后一个字节不应答,以向发送设备(从设备)标识数据传送结束。这是因为每次传输都应得到应答信号后再进行下一个字节传送。如果此时接收机应答了,那它就接收的不是最后一个字节了。如果是最后一个字节,第9个时钟周期发送的是非应答信号(此时发送的不是应答信号就是非应答信号),最后发送停止信号。

1)主发从收:主START->主发地址->从ACK->(主发数据->从ACK(循环))->主STOP或主START启动下一次传输

这一过程中,主控SCL线,从只在ACK时控SDA线,其他时刻主控SDA线。

2)主收从发:主START->从发地址->主ACK->(从发数据->主ACK(循环))->接受至最后一个字节时,主NACK->主STOP 或主START启动下一次传输

并非每传输8位数据之后,都会有ACK信号,有以下3中例外

当从机不能响应从机地址时(例如它正忙于其他事而无法响应IIC总线的操作,或者这个地址没有对应的从机),在第9个SCL周期内SDA线没有拉低,即没有ACK信号。这时,主机发出一个P信号终止传输或者重新发出一个S信号开始新的传输。

如果从机接收器在传输过程中不能接收更多的数据时,它不会发出ACK信号。这样,主机就可以意识到这点,从而发出一个P信号终止传输或者重新发出一个S信号开始新的传输。

主机接收器在接收到最后一个字节后,也不会发出ACK信号。于是,从机发送器释放SDA 线,以允许主机发出P信号结束传输。

位传输:

主机向从机发送一字节数据

void I2C_SendByte(u8 SendByte) //数据从高位到低位{

u8 i=8;

while(i--)

{

SCL_L;

I2C_delay();

if(SendByte&0x80)

SDA_H;

else

SDA_L;

SendByte<<=1;

I2C_delay();

SCL_H;

I2C_delay();

}

SCL_L;

}

三、7位寻址

在起始条件S 后发送了一个从机地址,这个地址共有7 位,紧接着的第8 位是数据方向位R/W ,0表示发送写、1表示请求数据读:

数据传输一般由主机产生的停止位P终止,但是如果主机仍希望在总线上通讯它可以产生重复起始条件Sr和寻址另一个从机,而不是首先产生一个停止条件。

完整的数据传输:

stm32如何建立与EEPROM的通讯

1、配置I/O端口,确定并配置I2C的模式,使能GPIO和I2C时钟。

2、写:

检测SDA是否空闲;

->按I2C协议发出起始讯号;

->发出7位器件地址和写模式;

->要写入的存储区首地址;

->用页写入方式或字节写入方式写入数据;

2、 3、读:

检测SDA是否空闲;

->按I2C协议发出起始讯号;

->发出7位器件地址和写模式(伪写);->发出要读取的存储区首地址;

->重发起始讯号;

->发出7位器件地址和读模式;

->接收数据;

I2C原理简介及那些坑

一般情况下, i2c 设备焊接没什么问题,按照设备手册一步步来,基本上就顺风顺水能够用起来。如果这么一个简单的东西,有时候想要的结果死活不出来,反复的检查问题的原因,查询解决办法,核查设备的数据手册,甚至发送和接收的每一条命令与数据都知道是什么意思,仍然无法解决问题,那该怎么办呢? 本文主要针对 i2c 设备,讲解如何解决 i2c 设备主机与从机直接无法正常数据交互的问题,侧重点是针对硬件设计不太合理、i2c 设备设计不标准导致总线故障的情况,并且通过分析现象,提出解决方案。对于在设备初始化中,没有设置相应的寄存器或者发送命令,而导致的无法获取想要的数据情况,不作详细介绍。 1 i2c 基本用法 i2c 总线是一种简单、双向二线制同步串行总线。所有主机在 SCL 线上产生它们自己的时钟来传输总线上的报文,SDA 线传输每个字节必 须为 8 位,每次传输可以发送的字节数量不受限制,每个字节后必须跟 一个响应位。在空闲状态时,SCL 与 SDA 均为高电平。 通常一些低功耗 i2c 设备,芯片引脚使用上拉输出即可满足与其正 常数据交互,还有一些 i2c 设备,则需要在总线上外加一个上拉电阻, 此时相应的 I/O 配置成开漏输出,其他的按照芯片手册进行标准配置。 2 硬件问题汇总 2.1 无法正常拉高拉低引脚 首先确定 SDA 与SCL 引脚能够被拉高、拉低,检测方式直接软件控 制 I/O 口输出引脚低电平/高电平,测量引脚电压是否能够随着芯片引 脚的设置输出相应的状态。 如果不能被拉低,检测虚焊、上拉电阻断开、i2c 设备是否正常、 芯片引脚是否损坏等问题,确保能够正常被拉高或者拉低。 2.2 电气特性无法满足 如果正常拉高、拉低的情况下,依然无法正常读取数据。通常建 议,根据负载电流更换小阻值的电阻。 如果需要详细知道原因,就具体查询 i2c 设备电气特性。大多数 i2c 设备电气特性,大致下图所示

实验八 IIC通信协议

实验八I2C通信协议 一、实验目的: 1、培养学生阅读资料的能力; 2、加深学生对I2C总线通信协议的理解; 3、加强学生对模块化编程的理解; 二、实验环境: 1、硬件环境:PC机一台、单片机实验板一块、母头串口交叉线、USB电源线; 2、软件环境:keil uVision2集成开发环境; STC-ISP下载上位机软件; 三、实验原理: 要学会I2C通信协议的编程,关键是要看懂并掌握其时序图,理解对I2C通信协议相关子程序的实验编写。I2C通信协议的总线时序图如下所示: I2C总线时序图 I2C相关子程序的详细介绍 1、起始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。 2、结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。 起始信号和结束信号的时序图如下所示: 起始信号和结束信号的时序图 起始信号的流程如下:

1、SCL和SDA拉高,保持时间约为0.6us-4us; 2、拉低SDA,保持时间为约为0.6us-4us; 3、拉低时钟线 结束信号的流程如下: 1、SCL置高电平,SDA置低电平,保持时间约为0.6us-4us 2、SDA拉高,保持时间约为1.2-4us; 应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判断。 若未收到应答信号,由判断为受控单元出现故障。应答信号的时序图如下所示: 应答时序图 发送时的应答信号 ;**********应答信号********** ACK: SETB SDA ;数据线置高 SETB SCL ;时钟线置高 ACALL DELAY JB SDA,$ ;等待数据线变低 ACALL DELAY CLR SCL ;时钟线置低 RET 注意:这里如果数据线一直为高将进入死循环,所以一般我们都会在这做一个容错的处理。具体的程序如下: ACK: MOV R4,#00H SETB SDA SETB SCL LOP0: JNB SDA,LOP DJNZ R4,LOP0 ;循环255次 LOP: ACALL DEL CLR SCL RET 接收时的应答信号

Linux下I2C驱动介绍

1、I2C概述 I2C是philips公司提供的外设总线,I2C有两条数据线,一条是串行数据线SDA、一条是时钟线SCL,使用SDA和SCL实现了数据的交换,便于布线。I2C总线方便用在EEPROM、实时钟、小型LCD等与CPU外部的接口上。 2、Linux下的驱动思路 Linux系统下编写I2c驱动主要有两种方法:一种是把I2C当做普通字符设备来使用;另一种利用Linux下驱动的体系结构来实现。 第一种方法: 优点:思路比较直接,不用花费大量时间去了解Linux系统下I2C体系结构 缺点:不仅对I2C设备操作要了解,还有了解I2C的适配器操作 不仅对I2C设备器和设备操作需要了解,编写的驱动移植性差,内核 提供的I2C设备器都没有用上。 第二种方法: 第一种的优点就是第二种的缺点,第一种的缺点就是第二种的优点。 3、I2C框架概述 Linux的I2C体系结构分为3部分: 1)I2C核心I2C核心提供了I2C总线驱动和设备驱动的注册和注销的方法,I2C 通信方法(algorithm)上层,与具体适配器无关的代码,检测设备上层的代 码等。 2)I2C总线驱动I2C总线驱动是对I2C硬件体系结构中适配器端的实现,适配器可以直接受CPU来控制。 3)I2C设备驱动I2C设备驱动是对I2C硬件体系结构中设备端的实现,设备端挂在受CPU控制的适配器上,通过I2C适配器与CPU交换数据。 Linux下的I2C体系结构: 1)Linux下的I2C体系结构 4、I2C设备驱动编写方法 首先让我们明白适配器驱动的作用是让我们能够通过它发出标准的I2C时序,在linux

内核源代码中driver/I2C/buss包含一些适配器的驱动,例如s3c2410的驱动I2C-s3c2410.c,适配器被加载到内核中,接下的任务就是实现设备驱动的编写。编写设备驱动的方法主要分为两种方法: 第一种:利用设备提供的I2C-dev.c来实现I2C适配器设备文件,然后通过上层应用程序来操作I2C设备器来控制I2C设备。 第二种:为I2C设备独立编写一个设备驱动 注意:第二种方法不能用设备提供的I2C-dev.c 5、I2C系统下的文件架构 在linux下driver下面有个I2C目录,在I2C目录下包含以下文件和文件夹 1)I2C-core.c 这个文件实现I2C核心功能以及/proc/bus/I2C*接口 2)I2C-dev.c 实现I2C适配器设备文件的功能,每个I2C适配器被分配一个设备,通过 适配器访问设备的时候,主设备号是89,此设备号是0-255. I2C-dev.c并没有针对特定设备而设计,只提供了read() write()和ioctl()等接口,应用层可以通过这些接口访问挂在适配器上的I2C设备存储空间和寄存器,并控制I2C设备的工作方式。 3)Chips 这个文件下面包含特定的I2C设备驱动。 4)Busses 这个文件包含一些I2C总线驱动。 5)Algos文件夹下实现了I2C总线适配器的algorithm 6、重要结构体 1)在内核中的I2C.h这个头文件中对I2C_driver;I2C_client;I2C_adapter和I2C_algorithm 这个四个结构体进行了定义。理解这4个结构体的作用十分关键。 i2c_adapter结构体 struct i2c_adapter { struct module *owner; //所属模块 unsigned int id; //algorithm的类型,定义于i2c-id.h, unsigned int class; const struct i2c_algorithm *algo; //总线通信方法结构体指针 void *algo_data;//algorithm数据 struct rt_mutex bus_lock; //控制并发访问的自旋锁 int timeout; int retries; //重试次数 struct device dev; //适配器设备 int nr; char name[48]; //适配器名称 struct completion dev_released; //用于同步 struct list_head userspace_clients; //client链表头

I2C 协议标准完全版,很详细

THE I 2C-BUS SPECIFICATION VERSION 2.1 JANUARY 2000

CONTENTS 1PREFACE. . . . . . . . . . . . . . . . . . . . . . . . . . .3 1.1Version 1.0 - 1992. . . . . . . . . . . . . . . . . . . . 3 1.2Version 2.0 - 198. . . . . . . . . . . . . . . . . . . . . 3 1.3Version 2.1 - 1999. . . . . . . . . . . . . . . . . . . . 3 1.4Purchase of Philips I2C-bus components . . 3 2THE I2C-BUS BENEFITS DESIGNERS AND MANUFACTURERS. . . . . . . . . . . . . . .4 2.1Designer benefits . . . . . . . . . . . . . . . . . . . . 4 2.2Manufacturer benefits. . . . . . . . . . . . . . . . . 6 3INTRODUCTION TO THE I2C-BUS SPECIFICATION . . . . . . . . . . . . . . . . . . . . .6 4THE I2C-BUS CONCEPT . . . . . . . . . . . . . . .6 5GENERAL CHARACTERISTICS . . . . . . . . .8 6BIT TRANSFER . . . . . . . . . . . . . . . . . . . . . .8 6.1Data validity . . . . . . . . . . . . . . . . . . . . . . . . 8 6.2START and STOP conditions. . . . . . . . . . . 9 7TRANSFERRING DATA. . . . . . . . . . . . . . .10 7.1Byte format . . . . . . . . . . . . . . . . . . . . . . . . 10 7.2Acknowledge. . . . . . . . . . . . . . . . . . . . . . . 10 8ARBITRATION AND CLOCK GENERATION . . . . . . . . . . . . . . . . . . . . . .11 8.1Synchronization . . . . . . . . . . . . . . . . . . . . 11 8.2Arbitration . . . . . . . . . . . . . . . . . . . . . . . . . 12 8.3Use of the clock synchronizing mechanism as a handshake. . . . . . . . . . . 13 9FORMATS WITH 7-BIT ADDRESSES. . . .13 107-BIT ADDRESSING . . . . . . . . . . . . . . . . .15 10.1Definition of bits in the first byte . . . . . . . . 15 10.1.1General call address. . . . . . . . . . . . . . . . . 16 10.1.2START byte . . . . . . . . . . . . . . . . . . . . . . . 17 10.1.3CBUS compatibility. . . . . . . . . . . . . . . . . . 18 11EXTENSIONS TO THE STANDARD- MODE I2C-BUS SPECIFICATION . . . . . . .19 12FAST-MODE. . . . . . . . . . . . . . . . . . . . . . . .19 13Hs-MODE . . . . . . . . . . . . . . . . . . . . . . . . . .20 13.1High speed transfer. . . . . . . . . . . . . . . . . . 20 13.2Serial data transfer format in Hs-mode. . . 21 13.3Switching from F/S- to Hs-mode and back . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2313.4Hs-mode devices at lower speed modes. . 24 13.5Mixed speed modes on one serial bus system. . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 13.5.1F/S-mode transfer in a mixed-speed bus system. . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 13.5.2Hs-mode transfer in a mixed-speed bus system. . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 13.5.3Timing requirements for the bridge in a mixed-speed bus system. . . . . . . . . . . . . . 27 1410-BIT ADDRESSING. . . . . . . . . . . . . . . . 27 14.1Definition of bits in the first two bytes. . . . . 27 14.2Formats with 10-bit addresses. . . . . . . . . . 27 14.3General call address and start byte with 10-bit addressing. . . . . . . . . . . . . . . . . . . . 30 15ELECTRICAL SPECIFICATIONS AND TIMING FOR I/O STAGES AND BUS LINES. . . . . . . . . . . . . . . . . . . . 30 15.1Standard- and Fast-mode devices. . . . . . . 30 15.2Hs-mode devices. . . . . . . . . . . . . . . . . . . . 34 16ELECTRICAL CONNECTIONS OF I2C-BUS DEVICES TO THE BUS LINES . 37 16.1Maximum and minimum values of resistors R p and R s for Standard-mode I2C-bus devices . . . . . . . . . . . . . . . . . . . . . 39 17APPLICATION INFORMATION. . . . . . . . . 41 17.1Slope-controlled output stages of Fast-mode I2C-bus devices. . . . . . . . . . . . 41 17.2Switched pull-up circuit for Fast-mode I2C-bus devices . . . . . . . . . . . . . . . . . . . . . 41 17.3Wiring pattern of the bus lines. . . . . . . . . . 42 17.4Maximum and minimum values of resistors R p and R s for Fast-mode I2C-bus devices . . . . . . . . . . . . . . . . . . . . . 42 17.5Maximum and minimum values of resistors R p and R s for Hs-mode I2C-bus devices . . . . . . . . . . . . . . . . . . . . . 42 18BI-DIRECTIONAL LEVEL SHIFTER FOR F/S-MODE I2C-BUS SYSTEMS . . . . 42 18.1Connecting devices with different logic levels. . . . . . . . . . . . . . . . . . . . . . . . . 43 18.1.1Operation of the level shifter . . . . . . . . . . . 44 19DEVELOPMENT TOOLS AVAILABLE FROM PHILIPS. . . . . . . . . . . . . . . . . . . . . 45 20SUPPORT LITERATURE . . . . . . . . . . . . . 46

I2C总线的结构与工作原理

I2C总线的结构与工作原理 2.1概述 2.1.1 I2C总线在单片机应用系统设计中的意义 现代消费类产品、通讯类产品、仪器仪表、工业测控系统中,逐渐形成了以一个或 多个单片机组成的智能系统,这些系统硬件结构都有相似之处: 1.单片机电路已日趋简单化和标准化。通常是由单片机(MICROCONTROLLER)、程序存储器(EPROM)、数据存储器(SRAM)构成的三片体系,或采用有在片程序存储器的单片机与数据存储器构成的二片体系,以及单片机与通用外围接口器件(PSD)构成的最简单体系。 2. 都有一些外围通用电路,如EEPROM、I/O口、A/D、D/A、日历时钟等外围器件和键盘、LED/LCD显示器、打印机接口等外围设备模块等。 3.面对系统特殊应用的一些电路,如无线电、电视、音像系统中的数字协调、编码、解码、图象处理、频率合成、音调控制、立体声处理等。 在上述的一些电路中,除与单片机直接相关的程序存储器、并行扩展的数据存储器外,单片机对许多外围电路之间主要是实现控制功能,而且许多外设并不要求很高的数据传送速度。为了简化系统,提高系统的可靠性,缩短产品开发周期,增加硬件结构的灵活性,Philips公司推出了一种高效、可靠、方便的串行扩展总线I2C总线。 在单片机应用系统中推广I2C总线后将会大大改变单片机应用系统结构性能、对单片机的应用开发带来以下好处: 可最大限度地简化结构。二线制的I2C串行总线使得各电路单元之间只需最简单的连接,而且总线接口都集成在器件中,不需另加总线接口电路。电路的简化省去了电路板上大量走线,减少电路板面积,提高了可靠性,降低了成本。 可实现电路系统的模块化、标准化设计。在I2C总线上各单元电路除了个别中断引线外,相互之间没有其他连线,用户常用的单元电路基本上与系统电路无关,故极易形成用户自己的标准化、模块化设计。 标准I2C总线模块的组合开发方式大缩短了新品的开发周期。 I2C总线各节点具有独立的电器特性,各节点单元电路能在相互不受影响的情况下,甚至在系统供电情况下,接入或撤除。I2C总线系统构成具有最大的灵活性。系统该型设计、或对已加工好的电路板需扩展功能时,对原有设计及电路板系统影响最小。 I2C总线系统可方便地对某一接点电路进行故障诊断与跟踪,有极好的可维护性 目前Philips及I2C总线器件,除带有I2C总线单片机、常用的通用外围器件外,在家电产品、电讯、电视、音像产品中已发展成套I2C总线器件,在这些部门中I2C总线系统已得到了广泛的应用。 2.1.2 I2C总线的一般应用特性 I2C总线系统中,带有I2C总线的单片机,其I2C总线输入输出口的电器结构、相关的特殊功能寄存器(SFR)设置以及所提供的标准程序模块,为用户掌握I2C总线的系统设计和应用软件的编制带来极大的方便。 I2C总线的串行数据传送与一般UART的串行数据传送无论从借口电器特性、传送状态管理以及程序编制特点都有很大的不同,了解这些特点十分重要。 1.二线传输。I2C总线上所有的节点,如主器件(单片机,微处理器)、外围器件、借口模块等都连到同名端的SDA、SCL上。 2.系统中有多个主器件时,这些器件都可作总线的主控制器(无中心主机),I2C总线工作时任何一个主件都可成为主控制器,多机竞争时的时钟同步与总线仲裁都由硬件与标准软件模块自动完成,无须用户介入。 3.I2C总线传输时,采用状态码的管理方法。对应于总线数据传输时的任何一种状态,在状态寄存器中会出现相应的状态码,并且会自动进入响应的状态处理程序中进行自动处理,无须用户介入,用户只须将Philips公司提供的标准状态处理器一定的空间即可。 4.系统中所有外围器件及模块采用器件地址及引脚地址的编码方法。系统中主控制器对任何节点的寻址采用纯软件寻址方法,避免了片选线的先连方法。系统中若有地址编码冲突可通过改变地址引脚的电平设置来解决。 5.所有带I2C接口的外围器件都具有应答功能。片有多少单元地址时,读数据、写时都有地址自动加1功能。这样,在I2C 总线对某一器件读写多个字节时很容易实现自动操作,即准备好读、写入口条件后,只须启动I2C总线就可自动完成n个字节的读、写操作。 6.I2C总线电器接口为开漏晶体管组成,开路输出没有找到电源的钳位二级管,而连到I2C总线的每个器件上,其自身

简单的I2C协议理解 i2c程序(调试通过)

简单的I2C协议理解 一. 技术性能: 工作速率有100K和400K两种; 支持多机通讯; 支持多主控模块,但同一时刻只允许有一个主控; 由数据线SDA和时钟SCL构成的串行总线; 每个电路和模块都有唯一的地址; 每个器件可以使用独立电源 二. 基本工作原理: 以启动信号START来掌管总线,以停止信号STOP来释放总线; 每次通讯以START开始,以STOP结束; 启动信号START后紧接着发送一个地址字节,其中7位为被控器件的地址码,一位为读/写控制位R/W,R /W位为0表示由主控向被控器件写数据,R/W为1表示由主控向被控器件读数据; 当被控器件检测到收到的地址与自己的地址相同时,在第9个时钟期间反馈应答信号; 每个数据字节在传送时都是高位(MSB)在前; 写通讯过程: 1. 主控在检测到总线空闲的状况下,首先发送一个START信号掌管总线; 2. 发送一个地址字节(包括7位地址码和一位R/W); 3. 当被控器件检测到主控发送的地址与自己的地址相同时发送一个应答信号(ACK); 4. 主控收到ACK后开始发送第一个数据字节; 5. 被控器收到数据字节后发送一个ACK表示继续传送数据,发送NACK表示传送数据结束; 6. 主控发送完全部数据后,发送一个停止位STOP,结束整个通讯并且释放总线; 读通讯过程: 1. 主控在检测到总线空闲的状况下,首先发送一个START信号掌管总线; 2. 发送一个地址字节(包括7位地址码和一位R/W); 3. 当被控器件检测到主控发送的地址与自己的地址相同时发送一个应答信

号(ACK); 4. 主控收到ACK后释放数据总线,开始接收第一个数据字节; 5. 主控收到数据后发送ACK表示继续传送数据,发送NACK表示传送数据结束; 6. 主控发送完全部数据后,发送一个停止位STOP,结束整个通讯并且释放总线; 四. 总线信号时序分析 1. 总线空闲状态 SDA和SCL两条信号线都处于高电平,即总线上所有的器件都释放总线,两条信号线各自的上拉电阻把电平拉高; 2. 启动信号START 时钟信号SCL保持高电平,数据信号SDA的电平被拉低(即负跳变)。启动信号必须是跳变信号,而且在建立该信号前必修保证总线处于空闲状态; 3. 停止信号STOP 时钟信号SCL保持高电平,数据线被释放,使得SDA返回高电平(即正跳变),停止信号也必须是跳变信号。 4. 数据传送 SCL线呈现高电平期间,SDA线上的电平必须保持稳定,低电平表示0(此时的线电压为地电压),高电平表示1(此时的电压由元器件的VDD决定)。只有在SCL线为低电平期间,SDA上的电平允许变化。 5. 应答信号ACK I2C总线的数据都是以字节(8位)的方式传送的,发送器件每发送一个字节之后,在时钟的第9个脉冲期间释放数据总线,由接收器发送一个ACK(把数据总线的电平拉低)来表示数据成功接收。 6. 无应答信号NACK 在时钟的第9个脉冲期间发送器释放数据总线,接收器不拉低数据总线表示一个NACK,NACK有两种用途: a. 一般表示接收器未成功接收数据字节; b. 当接收器是主控器时,它收到最后一个字节后,应发送一个NACK信号,以通知被控发送器结束数据发送,并释放总线,以便主控接收器发送一个停止信号STOP。 五. 寻址约定

Linux下I2C驱动架构全面分析概要

Linux下I2C驱动架构全面分析 I2C概述 I2C是philips提岀的外设总线. I2C只有两条线,一条串行数据线:SDA, —条是时钟线SCL,使用SCL , SDA这两根信号线就实现了设备之间的数据交互,它方便了工程师的布线。 因此,I2C总线被非常广泛地应用在EEPROM,实时钟,小型LCD等设备与CPU的接口中。 linux下的驱动思路 在linux系统下编写I2C驱动,目前主要有两种方法,一种是把I2C设备当作一个普通的字符设备来处理,另一种是利用linux下I2C驱动体系结构来完成。下面比较下这两种方法: 第一种方法: 优点:思路比较直接,不需要花很多时间去了解linux中复杂的I2C子系统的操作方法。 缺点: 要求工程师不仅要对I2C设备的操作熟悉,而且要熟悉I2C的适配器(I2C控制器)操作。要求工程师对I2C的设备器及I2C的设备操作方法都比较熟悉,最重要的是写岀的程序可以移植性差。 对内核的资源无法直接使用,因为内核提供的所有I2C设备器以及设备驱动都是基于I2C 子系统的格式。 第一种方法的优点就是第二种方法的缺点, 第一种方法的缺点就是第二种方法的优点。 I2C架构概述 Linux的I2C体系结构分为3个组成部分: I2C核心:I2C核心提供了I2C总线驱动和设备驱动的注册,注销方法,I2C通信方法 (” algorithm 上层的,与具体适配器无关的代码以及探测设备,检测设备地址的上层代码等。 I2C总线驱动:I2C总线驱动是对I2C硬件体系结构中适配器端的实现,适配器可由CPU控制,甚至可以直接集成在CPU内部。 I2C设备驱动:I2C设备驱动(也称为客户驱动)是对I2C硬件体系结构中设备端的实现,设备一般挂接在受CPU控制的I2C适配器上,通过I2C适配器与CPU交换数据。

I2C通讯可能问题分析

I2C 总线比较简单,可能的问题主要出在时序上,一般设计者即使忽略也不太会有麻烦,但是有几个指标一定要认真考虑: 1、总线驱动能力。上拉电阻和负载电容决定了总线在某一速率下的稳定性。当输出为高时,电流通过上拉电阻对负载电容充电。上拉越大,电容越大,所需要的时间就越长,如果超过了通信周期的10%,那么这个上升沿就太缓了,相应的建立时间会受到影响,I2C规范的最大负载电容是400pF,快速模式下是100pF。如果输出为低,电流通过上拉电阻被I2C master 器件吸取,(注意根据I2C规范,最小只有3毫安的吸取电流)那么这个吸取电流在上拉电阻上的压降就决定了输出低电平能达到的范围,如果不能达到0.3VDD以下,就会有误采样。有人说加大上拉电阻是不妥当的,要具体分析吸取电流、负载电容、上拉电平和通信速率才能决定(普通模式和快速模式是不一样的)。 2。总线空闲时间(bus free time)。它的定义是从上一次通信的停止到下一次通信的开始的间隔时间。通常一些I2C器件的要求是4.7微秒,也有要20微秒的,比如某种激光器内嵌的PROM。对CPU来说,它往往是I2C的master 器件,由于运行速度很快,这个指标如果不注意的话就会达不到,导致I2C总线不响应。另外要注意的是CPU内部的I2C停止时刻标志位置位和硬件总线上的I2C停止标志(clock 为高时数据从低到高的跳变)时刻往往是不一致的。有的芯片有15-20个微秒的差别,所以要用示波器量出来为准。 3。总线保持时间。I2C的总线建立和保持与有的时序定义不一样。建立时间是指从数据跳变沿到时钟上升沿的间隔;而保持时间是指从时钟下降沿到数据下一个跳变沿的间隔。通常建立时间都能保证,保持时间一般为0纳秒。但是有的器件做不到,一般为900纳秒;还有的虽然宣称是0纳秒,时间也要近1微秒(比如说TI的某器件) 仅供参考! a.完全不能进行读写: (1) 通信协议不正确:有很多的I2C设备,并不支持所有的I2C协议,同时也不是一个比较标准的I2C设备;软件的通信时序不正确。 (2)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总线只能接多个同类型的半固定的从地址设备。 如7bit半固定从地址通常7-bit 中四个较重要的位(MSB) 为固定的,并依器件本身性质的分类区分,如1010 即代表串行EEPROM,而其他三个较不重要的位(LSB),即A2、A1 与A0 则可以通过硬件电子引脚设定,并取得高达8 个不同的I2C 地址组合,因此在同一个I2C 总线上可以有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总线协议规范 v2.1

THE I2C-BUS SPECIFICATION VERSION 2.1 JANUARY 2000

CONTENTS 1PREFACE. . . . . . . . . . . . . . . . . . . . . . . . . . .3 1.1Version 1.0 - 1992. . . . . . . . . . . . . . . . . . . . 3 1.2Version 2.0 - 198. . . . . . . . . . . . . . . . . . . . . 3 1.3Version 2.1 - 1999. . . . . . . . . . . . . . . . . . . . 3 1.4Purchase of Philips I2C-bus components . . 3 2THE I2C-BUS BENEFITS DESIGNERS AND MANUFACTURERS. . . . . . . . . . . . . . .4 2.1Designer benefits . . . . . . . . . . . . . . . . . . . . 4 2.2Manufacturer benefits. . . . . . . . . . . . . . . . . 6 3INTRODUCTION TO THE I2C-BUS SPECIFICATION . . . . . . . . . . . . . . . . . . . . .6 4THE I2C-BUS CONCEPT . . . . . . . . . . . . . . .6 5GENERAL CHARACTERISTICS . . . . . . . . .8 6BIT TRANSFER . . . . . . . . . . . . . . . . . . . . . .8 6.1Data validity . . . . . . . . . . . . . . . . . . . . . . . . 8 6.2START and STOP conditions. . . . . . . . . . . 9 7TRANSFERRING DATA. . . . . . . . . . . . . . .10 7.1Byte format . . . . . . . . . . . . . . . . . . . . . . . . 10 7.2Acknowledge. . . . . . . . . . . . . . . . . . . . . . . 10 8ARBITRATION AND CLOCK GENERATION . . . . . . . . . . . . . . . . . . . . . .11 8.1Synchronization . . . . . . . . . . . . . . . . . . . . 11 8.2Arbitration . . . . . . . . . . . . . . . . . . . . . . . . . 12 8.3Use of the clock synchronizing mechanism as a handshake. . . . . . . . . . . 13 9FORMATS WITH 7-BIT ADDRESSES. . . .13 107-BIT ADDRESSING . . . . . . . . . . . . . . . . .15 10.1Definition of bits in the first byte . . . . . . . . 15 10.1.1General call address. . . . . . . . . . . . . . . . . 16 10.1.2START byte . . . . . . . . . . . . . . . . . . . . . . . 17 10.1.3CBUS compatibility. . . . . . . . . . . . . . . . . . 18 11EXTENSIONS TO THE STANDARD- MODE I2C-BUS SPECIFICATION . . . . . . .19 12FAST-MODE. . . . . . . . . . . . . . . . . . . . . . . .19 13Hs-MODE . . . . . . . . . . . . . . . . . . . . . . . . . .20 13.1High speed transfer. . . . . . . . . . . . . . . . . . 20 13.2Serial data transfer format in Hs-mode. . . 21 13.3Switching from F/S- to Hs-mode and back . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2313.4Hs-mode devices at lower speed modes. . 24 13.5Mixed speed modes on one serial bus system. . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 13.5.1F/S-mode transfer in a mixed-speed bus system. . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 13.5.2Hs-mode transfer in a mixed-speed bus system. . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 13.5.3Timing requirements for the bridge in a mixed-speed bus system. . . . . . . . . . . . . . 27 1410-BIT ADDRESSING. . . . . . . . . . . . . . . . 27 14.1Definition of bits in the first two bytes. . . . . 27 14.2Formats with 10-bit addresses. . . . . . . . . . 27 14.3General call address and start byte with 10-bit addressing. . . . . . . . . . . . . . . . . . . . 30 15ELECTRICAL SPECIFICATIONS AND TIMING FOR I/O STAGES AND BUS LINES. . . . . . . . . . . . . . . . . . . . 30 15.1Standard- and Fast-mode devices. . . . . . . 30 15.2Hs-mode devices. . . . . . . . . . . . . . . . . . . . 34 16ELECTRICAL CONNECTIONS OF I2C-BUS DEVICES TO THE BUS LINES . 37 16.1Maximum and minimum values of resistors R p and R s for Standard-mode I2C-bus devices . . . . . . . . . . . . . . . . . . . . . 39 17APPLICATION INFORMATION. . . . . . . . . 41 17.1Slope-controlled output stages of Fast-mode I2C-bus devices. . . . . . . . . . . . 41 17.2Switched pull-up circuit for Fast-mode I2C-bus devices . . . . . . . . . . . . . . . . . . . . . 41 17.3Wiring pattern of the bus lines. . . . . . . . . . 42 17.4Maximum and minimum values of resistors R p and R s for Fast-mode I2C-bus devices . . . . . . . . . . . . . . . . . . . . . 42 17.5Maximum and minimum values of resistors R p and R s for Hs-mode I2C-bus devices . . . . . . . . . . . . . . . . . . . . . 42 18BI-DIRECTIONAL LEVEL SHIFTER FOR F/S-MODE I2C-BUS SYSTEMS . . . . 42 18.1Connecting devices with different logic levels. . . . . . . . . . . . . . . . . . . . . . . . . 43 18.1.1Operation of the level shifter . . . . . . . . . . . 44 19DEVELOPMENT TOOLS AVAILABLE FROM PHILIPS. . . . . . . . . . . . . . . . . . . . . 45 20SUPPORT LITERATURE . . . . . . . . . . . . . 46

相关主题