当前位置:首页 > 单片机 > 单片机
[导读]简介:I2C(IIC,Inter-Integrated Circuit),两线式串行总线,由PHILIPS公司开发用于连接微控制器及其外围设备。它是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传

简介:

I2C(IIC,Inter-Integrated Circuit),两线式串行总线,由PHILIPS公司开发用于连接微控制器及其外围设备。
它是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送,高速IIC总线一般可达400kbps以上,IIC是半双工通信方式。多主机I2C总线系统结构 需要将SDA和SCL两根线接上拉电阻拉高。

I2C协议:

空闲状态+开始信号+停止信号+应答信号+数据的有效性+数据传输

(1)空闲状态
I2C总线总线的SDA和SCL两条信号线同时处于高电平时,规定为总线的空闲状态。

(2)起始信号与停止信号
起始信号:当SCL为高期间,SDA由高到低的跳变。
停止信号:当SCL为高期间,SDA由低到高的跳变。

(3)应答信号ACK
对于反馈有效应答位ACK的要求是,接收器在第9个时钟脉冲之前的低电平期间将SDA线拉低,并且确保在该时钟的高电平期间为稳定的低电平。

(4)数据有效性
数据在SCL的上升沿到来之前就需准备好,并在在下降沿到来之前必须稳定。也就是要求数据在SCL高电平期间保持稳定。

CODE:
#include"myiic.h"#include"delay.h"//初始化IICvoidIIC_Init(void){GPIO_InitTypeDefGPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//使能GPIOB时钟//用到PB6和PB7两根线,PB6时钟,PB7数据GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStructure);GPIO_SetBits(GPIOB,GPIO_Pin_6|GPIO_Pin_7);//PB6,PB7输出高,因为IIC空闲状态都是高电平}//产生IIC起始信号voidIIC_Start(void){SDA_OUT();//sda线输出IIC_SDA=1;IIC_SCL=1;delay_us(4);IIC_SDA=0;//START:whenCLKishigh,DATAchangeformhightolowdelay_us(4);IIC_SCL=0;//钳住I2C总线,准备发送或接收数据}//产生IIC停止信号voidIIC_Stop(void){SDA_OUT();//sda线输出IIC_SCL=0;IIC_SDA=0;//STOP:whenCLKishighDATAchangeformlowtohighdelay_us(4);IIC_SCL=1;IIC_SDA=1;//发送I2C总线结束信号delay_us(4);}//等待应答信号到来//返回值:1,接收应答失败//0,接收应答成功u8IIC_Wait_Ack(void){u8ucErrTime=0;SDA_IN();//SDA设置为输入IIC_SDA=1;delay_us(1);IIC_SCL=1;delay_us(1);while(READ_SDA){ucErrTime++;if(ucErrTime>250){IIC_Stop();return1;}}IIC_SCL=0;//时钟输出0return0;}//产生ACK应答voidIIC_Ack(void){IIC_SCL=0;SDA_OUT();IIC_SDA=0;delay_us(2);IIC_SCL=1;delay_us(2);IIC_SCL=0;}//不产生ACK应答voidIIC_NAck(void){IIC_SCL=0;SDA_OUT();IIC_SDA=1;delay_us(2);IIC_SCL=1;delay_us(2);IIC_SCL=0;}//IIC发送一个字节//返回从机有无应答//1,有应答//0,无应答voidIIC_Send_Byte(u8txd){u8t;SDA_OUT();IIC_SCL=0;//拉低时钟开始数据传输for(t=0;t<8;t++){if((txd&0x80)>>7)IIC_SDA=1;elseIIC_SDA=0;txd<<=1;delay_us(2);//对TEA5767这三个延时都是必须的IIC_SCL=1;delay_us(2);IIC_SCL=0;delay_us(2);}}//读1个字节,ack=1时,发送ACK,ack=0,发送nACKu8IIC_Read_Byte(unsignedcharack){unsignedchari,receive=0;SDA_IN();//SDA设置为输入for(i=0;i<8;i++){IIC_SCL=0;delay_us(2);IIC_SCL=1;receive<<=1;if(READ_SDA)receive++;delay_us(1);}if(!ack)IIC_NAck();//发送nACKelseIIC_Ack();//发送ACKreturnreceive;}


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

    本文主要介绍的就是基于DM642的视频采集处理系统中I2C模块的正确初始化,以及通过I2C总线正确地对视频解码芯片SAA7115的寄存器读/写程序。   1 I

关键字: dm642 i2c 视频采集

    串行总线和并行总线相比具有结构简单、占用引脚少、成本低的优点。常见的串行总线有USB、IEEE1394、I2C等,其中I2C总线具有使用简单的特点,在单片机、串行E2P

关键字: vhdl i2c 串行总线

  I2C简介   I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。主器件用于启动总线传送数据,并产生时钟以开

关键字: Arduino i2c

本项目开发了一个使用 Xilinx 公司的 SPARTAN3A-DSP FPGA 作为目标开发板,采集数字和模拟传感器数据,并将传感器数据采用 I2C 接口与上级无线传感器网络进行通信的环境监测

关键字: i2c 无线传感器网络 环境监测

2020年6月17日-国内领先的信号链芯片及其解决方案提供商苏州纳芯微电子股份有限公司(以下简称“纳芯微”)日前宣布推出五款I2C总线接口类芯片产品。

关键字: i2c 纳芯微 接口产品

0 引 言   当前汽车音响与高保真的立体声音响系统中都包含了微处理器电路单元,这为实现音频处理提供了控制接口,可以通过控制接口实现许多需要的功能控制。作为音响系统主体的音频处理电路性能直接决定了整

关键字: i2c 总线 音频处理电路

红、绿、蓝(RGB)LED可用于建筑和舞台照明系统,用以形成明亮的投影色彩——有时会在RGB组合中添加白色LED,从色调、饱和度和亮度方面扩展色彩范围(图1)。无论色彩分量有多少,都必须精确控制

关键字: i2c LED

随着科学技术的发展,LED技术也在不断发展,为我们的生活带来各种便利,为我们提供各种各样生活信息,造福着我们人类。亚德诺半导体公司(AnalogDevices,Inc.,简称ADI)宣布推出PowerbyLinear&#...

关键字: i2c led驱动器 电源技术解析 powerbylinear

我们都知道I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。

关键字: i2c spi uart 总线与接口
关闭
关闭