SHT20温湿度传感器使用iic总线的驱动方式,以下资料参考SHT20 datasheet总结


1、IIC总线
  1. Start信号

    IIC总线的起始信号以SDA由高电平变为低电平,等待5us以上,再由SCL从高电平变低电平,发出起始信号,图示如下所示:

    注意:两根线由高变低的间隔时间大于4.7us,建议延时15us

    example:

    	void IIC_Start(void)
    {
    GpioWrite(&SDA, 1);
    GpioWrite(&SCL, 1);
    //todo :delay 15us
    GpioWrite(&SDA, 0);
    //todo "delay 15us
    GpioWrite(&SCL, 0);
    }
  2. Stop信号

    IIC总线的停止信号以SCL信号线从低电平变为高电平,等待0.6us以上SDA信号线再从低电平变高电平,图示如下所示:

    注意:其中间隔时间大于0.6us,建议15us

    example:

    void IIC_Stop(void)
    {
    GpioWrite(&SDA, 0);
    GpioWrite(&SCL, 1);
    //todo :delay 15us
    GpioWrite(&SDA, 1);
    //todo :delay 15us
    GpioWrite(&SCL, 0);
    }
  3. ACK 信号

    ACK信号是在时钟线的下降沿拉低数据线,代码如下:

    void IIC_ACK(void)
    {
    GpioWrite(&SDA, 0);
    GpioWrite(&SCL, 1);
    //todo delay 15us
    GpioWrite(&SCL, 0);
    }
  4. NOACK 信号

    和ACK信号相反,NOACK是在时钟的下降沿拉高数据线,代码如下:

    void IIC_NOACK(void)       //6. 非应答信号
    {
    GpioWrite(&SDA, 1);
    GpioWrite(&SCL, 1);
    //todo delay 15us
    GpioWrite(&SCL, 0);
    }
  5. 发送数据和接受数据

    通常发送数据还是接受数据是由 IIC Addr + Write/Read Byte决定的,所以我们在读取数据或者发送数据之前一定会发送一个 Addr + W/R,,在No Hold Master模式下面,MCU具有主导地位,即时钟信号线由MCU掌握,在发出Start信号之后,开始接受或者发送数据,通常是在时钟的下降沿进行数据的收发操作。收发结束之后需要等待ACK或者Nack,由发送或者接受的数据决定。如下图所示:



    参考代码实现


    bool IIC_SendByte(unsigned char dat) //3.写数据
    {
    unsigned char i;
    bool ack;
    for (i = 0; i < 8; i++)
    {
    if((dat<<i)&0x80)
    {
    GpioWrite(&SDA, 1);
    }
    else
    {
    GpioWrite(&SDA, 0);
    }
    GpioWrite(&SCL, 1); //开始让数据维持稳定
    //todo :delay 15us
    GpioWrite(&SCL, 0);
    //todo :delay 15us
    }
    GpioWrite(&SDA, 1);
    GpioWrite(&SCL, 1);
    //todo :delay 15us
    IIC_SDAMode(PIN_INPUT);
    if (GpioRead(&SDA)) //SDA 低电平 从机回馈低电平
    {
    ack = false;//ack = 0; //0 == ack 代表无ack信号, 从机不应答,发送不成功
    }
    else
    {
    ack = true;// ack = 1; //从机应答,发送成功
    }
    IIC_SDAMode(PIN_OUTPUT);
    GpioWrite(&SCL, 0);
    return ack;
    //todo :delay50us
    }
    unsigned char IIC_RecvByte(void) //4. 读数据
    {
    unsigned char i, temp = 0;
    GpioWrite(&SDA, 1);
    // todo delay 15us
    IIC_SDAMode(PIN_INPUT);
    for (i = 0; i < 8; i++)
    {
    GpioWrite(&SCL, 0);
    //todo delay 15us
    GpioWrite(&SCL, 1);
    //todo delay 15us
    temp<<=1;
    if (GpioRead(&SDA))
    {
    temp = temp + 1;
    }
    }
    GpioWrite(&SCL, 0);
    IIC_SDAMode(PIN_OUTPUT);
    //todo delay 15us
    return temp;
    }

