zoukankan      html  css  js  c++  java
  • IIC通信

    IIC通信:
    特点:
      IIC总线是两线式串行总线(连同GND为3线),仅需要时钟和数据两根线就可以进行数据传输,仅占用两个IO口。
      IIC总线可以在同一总线上连接多个器件,每个器件都有自己的器件地址。
    引脚:
      芯片上有A0、A1..是用来设置器件地址的
      SDA是串行数据引脚,用于在芯片读写时输入或输出数据和地址,是双向引脚。
      SCL是器件的串行同步时钟信号输入端,由单片机的IO口提供。(时钟信号一直由主机控制,即单片机)
      WP是保护引脚,但输入高电平时,禁止写入。但有时候没用,所以一般不用

      D7-D4是固定地址,D3-D1是可变地址,就是A2.A1.A0 还有D0(LSB) 就是控制读写(R/W)的地址,
      写入时R/W为0,读取时R/W为1
    一个字节一个字节得传输:
      使用:
        读写操作时需要先发送器件的地址,与器件地址相符合的器件得到确认就开始执行操作。
      传输:
        开始:
          SCL为高电平、SDL有一个从高到低的电平跳变动作
        保持:
          器件在SCL、SDL都为高电平是才会从数据线上采取数据,而芯片可以在SCL在低电平的时候写入,然后拉高电平,然后再变低电平。SDL不应该有电平跳变(为高?)数据只有在SDL为高时才是有效数据。
        停止:(数据传输完毕)
          SCL为高电平、SDL有一个从低到高的电平跳变动作


          连接在IIC总线上的器件在每接收完一个字节(8个二进制位)后,在第9个时钟信号时,会在SDA上回应一个低电平的ACK应答信号,以此表明当前受控的器件已经接收完一个字节,可以开始下一个字节了编程的时候就可以在传送完一个字节后,把连接SDA的IO口设置成回读数据(比如把IO口设置为高电平),然后在SCL操作一个脉冲,在SCL为高时读取SDA,如不为低电平就说明器件状态不空闲或出错,由于SDA是双向的IO,每个字节接收完成后,接收方都可以发送一个ACK回应



      状态保持的最少时间:
        开始、停止: 高至少要保持4.7us,低电平要保持4us。
        保持和空闲:高电平保持至少4us
      数据写入要求:
        每一位的写入是用时钟上升沿同步数据,也就是说时钟上升沿后从器件开始检测输入的数据SDL为高
        每一位的读取是用时钟下降沿同步数据,也就是说时钟下降沿后从器件开始输出的数据 SDL为高高到低,变化时间最大 300ns结束低到高,1us

      综上所述:在IIC总线上,每一位数据都有一个时钟脉冲相对应,即在SCL串行时钟的配合下,在SDA上逐位地串行传送每一位数据。进行数据传递时,在SLC呈现高电平期间,SDA的电平必须稳定,只有在SCL为低电平时,才允许SDA上的电平改变

      主机(单片机)是产生起始信号、停止信号并输出时钟信号的器件,此时任何被寻址的器件都被认为是从机

    多个字节传输:
      也需要先发送一个字节作为器件地址,每次通信都要先发送一个字节的器件地址和读写标识,称为器件寻址

      有的芯片有高四位和低四位,高四位是不同IIC类型器件固有的编码,芯片出厂就已经给定,低四位中A2.A1.A0是器件地址,对应芯片A2.A1.A0引脚

      D7-D4是固定地址,D3-D1是可变地址,就是A2.A1.A0 还有D0(LSB) 就是控制读写(R/W)的地址,写入时R/W为0,读取时R/W为1

      读取:
        读取当前地址数据:
          这种读取模式是读取当前芯片内部地址指针指向的数据。每次读写操作后,芯片会把最后一次操作过的地址最为当前的地址,在这里要注意的是,单片机在接收完芯片传送的数据后不必发送低电平的ACK给芯片,直接拉高SDA等待一个时钟后发送停止位。


        读取任意地址数据:
          在读取当前地址时,在这个指令前加一个“伪操作”,这个“伪操作”传送一个写指令,但这个写指令在地址传送完成后就要结束,这时芯片内部的地址指针指到这个地址上,再用读取当前地址指令就可以读取写入的地址数据


        连续读取
          连续读取操作只要在上面两种读取方式中,让芯片每传送完一个字节数据后,单片机回应给芯片一个低电平的ACK应答,那么芯片地址指针自动加一并继续传送数据,直到单片机不回应并停止操作。

     

  • 相关阅读:
    out/host/linuxx86/obj/EXECUTABLES/aapt_intermediates/aapt 64 32 操作系统
    linux 查看路由器 电脑主机 端口号 占用
    linux proc进程 pid stat statm status id 目录 解析 内存使用
    linux vim 设置大全详解
    ubuntu subclipse svn no libsvnjavahl1 in java.library.path no svnjavahl1 in java.library.path no s
    win7 安装 ubuntu 双系统 详解 easybcd 工具 不能进入 ubuntu 界面
    Atitit.json xml 序列化循环引用解决方案json
    Atitit.编程语言and 自然语言的比较and 编程语言未来的发展
    Atitit.跨语言  文件夹与文件的io操作集合  草案
    Atitit.atijson 类库的新特性设计与实现 v3 q31
  • 原文地址:https://www.cnblogs.com/otome/p/12727397.html
Copyright © 2011-2022 走看看