i2c通讯协议及程序
I2C通讯协议(中文译版)I2C_Spec
1.1 版本 1.0-1992 .................................................................................................................... 3 1.2 版本 2.0-1998 .................................................................................................................... 3 1.3 版本 2.1-2000 .................................................................................................................... 3 1.4 购买 Philips 的 I2C 总线元件 .............................................................................................. 3
I2C通信时序图解析
I2C通信时序图解析⼀、I2C协议简介 I2C 通讯协议(Inter-Integrated Circuit)是由 Phiilps 公司开发的,由于它引脚少,硬件实现简单,可扩展性强,不需要 USART、CAN 等通讯协议的外部收发设备,现在被⼴泛地使⽤在系统内多个集成电路(IC)间的通讯。
关于I2C协议的更多内容,可阅读《I2C总线协议》,本博⽂主要分析I2C波形图,对于I2C的基础知识不在做介绍。
⼆、I2C协议标准代码2.1 起始信号&停⽌信号 起始信号:当 SCL 线是⾼电平时 SDA 线从⾼电平向低电平切换。
停⽌信号:当 SCL 线是⾼电平时 SDA 线由低电平向⾼电平切换。
2.1.1 起始信号代码void I2C_Start(void){I2C_SDA_High(); //SDA=1I2C_SCL_High(); //SCL=1I2C_Delay();I2C_SDA_Low();I2C_Delay();I2C_SCL_Low();I2C_Delay();}2.1.2 停⽌信号代码void I2C_Stop(void){I2C_SDA_Low();I2C_SCL_High();I2C_Delay();I2C_SDA_High();I2C_Delay();}2.2 发送⼀个字节 CPU向I2C总线设备发送⼀个字节(8bit)数据u8 I2C_SendByte(uint8_t Byte){uint8_t i;/* 先发送⾼位字节 */for(i = 0 ; i < 8 ; i++){if(Byte & 0x80){I2C_SDA_High();}else{I2C_SDA_Low();}I2C_Delay();I2C_SCL_High();I2C_Delay();I2C_SCL_Low();I2C_Delay();if(i == 7){I2C_SDA_High(); /* 释放SDA总线 */}Byte <<= 1; /* 左移⼀位 */I2C_Delay();}} 2.3 读取⼀个字节 CPU从I2C总线设备上读取⼀个字节(8bit数据)u8 I2C_ReadByte(void){uint8_t i;uint8_t value;/* 先读取最⾼位即bit7 */value = 0;for(i = 0 ; i < 8 ; i++){value <<= 1;I2C_SCL_High();I2C_Delay();if(I2C_SDA_READ()){value++;}I2C_SCL_Low();I2C_Delay();}return value;}2.4 应答2.4.1 CPU产⽣⼀个ACK信号void I2C_Ack(void){I2C_SDA_Low();I2C_Delay();I2C_SCL_High();I2C_Delay();I2C_SCL_Low();I2C_Delay();I2C_SDA_High();}2.4.2 CPU产⽣⼀个⾮ACK信号void I2C_NoAck(void){I2C_SDA_High();I2C_Delay();I2C_SCL_High();I2C_Delay();I2C_SCL_Low();I2C_Delay();}2.4.3 CPU产⽣⼀个时钟,并读取器件的ACK应答信号uint8_t I2C_WaitToAck(void){uint8_t redata;I2C_SDA_High();I2C_Delay();I2C_SCL_High();I2C_Delay();if(I2C_SDA_READ()){redata = 1;}else{redata = 0;}I2C_SCL_Low();I2C_Delay();return redata;}三、I2C通信时序图解析 有了上边的I2C总线标准代码的基础,下⾯我们进⼊本博⽂所要讲解的内容,怎么分析I2C的时序图,以O2Micro的OZ9350为例,OZ9350是⼀款模拟前端(AFE)的IC器件。
I2C通讯协议介绍ppt课件
结束整个通讯并且释放总线;
最新课件
15
I2C数据传送
•SCL线呈现高电平期间,SDA线上的电平必 须保持稳定,低电平表示0(此时的线电压 为地电压),高电平表示1(此时的电压由元 器件的VDD决定)。只有在SCL线为低电平期 间,SDA上的电平允许变化。
• 在多主机系统中,可能同时有几个主机企 图启动总线传输数据。为了避免混乱,I2C 总线要通过总线仲裁决定由哪一台主机控 制总线——支持多主控模块,但同一时刻 只允许有一个主控
最新课件
13
•启动信号START后紧接着发送一个地址字节,其中 7位为被控器件的地址码,一位为读/写控制位 R/W,R. /W位为0表示由主控向被控器件写数据, R/W为1表示由主控向被控器件读数据;
字节; • 5. 主控收到数据后发送ACK表示继续传送数据,发送
NACK表示传送数据结束; • 6. 主控发送完全部数据后,发送一个停止位STOP,结
束整个通讯并且释放总线
最新课件
17
I2C数据的中断
• 接收器收到一个完整的数据字节后,有可 能需要完成一些其它工作,如处理内部中 断服务等,可能无法接受下一个字节,这 时候接收器可以将SCL线拉成低电平,从而 使主机处于等待状态,直到接收器准备好 接受下一个字节时,再释放SCL线使为高电 平,使数据传输继续。
I2C串行總線的原理
1、总线的概述 2、总线结构 3、总线传输协议 4、常见波形分析
最新课件
1
I2C串行總線概述
• I2C(Inter-Integrated Circuit)總線是由 PHILIPS公司開發的兩線式串行總線,用于 连接微控制器及其外圍設備。是微電子通 信控制領域廣泛采用的一種總線標準。
I2C通信原理及程序详细讲解
I2C通信原理及程序详细讲解I2C(Inter-Integrated Circuit)是一种串行通信协议,常用于连接微控制器、传感器和其他外部设备。
I2C通信协议由荷兰飞利浦公司于1982年开发,它使用两根信号线(SDA和SCL)进行数据传输。
I2C通信协议采用主从结构,一个主设备(如微控制器)可以连接多个从设备(如传感器)。
主从设备之间通过SDA和SCL线进行数据传输。
SDA线是双向数据线,用于传输数据,SCL线是时钟线,用于同步数据传输。
I2C通信协议中,设备的地址是一个重要概念。
每个设备都有一个唯一的地址,通过该地址可以选择和通信特定的设备。
地址由7个位组成,其中最高位是固定的,并取决于设备是主设备还是从设备。
如果最高位为0,则表示该设备是主设备;如果最高位为1,则表示该设备是从设备。
通过以下步骤,让我们详细了解如何在I2C总线上进行通信。
1.初始化I2C总线:在程序开始时,需要初始化I2C总线。
这通常包括初始化SDA和SCL引脚,设置时钟频率等。
具体的初始化步骤取决于使用的硬件和软件环境。
2.发送开始信号:开始信号表示I2C数据传输的开始。
它由主设备发送,并且SDA线从高电平转为低电平时发出。
发送开始信号后,SDA线上的数据将被解释为地址数据。
3.发送设备地址:主设备发送一个包含设备地址和读/写位(R/W)的数据字节。
设备地址是唯一的,并且由主设备选择。
读/写位指示从设备是要读取数据还是写入数据。
4.等待从设备响应:主设备发送设备地址后,会等待从设备的响应。
从设备将响应一个应答位(ACK)来确认地址接收成功。
如果收到ACK位,则继续进行下一步,否则可能是设备未连接或通信错误。
5.发送数据:主设备发送数据给从设备。
数据可以是命令、配置或实际数据,具体取决于应用场景。
发送数据的方式是将每个数据字节传输到SDA线上,并在每个数据字节后发送一个ACK位。
6.接收数据:从设备将数据发送给主设备。
数据可以是传感器读数、存储器数据等。
I2C协议及用IO口实现I2C
关键字:iic总线 iic协议 iic总线协议 iic程序 i2c总线 i2c协议 i2c总线协议 i2c程序 i2c接口 i2c是什么 i2c驱动 i2c存储器IIC即I2C,一种总线结构。
IIC 是作为英特尔IC 的互补,这种总线类型是由菲利浦半导体公司在八十年代初设计出来的,主要是用来连接整体电路(ICS) ,IIC是一种多向控制总线,也就是说多个芯片可以连接到同一总线结构下,同时每个芯片都可以作为实施数据传输的控制源。
这种方式简化了信号传输总线。
例如:内存中的SPD信息,通过IIC,与BX芯片组联系,IIC 存在于英特尔PIIX4结构体系中。
随着大规模集成电路技术的发展,把CPU和一个单独工作系统所必需的ROM、RAM、I/O端口、A/D、D/A等外围电路集成在一个单片内而制成的单片机或微控制器愈来愈方便。
目前,世界上许多公司生产单片机,品种很多。
其中包括各种字长的CPU,各种容量的ROM、RAM以及功能各异的I/O接口电路等等,但是,单片机的品种规格仍然有限,所以只能选用某种单片机来进行扩展。
扩展的方法有两种:一种是并行总线,另一种是串行总线。
由于串行总线的连线少,结构简单,往往不用专门的母板和插座而直接用导线连接各个设备。
因此,采用串行线可大大简化系统的硬件设计。
PHILIPS公司早在十几年前就推出了I2C串行总线,利用该总线可实现多主机系统所需的裁决和高低速设备同步等功能。
因此,这是一种高性能的串行总线。
1 、I2C总线的硬件结构I2C串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。
所有接到I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。
典型的I2C总线结构如图1所示。
为了避免总线信号的混乱,要求各设备连接到总线的输出端时必须是开漏输出或集电极开路输出。
设备与总线的接口电路如图2所示。
设备上的串行数据线SDA接口电路应该是双向的,输出电路用于向总线上发送数据,输入电路用于接收总线上的数据。
I2C通信原理及程序详细讲解
I2C 通信:起始条件:SCL为高电平,SDA电平从高变低,这一变化即完成了通信的起始条件。
起始条件和数据通信间,通常会有延时要求具体的指标见设备说明。
数据传输阶段:一字节需要9个时钟周期;且每一位需要一个时钟周期;如上图所示,ADDRESS为目标设备的地址,R/ w为通信的的方向位;"1"时表示读,即后续的数据由目标设备发出,主机进行接收;"0"时表示写,即后续的数据由主机发出目标设备进行接收。
当ACK信号为"0"时,说明接收成功;为"1"时,说明接收失败。
每个字节的传输都是由高位(MSB)到低位(LSB)依次进行传输。
在数据通信过程中,总是由数据接收方发出ACK信号。
终止阶段:当主机完成数据通信,并终止本次传输时会发出终止信号。
当SCL 是高电平时,SDA电平由低变高,这个变化意味着传输终止。
注:每个时钟周期的高电平期间,SDA的数据状态达到稳定。
下面给出了模拟I2C总线进行读写的伪代码,用以说明如何使用GPIO 实现I2C通信:int i2c_start() /* I2C起始条件*/{//初始化GPIO口set_gpio_direction(SDA, OUTP); //设置SDA方向为输出set_gpio_direction (SCL, OUTP); //设置SCL方向为输出set_gpio_value(SDA, 1); //设置SDA为高电平set_gpio_value(SCL, 1); //设置SCL为高电平delay(); //延时//起始条件set_gpio_value(SDA, 0); //SCL为高电平时,SDA由高变低delay(); //适当延时}void i2c_stop() /* I2C终止条件*/{set_gpio_value(SCL, 1);set_gpio_direction(SDA, OUTP);set_gpio_value(SDA, 0);delay();set_gpio_value(SDA, 1); //SCL高电平时,SDA由低变高}/* I2C读取ACK信号(写数据时使用)返回值:0表示ACK信号有效;非0表示ACK信号无效*/unsigned char i2c_read_ack(){unsigned char r;set_gpio_direction(SDA, INP); //设置SDA方向为输入set_gpio_value(SCL,0); // SCL变低r = get_gpio_value(SDA); //读取ACK信号delay();set_gpio_value(SCL,1); // SCL变高delay();return r;}/* I2C发出ACK信号(读数据时使用) */int i2c_send_ack(){set_gpio_direction(SDA, OUTP); //设置SDA方向为输出set_gpio_value(SCL,0); // SCL变低set_gpio_value(SDA, 0); //发出ACK信号delay();set_gpio_value(SCL,1); // SCL变高delay();}void i2c_write_byte(unsigned char b) /* I2C字节写*/{int i;set_gpio_direction(SDA, OUTP); //设置SDA方向为输出for (i=7; i>=0; i--){set_gpio_value(SCL, 0); // SCL变低delay();set_gpio_value(SDA, b & (1<<i)); //从高位到低位依次发送数据set_gpio_value(SCL, 1); // SCL变高delay();}i2c_read_ack(); //检查目标设备的ACK信号}/* I2C字节读*/unsigned char i2c_read_byte(){int i;unsigned char r = 0;set_gpio_direction(SDA, INP); //设置SDA方向为输入for (i=7; i>=0; i--){set_gpio_value(SCL, 0); // SCL变低delay();r = (r <<1) | get_gpio_value(SDA); //高位到低位依次数据读取set_gpio_value(SCL, 1); // SCL变高delay();}i2c_send_ack(); //向目标设备发送ACK信号return r;}/* I2C读操作addr:目标设备地址buf:读缓冲区len:读入字节的长度*/void i2c_read(unsigned char addr, unsigned char* buf, int len){int i;unsigned char t;i2c_start(); //起始条件,开始数据通信//发送地址和数据读写方向t = (addr << 1) | 1; //低位为1,表示读数据i2c_write_byte(t);//读入数据for (i=0; i<len; i++)buf[i] = i2c_read_byte();i2c_stop(); //终止条件,结束数据通信}/* I2C写操作addr:目标设备地址buf:写缓冲区len:写入字节的长度*/void i2c_write (unsigned char addr, unsigned char* buf, int len){int i;unsigned char t;i2c_start(); //起始条件,开始数据通信//发送地址和数据读写方向t = (addr << 1) | 0; //低位为0,表示写数据i2c_write_byte(t);//写入数据for (i=0; i<len; i++)i2c_write_byte(buf[i]);i2c_stop(); //终止条件,结束数据通信}。
IIC通讯协议详解
IIC通讯协议详解IIC概述IIC:两线式串⾏总线,它是由数据线SDA和时钟线SCL构成的串⾏总线,可发送和接收数据。
在CPU与被控IC之间、IC与IC之间进⾏双向传送,⾼速IIC总线⼀般可达400kbs以上。
时钟线SCL:在通信过程起到控制作⽤。
数据线SDA:⽤来⼀位⼀位的传送数据。
IIC分为软件IIC和硬件IIC软件IIC:软件IIC通信指的是⽤单⽚机的两个I/O端⼝模拟出来的IIC,⽤软件控制管脚状态以模拟I2C通信波形,软件模拟寄存器的⼯作⽅式。
硬件IIC:⼀块硬件电路,硬件I2C对应芯⽚上的I2C外设,有相应I2C驱动电路,其所使⽤的I2C管脚也是专⽤的,硬件(固件)I2C是直接调⽤内部寄存器进⾏配置。
补充:1.硬件I2C的效率要远⾼于软件的,⽽软件I2C由于不受管脚限制,接⼝⽐较灵活。
2.IIC是半双⼯通信⽅式IIC通信协议IIC通信过程由开始、结束、发送、响应、接收五个部分构成。
1、(在发送、接收数据的时候)当SCL为⾼电平时,SDA线不允许变化;当SCL线为低电平时,SDA线可以任意0、1变化。
2、(在任意时候)只有当SCL为⾼电平时,IIC电路才对SDA线上的电平(0或者1)进⾏记录,当SCL线为低电平时,⽆论SDA是⾼还是低,IIC电路都不对SDA进⾏采样。
空闲状态在介绍上⾯五个部分前,我们⾸先说说空闲状态,什么是空闲状态,就是没有通信时的状态(初始状态)I2C总线的SDA和SCL两条信号同时处于⾼电平时,规定为总线的空闲状态。
此时各个器件的输出级场效管均处在截⽌状态,即释放总线,由两条信号线各⾃的上拉电阻把电平拉⾼。
开始信号与停⽌信号开始信号:当SCL为⾼期间,SDA由⾼到低的跳变;启动信号是⼀种电平跳变时序信号,⽽不是⼀个电平。
停⽌信号:当SCL为⾼期间,SDA由低到⾼的跳变;停⽌信号也是⼀种电平跳变时序信号,⽽不是⼀个电平信号。
开始信号程序://产⽣IIC起始信号//1.设置SDA输出//2.先拉⾼SDA,再拉⾼SCL,空闲状态//3.拉低SDA//4.准备接收数据void IIC_Start(void){SDA_OUT(); //sda线输出IIC_SDA=1;IIC_SCL=1;delay_us(4);IIC_SDA=0;//START:when CLK is high,DATA change form high to lowdelay_us(4);IIC_SCL=0;//钳住I2C总线,准备发送或接收数据}停⽌信号程序://产⽣IIC停⽌信号//1.设置SDA输出//2.先拉低SDA,再拉低SCL//3.拉⾼SCL//4.拉⾼SDA//5.停⽌接收数据void IIC_Stop(void){SDA_OUT();//sda线输出IIC_SCL=0;IIC_SDA=0;//STOP:when CLK is high DATA change form low to highdelay_us(4);IIC_SCL=1;IIC_SDA=1;//发送I2C总线结束信号delay_us(4);}应答信号发送器每发送⼀个字节,就在时钟脉冲9期间释放数据先,由接收器反馈⼀个应答信号。
I2C的原理与应用
I2C的原理与应用I2C(Inter-Integrated Circuit)是一种串行通信协议,由飞利浦公司于1980年代开发,用于在数字电子系统中连接各个芯片。
它主要使用两根线进行通信,即SDA(Serial Data Line,串行数据线)和SCL (Serial Clock Line,串行时钟线),同时支持多主机和多从机的通信方式。
I2C协议被广泛应用于各种数字设备的互连,包括传感器、存储器、协处理器等。
I2C的通信原理如下:1.总线结构:I2C总线包含一个主机和多个从机。
主机负责控制总线,并发起数据传输请求;从机等待主机发送命令,并根据命令执行相应操作。
2.时序:I2C总线上的通信需要依靠时钟信号进行同步。
主机通过时钟信号SCL驱动数据传输。
数据线SDA上的数据在时钟信号的上升沿或下降沿进行采样和发送。
3.起始和停止位置:数据传输始于主机发送一个起始信号,结束于主机发送一个停止信号。
起始信号通知所有从机总线上的数据传输即将开始;停止信号表示数据传输已经结束。
4.地址与数据传输:在起始信号之后,主机发送一个地址帧给从机。
地址帧的最高位表示读写操作,从机通过地址帧判断自身是否为数据传输的对象,并相应地进行操作。
主机可以在同一个传输过程中多次发送数据,并且可以从一个从机读取多个字节的数据。
I2C的应用广泛,以下是一些常见的应用领域:1.传感器:I2C通信协议在许多传感器和芯片中得到应用,例如加速度计、陀螺仪、温度传感器和压力传感器等。
这些传感器通过I2C协议与主处理器进行通信,并将采集到的数据传输到主处理器进行处理。
2. 存储器:I2C接口也广泛应用于存储器设备,如EEPROM (Electrically Erasable Programmable Read-Only Memory)和FRAM (Ferroelectric Random Access Memory)。
这些存储器设备可以通过I2C总线进行读写操作,从而存储和检索数据。
i2c通信的详细讲解
i2c通信的详细讲解I2C(Inter-IntegratedCircuit)通信协议是一种用于连接两个不同芯片的系统总线技术,也称为两级串行总线协议或者双总线协议。
I2C协议是由 Philips Semiconductors公司发明的,并被广泛应用于许多不同类型的处理器,特别是嵌入式系统中。
在本文中,我们将讨论I2C协议的原理,它的优点及其在实际应用中的使用方法。
I2C协议使用两根线,一根叫作“时钟”(SCL),另一根叫作“数据”(SDA)。
它们可以用来传输数据,也可以用来控制时钟(SCL)和数据(SDA)的发送和接收。
I2C协议的发明是为了实现多设备的联动,使多个设备之间的信息传输更加高效,性能也更加稳定。
I2C协议的优点:1.省电池电量:I2C协议会在不发送数据时减少时钟信号电平,这样可以有效降低电池电量的消耗;2.单:I2C协议只需要两根电线,可以满足大多数多芯片联动的应用需求;3.能稳定:I2C协议传输稳定,在多设备环境中信号传输时间间隔距离短;4.讯范围宽:I2C协议可以实现多芯片间的远近程度,并通过扩展的协议可以扩大通讯的范围;5.持动态分配:I2C协议允许动态的分配芯片通信地址,以及通过地址捕获技术加快芯片通讯的效率。
I2C协议在实际应用中主要用于在不同芯片之间进行信息传输,比如CPU和外设(例如继电器或者显示器)之间的通讯。
运行I2C协议的系统必须具备以下特性:1. 主从模式:I2C要求两个通讯芯片必须有一个主芯片(Master)来控制所有的通讯,而其他芯片则作为从芯片(Slave)来响应主芯片的指令;2.特率:I2C的数据传输不仅要考虑传输的速度,还需要考虑传输的波特率,这个波特率会影响传输的效率;3.址捕获:I2C需要使用地址捕获技术来增加通信的效率,借此可以最大限度的减少不必要的数据通讯量。
I2C协议的应用非常广泛,它可用于控制多种不同的设备,从简单的温度传感器到复杂的PLC控制器,从内存管理到模拟/数字信号处理,几乎都可以用到I2C协议。
i2c通信协议
i2c通信协议I2C通信协议,全称Inter-Integrated Circuit,是一种串行通信协议,通常用于IC之间的通信。
I2C协议由飞利浦公司(现在是恩智浦半导体)于1982年开发,是一种低速、短距离的通信协议,典型传输速率为100 kbits/s。
I2C协议采用主从式结构,即一方为主机,另一方为从机。
I2C总线上可连接多个从机,而每个从机有唯一的地址。
主机可以向从机发送数据,也可以从从机接收数据。
I2C还支持多主操作,即多个主机可以共享一个I2C总线,实现互相协作。
I2C协议使用两根线进行通信:串行数据线(SDA)和串行时钟线(SCL)。
这两根线都必须由外部上拉电阻拉高。
数据传输分为两种模式:传输模式和地址模式。
在传输模式下,主机向从机发送数据;在地址模式下,主机发送一个地址字节,以获取从机的响应。
在传输模式下,I2C总线上的所有从机将监测SDA线上的数据。
主机首先发送一个起始信号,SDA线的电平会从高电平降到低电平,同时SCL线也会变成低电平,表示一个通信周期的开始。
接下来,主机发送从机地址字节,从机检测到地址匹配后,就会响应主机的请求。
主机通过发送数据字节给从机进行通信,所有的字节传输完毕后,主机会发送一个停止信号,SDA线的电平会从低电平升到高电平,同时SCL线也会变成高电平,表示通信周期的结束。
在地址模式下,主机向总线发送一个地址字节,以向特定从机发送命令或检索数据。
从机检测到地址字节匹配后,就会响应主机的请求。
在一些应用中,从机可以返回一个或多个字节的数据,以响应主机的请求。
总之,I2C协议是一种非常灵活和可靠的通信协议,广泛用于单片机、传感器、LCD显示器和其他许多集成电路中,可使用在许多不同的应用场合中,提供了一个在各种不同设备之间进行通信的标准。
杰理iic程序讲解
杰理iic程序讲解全文共四篇示例,供读者参考第一篇示例:杰理IIC程序讲解杰理IIC(Inter-Integrated Circuit)是一种用于在芯片之间或者与外部设备之间进行通信的串行通信协议。
它是由飞思卡尔公司(Freescale Semiconductor)推出的一种新型通信协议,设计用来解决传输速度慢、带宽窄的问题。
杰理IIC协议具有高速传输、简单硬件接口和多设备连接的特点,因此被广泛应用于各种电子设备当中。
杰理IIC协议的工作原理非常简单,它使用两条线路来进行通信:一条是串行数据线(SDA),另一条是串行时钟线(SCL)。
在通信过程中,SCL线由主设备负责产生时钟信号,SDA线用于传输数据。
在开始通信前,主设备发送一个开始信号,然后发送设备地址和数据,接收设备在正确接收数据后发送一个应答信号。
通信完成后,主设备发送停止信号,结束通信。
在杰理IIC通信中,每个设备都有一个唯一的7位地址,用来标识设备的身份。
主设备可以向多个从设备发送数据,也可以从多个从设备接收数据。
通信过程中,主设备和从设备之间需要按照一定的协议进行数据交换,确保数据的正确传输。
杰理IIC协议还包括了高速模式、扩展地址模式和多主模式等扩展功能,可以满足不同应用场景的需求。
为了方便开发人员使用杰理IIC协议进行通信,飞思卡尔公司提供了一套完整的软件库和开发工具,可以帮助开发人员快速上手并实现各种功能。
开发人员只需要根据自己的需求编写相应的程序代码,就可以实现各种复杂的通信功能。
下面我们来讲解一下如何使用杰理IIC 软件库进行开发。
开发人员需要下载并安装杰理IIC软件库和开发工具,飞思卡尔公司官网提供了相应的软件包和文档。
安装完成后,开发人员需要按照文档中的说明配置开发环境,并连接目标设备到开发环墵。
接下来,开发人员可以使用开发工具打开一个新的工程,并选择杰理IIC协议。
在工程中添加必要的源文件和头文件,并进行相应的配置。
I2C总线协议详解
I2C总线协议详解简介:I2C(Inter-Integrated Circuit)是一种由PHILIPS公司开发的两线式串行总线,用于衔接微控制器及其外围设备。
I2C总线产生于在80年月,最初为音频和视频设备开发,如今主要在服务器管理中用法,其中包括单个组件状态的通信可随时监控内存、硬盘、网络、系统温度等多个参数,增强了系统的平安性,便利了管理。
I2C总线特点I2C总线最主要的优点是其容易性和有效性。
因为接口挺直在组件之上,因此I2C总线占用的空间十分小,削减了板的空间和芯片管脚的数量,降低了互联成本。
总线的长度可高达25英尺,并且能够以10Kbps的最大传输速率支持40个组件。
I2C总线的另一个优点是,它支持多主控(multimastering),其中任何能够举行发送和接收的设备都可以成为主总线。
一个主控能够控制信号的传输和时钟频率。
固然,在任何时光点上只能有一个主控。
I2C总线工作原理总线的构成及信号类型I2C总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。
在CPU与被控IC之间、IC与IC之间举行双向传送,最高传送速率100kbps。
各种被控制电路均并联在这条总线上,但就像电话机一样惟独拨通各自的号码才干工作,所以每个电路和模块都有唯一的地址,在信息的传输过程中,I2C总线上并接的每一模块电路既是主控器(或被控器),又是发送器(或接收器),这取决于它所要完成的功能。
CPU发出的控制信号分为地址码和控制量两部分,地址码用来选址,即接通需要控制的电路,确定控制的种类;控制量打算该调节的类别(如对照度、亮度等)及需要调节的量。
这样,各控制电路虽然挂在同一条总线上,却彼此自立,互不相关。
I2C总线在传送数据过程*有三种类型信号,它们分离是:开头信号、第1页共4页。
i方c总线协议
竭诚为您提供优质文档/双击可除i方c总线协议篇一:i2c总线协议1.i2c协议2条双向串行线,一条数据线sda,一条时钟线scl。
sda传输数据是大端传输,每次传输8bit,即一字节。
支持多主控(multimastering),任何时间点只能有一个主控。
总线上每个设备都有自己的一个addr,共7个bit,广播地址全0.系统中可能有多个同种芯片,为此addr分为固定部分和可编程部份,细节视芯片而定,看datasheet。
1.1i2c位传输数据传输:scl为高电平时,sda线若保持稳定,那么sda上是在传输数据bit;若sda发生跳变,则用来表示一个会话的开始或结束(后面讲)数据改变:scl为低电平时,sda线才能改变传输的bit1.2i2c开始和结束信号开始信号:scl为高电平时,sda由高电平向低电平跳变,开始传送数据。
结束信号:scl为高电平时,sda由低电平向高电平跳变,结束传送数据。
1.3i2c应答信号master每发送完8bit数据后等待slave的ack。
即在第9个clock,若从ic发ack,sda会被拉低。
若没有ack,sda会被置高,这会引起master发生RestaRt或stop流程,如下所示:1.4i2c写流程写寄存器的标准流程为:1.master发起staRt2.master发送i2caddr(7bit)和w操作0(1bit),等待ack3.slave发送ack4.master发送regaddr(8bit),等待ack5.slave发送ack6.master发送data(8bit),即要写入寄存器中的数据,等待ack7.slave发送ack8.第6步和第7步可以重复多次,即顺序写多个寄存器9.master发起stop写一个寄存器写多个寄存器1.5i2c读流程读寄存器的标准流程为:1.master发送i2caddr(7bit)和w操作1(1bit),等待ack2.slave发送ack3.master发送regaddr(8bit),等待ack4.slave发送ack5.master发起staRt6.master发送i2caddr(7bit)和r操作1(1bit),等待ack7.slave发送ack8.slave发送data(8bit),即寄存器里的值9.master发送ack10.第8步和第9步可以重复多次,即顺序读多个寄存器读一个寄存器读多个寄存器2.powerpc的i2c实现mpc8560的ccsR中控制i2c的寄存器共有6个。
i2c协议的使用流程
i2c协议的使用流程一、什么是i2c协议呀。
i2c协议就像是一种超级智能的通信规则。
你可以把它想象成是两个小伙伴之间的一种特殊对话方式。
一个是主设备,另一个是从设备。
主设备就像是个小领导,负责发起对话,从设备呢就乖乖地等着主设备跟它说话,然后做出回应。
比如说,主设备就像是班长,从设备就像是班级里的小同学。
这个协议可以让很多不同的设备在同一条总线上进行通信,就像大家在同一条小路上走,还能有条不紊地传递信息呢。
二、开始使用前的准备。
在使用i2c协议之前,咱们得先确定好要用的硬件设备哦。
你得找到那些支持i2c协议的设备,就像找一群志同道合能玩到一起的小伙伴。
这些设备得有合适的接口,就像是小伙伴们得有能交流的嘴巴一样。
而且呀,咱们得给这些设备连接好线路。
这线路连接可不能马虎,就像搭积木一样,每一块都得放在正确的位置。
比如说,要把SDA(数据线)和SCL(时钟线)这两条线正确地连接到主设备和从设备上。
这两条线就像是信息传递的高速公路,要是接错了,信息可就跑错路啦。
三、主设备的初始化。
主设备要先给自己来个初始化。
这就好比是班长在组织活动之前,得先把自己的小本本拿好,把计划安排一下。
主设备要设置好自己的一些参数,像时钟频率之类的。
这个时钟频率就像是大家走路的速度,要是太快了,可能有些设备跟不上,要是太慢了呢,又会浪费时间。
主设备要根据实际情况来设置一个合适的时钟频率,让大家都能愉快地交流信息。
四、寻找从设备。
主设备初始化好了之后,就开始找从设备啦。
这就像是班长在教室里找某个特定的小同学。
主设备会在总线上发送一个地址,这个地址就像是小同学的名字一样。
从设备呢,就一直在听着这个地址,如果听到是自己的地址,就会回应主设备,就像小同学听到自己的名字就会举手说“到”一样。
这个地址是每个从设备独一无二的标识,可不能弄错了哦。
五、数据传输。
找到从设备之后,就可以开始传输数据啦。
主设备就像是一个小邮差,把要传递的数据打包好,然后按照一定的格式送到从设备那里。
IIC通信详解
IIC通信详解(1)概述I2C(Inter-Integrated Circuit BUS) 集成电路总线,该总线由NXP(原PHILIPS)公司设计,多⽤于主控制器和从器件间的主从通信,在⼩数据量场合使⽤,传输距离短,任意时刻只能有⼀个主机等特性。
经常IIC和SPI接⼝被认为指定是⼀种硬件设备,但其实这样的说法是不尽准确的,严格的说他们都是⼈们所定义的软硬结合体,分为物理层(四线结构)和协议层(主机,从机,时钟极性,时钟相位)。
IIC,SPI的区别不仅在与物理层,IIC⽐SPI有着⼀套更为复杂的协议层定义。
下⾯来分别说明⼀下IIC的物理层和协议层。
(2)IIC的物理层a.只要求两条总线线路,⼀条是串⾏数据线SDA,⼀条是串⾏时钟线SCL。
(IIC是半双⼯,⽽不是全双⼯)。
b.每个连接到总线的器件都可以通过唯⼀的地址和其它器件通信,主机/从机⾓⾊和地址可配置,主机可以作为主机发送器和主机接收器。
c.IIC是真正的多主机总线,(⽽这个SPI在每次通信前都需要把主机定死,⽽IIC可以在通讯过程中,改变主机),如果两个或更多的主机同时请求总线,可以通过冲突检测和仲裁防⽌总线数据被破坏。
d.传输速率在标准模式下可以达到100kb/s,快速模式下可以达到400kb/s。
e.连接到总线的IC数量只是受到总线的最⼤负载电容400pf限制。
⼀个典型的IIC接⼝如下图(1)所⽰图(1)(3)IIC的协议层IIC的协议层才是掌握IIC的关键。
现在简单概括如下:a.数据的有效性在时钟的⾼电平周期内,SDA线上的数据必须保持稳定,数据线仅可以在时钟SCL为低电平时改变。
如图(2)所⽰:图(2)b.起始和结束条件起始条件:当SCL为⾼电平的时候,SDA线上由⾼到低的跳变被定义为起始条件,结束条件:当SCL为⾼电平的时候,SDA线上由低到⾼的跳变被定义为停⽌条件,要注意起始和终⽌信号都是由主机发出的,连接到I2C总线上的器件,若具有I2C总线的硬件接⼝,则很容易检测到起始和终⽌信号。
I2C总线协议
I2C总线定义I2C(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。
I2C总线产生于在80年代,最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个组件状态的通信。
例如管理员可对各个组件进行查询,以管理系统的配置或掌握组件的功能状态,如电源和系统风扇。
可随时监控内存、硬盘、网络、系统温度等多个参数,增加了系统的安全性,方便了管理。
I2C总线特点I2C总线最主要的优点是其简单性和有效性。
由于接口直接在组件之上,因此I2C总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。
总线的长度可高达25英尺,并且能够以10Kbps的最大传输速率支持40个组件。
I2C总线的另一个优点是,它支持多主控(multimastering),其中任何能够进行发送和接收的设备都可以成为主总线。
一个主控能够控制信号的传输和时钟频率。
当然,在任何时间点上只能有一个主控。
I2C总线工作原理总线的构成及信号类型I2C总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。
在CPU与被控IC之间、IC与IC之间进行双向传送,最高传送速率100kbps。
各种被控制电路均并联在这条总线上,但就像电话机一样只有拨通各自的号码才能工作,所以每个电路和模块都有唯一的地址,在信息的传输过程中,I2C总线上并接的每一模块电路既是主控器(或被控器),又是发送器(或接收器),这取决于它所要完成的功能。
CPU发出的控制信号分为地址码和控制量两部分,地址码用来选址,即接通需要控制的电路,确定控制的种类;控制量决定该调整的类别(如对比度、亮度等)及需要调整的量。
这样,各控制电路虽然挂在同一条总线上,却彼此独立,互不相关。
I2C总线在传送数据过程中共有三种类型信号,它们分别是:开始信号、结束信号和应答信号。
开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。
I2C协议
I2C协议1、I2C总线I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。
它只需要两根线即可在连接于总线上的器件之间传送信息。
主器件用于启动总线传送数据,并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件.在总线上主和从、发和收的关系不是恒定的,而取决于此时数据传送方向。
如果主机要发送数据给从器件,则主机首先寻址从器件,然后主动发送数据至从器件,最后由主机终止数据传送;如果主机要接收从器件的数据,首先由主器件寻址从器件.然后主机接收从器件发送的数据,最后由主机终止接收过程。
在这种情况下.主机负责产生定时时钟和终止数据传送。
主机发送数据从机找寻从机地址-主动发送数据-主机终止传送主机接受从机数据主机找从机地址-主机接受数据-主句终止接受2、工作原理编辑SDA(串行数据线)和SCL(串行时钟线)都是双向I/O线,接口电路为开漏输出.需通过上拉电阻接电源VCC.当总线空闲时.两根线都是高电平,连接总线的外同器件都是CMOS器件,输出级也是开漏电路.在总线上消耗的电流很小,因此,总线上扩展的器件数量主要由电容负载来决定,因为每个器件的总线接口都有一定的等效电容.而线路中电容会影响总线传输速度.当电容过大时,有可能造成传输错误.所以,其负载能力为400pF,因此可以估算出总线允许长度和所接器件数量。
主器件用于启动总线传送数据,并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件.在总线上主和从、发和收的关系不是恒定的,而取决于此时数据传送方向。
如果主机要发送数据给从器件,则主机首先寻址从器件,然后主动发送数据至从器件,最后由主机终止数据传送;如果主机要接收从器件的数据,首先由主器件寻址从器件.然后主机接收从器件发送的数据,最后由主机终止接收过程。
在这种情况下.主机负责产生定时时钟和终止数据传送。
3、特点I2C总线特点可以概括如下:(1)、在硬件上,I2C总线只需要一根数据线和一根时钟线两根线,总线接口已经集成在芯片内部,不需要特殊的接口电路,而且片上接口电路的滤波器可以滤去总线数据上的毛刺(金属表面出现的余屑和表面极细小的显微金属颗粒).因此I2C总线简化了硬件电路PCB布线,降低了系统成本,提高了系统可靠性。
I2C通讯协议说明
第一章 I²C通讯协议基本内容1.1I2C通讯协议简介由PHILIPS开发的一个简单的双向两线总线,实现有效的IC控制,这个总线就称为Inter IC或I2C总线。
现在I2C总线实际上已经成为一个国际标准,I2C 总线规范的版本也从1992年的VERSION 1.0经过1998年的VERSION 2.0发展到2000年的VERSION 2.1。
在加强功能的同时也在满足现在对总线速度更高,电源电压更低的要求。
I2C总线具有以下特性:1)只要求两条总线线路:一条串行数据线(SDA );一条串行时钟线(SCL)。
2)每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机从机关系软件设定地址;主机可以作为主机发送器或主机接收器。
3)它是一个真正的多主机总线。
如果两个或更多主机同时初始化数据传输,可以通过冲突检测和仲裁防止数据被破坏。
4)串行的8 位双向数据传输位速率在标准模式下可达100kbit/s 。
快速模式下可达400kbit/s 高速模式下可达3.4Mbit/s。
I2C 总线支持任何IC 生产过程(NMOS CMOS 双极性),两线――串行数据(SDA)和串行时钟(SCL)线在连接到总线的器件间传递信息。
每个器件都有一个唯一的地址编码,而且都可以作为一个发送器或接收器(由器件的功能决定)。
很明显地,存储器则既可以作接收器又可以作发送器。
除了发送器和接收器外,器件在执行数据传输时也可以被看作是主机或从机(见表1-1)。
主机在发送数据前负责对总线的初始化并产生允许传输的时钟信号。
此时,任何被寻址的器件都被认为是从机表1-1这里我们举个例子说明I2C总线的主机从机和接收器发送器的关系,但是这种关系并不是持久的,只是由当时的数据的传输方向决定,如下所示:1 假设微控制器A 要发送信息到微控制器B. 微控制器A(主机)寻址微控制器B(从机). 微控制器A(主机-发送器)发送数据到微控制器B(从机-接收器). 微控制器A 终止传输2 如果微控制器A 想从微控制器B 接收信息. 微控制器A(主机)寻址微控制器B(从机). 微控制器A(主机-接收器)从微控制器B(从机-发送器)接收数据. 微控制器A 终止传输1.2I2C工作原理1.2.1 I2C的起始和停止条件在I2C 总线中唯一出现的是被定义为起始S 和停止P 条件见图1-1 的情况其中一种情况是在SCL 线是高电平时,SDA 线从高电平向低电平切换。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
I2C通信协议简介
(2013-01-17 10:48:03)
转载▼
分类:通讯协议
标签:
杂谈
ACK是acknowledge的意思,确认.
摒弃复杂的情况,这里只对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中例外
1.当从机不能响应从机地址时(例如它正忙于其他事而无法响应IIC
总线的操作,或者这个地址没有对应的从机),在第9个SCL周期内SDA线没有拉低,即没有ACK信号。
这时,主机发出一个P信号终止传输或者重新发出一个S信号开始新的传输。
2.如果从机接收器在传输过程中不能接收更多的数据时,它不会发
出ACK信号。
这样,主机就可以意识到这点,从而发出一个P信号终止传输或者重新发出一个S信号开始新的传输。
3.主机接收器在接收到最后一个字节后,也不会发出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位器件地址和写模式;
->要写入的存储区首地址;
->用页写入方式或字节写入方式写入数据;
3、读:
检测SDA是否空闲;
->按I2C协议发出起始讯号;
->发出7位器件地址和写模式(伪写);
->发出要读取的存储区首地址;
->重发起始讯号;
->发出7位器件地址和读模式;
->接收数据;。