SHT20 IIC总线驱动概述的更多相关文章

  1. Exynos4412 IIC总线驱动开发(一)—— IIC 基础概念及驱动架构分析

    关于Exynos4412 IIC 裸机开发请看 :Exynos4412 裸机开发 —— IIC总线 ,下面回顾下 IIC 基础概念 一.IIC 基础概念 IIC(Inter-Integrated Ci ...

  2. 对 IIC 总线的理解、调用函数以及常见面试问题

    一.IIC 总线概述: IIC 即Inter-Integrated Circuit(集成电路总线) I2C总线是PHLIPS公司推出的一种串行总线, I2C总线只有两根双向信号线.一根是数据线SDA, ...

  3. 18、IIC总线驱动程序

    i2c_s3c2410.c是内核自带dev层(adapt)驱动程序,知道怎么发收数据,不知道含义 在与i2c_s3c2410.c(在其probe函数中的s3c24xx_i2c_init函数会初始化ii ...

  4. linux-2.6.38 总线驱动分析

    一.IIC总线驱动代码 IIC总线控制器通常是在内存上的,连接在platform总线上,所以需要通过platform_driver和platform_device的匹配.我想大概根据总线设备驱动模型的 ...

  5. Linux驱动之IIC总线

    <作用> 电子设备中有很多IIC设备之间需要进行相互通信,这样就产生了IIC总线,常用来实现设备之间的数据通信.   <IIC总线结构> IIC总线只有两条线,一条是串行数据线 ...

  6. RT-thread 设备驱动组件之IIC总线设备

    本文主要介绍RT-thread中IIC总线设备驱动,涉及到的主要文件有:驱动框架文件(i2c_core.c,i2c_dev.c,i2c-bit-ops.c,i2c_dev.h,i2c.h):底层硬件驱 ...

  7. IIC总线

    一. 概述 1. IIC总线是PHILIPS公司推出的一种串口总线,是具备多主机系统所需的包括总线裁决和高低速器件同步功能的高性能串口总线. 2. IIC总线只有两根双向信号线.一根是数据线SDA,一 ...

  8. linux内核SPI总线驱动分析(一)(转)

    linux内核SPI总线驱动分析(一)(转) 下面有两个大的模块: 一个是SPI总线驱动的分析            (研究了具体实现的过程) 另一个是SPI总线驱动的编写(不用研究具体的实现过程) ...

  9. linux之i2c子系统架构---总线驱动

    编写i2c设备驱动(从设备)一般有两种方式: 1.用户自己编写独立的从设备驱动,应用程序直接使用即可. 2.linux内核内部已经实现了一个通用的设备驱动,利用通用设备驱动编写一个应用程序(用户态驱动 ...

随机推荐

  1. python学习——sys.argv

    sys.argv[]:用于获取命令行参数,sys.argv[0]即所运行的代码自身的文件路径,因此真正的其他参数是从1开始 sys.argv[1]:表示第一个参数 sys.argv[1][2:]:表示 ...

  2. .net调用web邮箱发送邮件(转载)

    public static void SendEmail() { System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient( ...

  3. javascript的数据检测总结

    目录 javaScript的数据检测 1.typeof 2.instanceof 3.constructor 4.Object.prototype.toString.call()--------- 一 ...

  4. discuz回贴通知插件实现-配置邮件服务器

    添加smtp服务器,填写相应的smtp服务器,发信人地址,用户名和密码.   填写发件人地址和收件人地址来测试邮件是否发送成功.

  5. MD5加密获得文件的MD5码

    哈希函数将任意长度的二进制字符串映射为固定长度的小型二进制字符串.加密哈希函数有这样一个属性:在计算不大可能找到散列为相同的值的两个不同的输入:也就是说,两组数据的哈希值仅在对应的数据也匹配时才会匹配 ...

  6. meterpreter 如何留后门,使攻击持久化

    安装后门方法一:meterpreter >run persistence -X -i 5 -p 443 -r 192.168.0.108 Persistent agent script is 6 ...

  7. 3.说一下你了解的弹性FLEX布局.

    页面布局一直都是web应用样式设计的重点 我们传统的布局方式都是基于盒模型的 利用display.position.float来布局有一定局限性 比如说实现自适应垂直居中 随着响应式布局的流行,CSS ...

  8. apache的80端口被占用

    1.netstart -ano | findstr "80":查看80端口是否被占用,并找出对应的pid 2.关掉pid对应的进程

  9. abort: no username supplied (see "hg help config")

    abort: no username supplied (see "hg help config") 在hg中输入commit 指令时,如果出现下述结果: $ hg commit ...

  10. PacBio下机数据如何看?

    一开始拿到三代测序的下机数据时,蒙了,readme ?三代测序的下机数据都有哪些,以及他们具体的格式是怎么样的(以sequel 平台为主). 测序过程 SMRTbell A adapter通用接头,两 ...