IIC协议

IIC是一种由Philips开发的两线式串行总线,用于微控制器和外围设备间的通信。它特点是简单、有效,支持多主控并能处理多个设备。通信中包含开始、结束信号和应答信号,确保数据传输的正确性。数据发送通过8位时序进行,每个字节后接收器会发送一个应答位确认接收。
摘要由CSDN通过智能技术生成

1、简介

IIC全称Inter-Integrated Circuit (集成电路总线) 是由PHILIPS公司在80年代开发的两线式串行总线,用于连接微控制器及其外围设备。IIC属于半双工同步通信方式。

特点

简单性和有效性。

由于接口直接在组件之上,因此IIC总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。总线的长度可高达25英尺,并且能够以10Kbps的最大传输速率支持40个组件

多主控(multimastering)

其中任何能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主控。

构成:

IIC串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL,其时钟信号是由主控 器件产生。所有接到IIC总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线 的SCL上。对于并联在一条总线上的每个IC都有唯一的地址。

 2、IIC协议信号

IIC总线在传输数据的过程中一共有三种类型信号,分别为:开始信号、结束信号和应答信号。

①起始信号与终止信号

 起始信号:SCL和SDA保持高电平至少4.7us,SDA由高电平转为低电平持续至少4us

void IIC_Start()

{

        sda = 1;

        scl = 1;

        _nop_();

        sda = 0;

        _nop_();

终止信号:SCL高电平,SDA低电平,这样的状态持续至少4us,SDA由低电平转为高电平持续至少4.7us

void IIC_Stop()

{

        sda = 0;

        scl = 1;

        _nop_();

        sda = 1;

        _nop_();

②应答信号

发送器每发送一个字节(8个bit),就在时钟脉冲9期间释放数据线,由接收器反馈一个应答信号。

应答信号为低电平时,规定为有效应答位(ACK,简称应答位),表示接收器已经成功地接收了该字节;

应答信号为高电平时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功。

 

 char IIC_ACK()

{

        char flag;

        sda = 1;//就在时钟脉冲9期间释放数据线

        _nop_();

        scl = 1;

        _nop_();

        flag = sda;

        _nop_();

        scl = 0;

        _nop_();

        return flag; 

}

③数据发送时序

 void IIC_Send_Byte(char dataSend)

{

        int i;

        for(i = 0;i<8;i++)

        {

                scl = 0;//scl拉低,让sda做好数据准备

                sda = dataSend & 0x80;//1000 0000获得dataSend的最高位,给sda

                _nop_();//发送数据建立时间

                scl = 1;//scl拉高开始发送

                _nop_();//数据发送时间

                scl = 0;//发送完毕拉低

                _nop_();//

                dataSend = dataSend << 1;

        }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值