i2c总线相关知识

本文介绍了I2C总线的基本概念,包括总线架构、从机地址、建立连接的过程以及数据传输的时序。详细阐述了寻址字节的发送、数据的串行发送、应答数据的接收,以及开始和结束信号的生成。通过代码示例展示了完整的I2C数据传输流程。
摘要由CSDN通过智能技术生成

i2c总线相关知识

总线架构

何为总线?:

​ 意味着再I2C线路上可以通过并联方式连接很多的器件,并进行数据传输

在这里插入图片描述

SCL:时钟线;
SDA:数据线
从机地址:
由生产厂家设置和规定,有七位,前四位不变,

请添加图片描述

A2,A1,A0分别表示的是三个管教各自的电平;

0位为方向位;高电平为读操作,低电平为写操作;

建立连接的过程

1、单片机像某个设备发送带有寻址字节的从机地址后;
2、该i2c设备,会向单片机发送一个应答信号;
3、建立连接;

如何发送寻址字节-串行发送

1、单片机向设备进行数据发送,发送寻址字节,前七位为设备的位,最后一位为0,表示写操作;
2、单片机逐位进行设备的写操作;
3、设备接收后,发送应答信号;
传输开始’

i2c的数据传输

字节传输方式

请添加图片描述

写操作的时序图:

请添加图片描述

I2C采样过程

开始信号

请添加图片描述

启动信号:
	scl高电平---》scl高电平
	sda高电平---》sda低电平
	void start(){
        scl = 1;
        sda = 1;
        delay5us();
        sda = 0;
        delay5us();
    }

采样信号

请添加图片描述

scl低电平期间,可以改变sda数据线电平;scl高电平期间,不可以改变sda数据线电平;

发送信号

请添加图片描述

发送数据对应的代码“

void send_data(unsigend char data){
    scl = 0; //设置为低电平
    for(int i = 1;i<8;i++){
            if(data&0x80)
        sda = 1;
    else
        sda = 0;
    data = data<<1;
    delay_5us(); //延时TCLCH时间。低时钟周期
    scl = 1;
    delay_5us();//演示TCLCHL时间,高时钟周期
    scl = 0;
    }
}

应答数据

/*先将slc拉低;
sda拉高;
拉高scl读取sda的信号是否为低*/
void rec_data(){
    scl = 0;
    sda = 1;//释放总线
    delay5us();
    scl = 1;
    dalay5us();
    while(sda==1){//器件会主动拉低sda的电平
        ;;
    }
    scl = 0;
    led1 = 0;
}

请添加图片描述
请添加图片描述

不断重复————send————rec————send————rec

结束信号

请添加图片描述

当scl为高电平的时候;
sda出现上升沿;
void stop(void){
	scl =1;
    sda =0;
    delay5us();
    sda = 1;
    delay5us();
}

完整传输流程代码

void i2c_write(unsigned char dev_addr,unsigned char addr,unsigned char i){
    start();
    send_data(dev_addr);//寻址字节
    rec_data();
    send_data(addr);//储存单元地址
    rec_data();
    send_data(i);//要发送的数据
    stop();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值