学习回顾:IIC

一、IIC通信介绍:

        IIC总线是由Philips公司开发的一种通用数据总线,它是由两根通讯线(SCL时钟线和SDA数据线)组成,同步、半双工协议,并不是USART全双工,并且带数据应答,支持总线挂载多个设备(一主多从、多主多从)。

二、硬件电路

  1. 所有IIC设备的SDA连在一起,SCL连接在一起;
  2. 设备的SDA和SCL都要配置成开漏输出;
  3. SCL和SDA都添加一个上拉电阻,阻值一般是4.7KΩ左右。

注意:1、主机对SCL有完全使用权,任何时候都是主机掌控着SCL线,从机只能被动读取;

        2、只有在从机发送数据和应答的时候,才可以控制SDA线;

        这里肯定有疑问,为什么要配置成开漏输出并加上上拉电阻呢?这里我们可以看到,SDA线主机和从机都可以进行发送,如果主机发送高电平,同时从机发送了低电平,这个时候不就造成了严重的电源短路现象了吗?所以这里配置成开漏模式,完全杜绝了电源短路现象,避免了引脚的来回切换。开漏加弱上拉同时兼具了输入和输出的功能。

三、时序设计

  • 起始条件:SCL高电平期间,SDA从高电平转换到低电平;
  • 终止条件:SCL高电平期间,SDA从低电平转换到高电平。

        发送一个字节:SCL低电平期间,主机将数据位依次放到SDA线上(高位先行),然后释放SCL,从机将在SCL高电平期间读取数据位。所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可发送一个字节。简单来说,就是主机拉低SCL,把数据放在SDA上,然后主机拉高SCL,从机读取SDA的数据。这里因为有时钟线,所以在发送数据的时候,可以进入中断,不会影响数据的收发,这里是和USART不同的地方。

        接收一个字节:SCL低电平期间,从机将数据位依次放到SDA线上(高位先行),然后释放SCL,主机将在SCL高电平期间读取数据位。所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可接收一个字节(主机在接收之前,需要释放SDA)。这里虚线表示从机控制的电平。

        发送应答∶主机在接收完一个字节之后,在下一个时钟发送一位数据,数据0表示应答,数据1表示非应答。
        接收应答∶主机在发送完一个字节之后,在下一个时钟接收一位数据,判断从机是否应答,数据0表示应答,数据1表示非应答(主机在接收之前,需要释放SDA)。

        接下来我们分析一下IIC具体执行逻辑,先看下IIC时序图:

  • 指定地址写:

  1. 在这个时序图中,我们可以看到,在时序刚开始的时候,SCL和SDA都是高电平,然后SDA从高电平转换到低电平,这就到了我们的起始条件,说明数据传输开始了。
  2. 接下来我们会看到主机发送了一段11010000数据,其中前7位为从机地址,告诉我们spi主机要控制哪个从机设备(一主多从),最后的0表示主机进行写入操作(如果读出就是1)。
  3. 然后又一位0,代表的是从机的应答位(如果是1则代表没有应答,传输会失败)。
  4. 后续又一个上升的高电平,就是从机释放SDA产生的,也就是交出了SDA的控制权,这个时候主机开始控制SDA继续进行读写操作。
  5. 后面发送了00011001数据,代表从机设备的寄存器地址。
  6. 然后又一个0,表示从机的应答位,主机接收到了应答,继续进行传输。
  7. 按照同样的流程继续发送,继续受到应答0,然后停止。这就是指定地址写的时序逻辑。
  • 当前地址读:对于指定的设备(从机地址),在当前地址指针指示的地址下读取从机数据。这里需要注意的是,这个指针上电默认指向起始地址,然后进行读写操作后自增。由于指针不可指定,所以这个时序并不常用。
  • 指定地址读:指定地址读的逻辑也是一样的,先是指定从机地址,然后收到应答,然后指定一个地址,然后应答。这个时候,就会发现和当前地址读不一样的地方了,因为这里指定了地址,而这个时候指针也指向了这个地址,不就是指定地址读了吗?OK,继续往后。这里就要按照IIC通信协议,这里要进行一个重复起始操作,这样就是一条完整的数据帧。然后在进行读操作,直到结束。自此,IIC时序就介绍完毕了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值