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. day4:vcp考试

    Q61. Which two statements are true regarding Virtual SAN Fault Domains? (Choose two.)A. They enable ...

  2. oracle 使用正则表达式获取字符串中包含的数字

    select REGEXP_REPLACE('字符串中包含的数字123,提取后就是123', '[^0-9]', '') from dual;

  3. 复杂度分析 quick sort&merge sort

    空间复杂度看新开了什么数据结构就够了 公式=几个点*每个点执行了多少次 二叉树都是n次 二分法查找:lgn 全部查找:n n:找一个数,但是两边都要找.相当于遍历.类似于rotated sorted ...

  4. jQuery之双下拉框

    双下拉框要实现的效果,实际上就是左边下拉选择框里的内容,可以添加到右边,而右边同理.写了个简单的例子,来说明一下. 代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...

  5. sublime的坑

  6. sc start service 1063 1053 错误原因

    在进入点函数里面要完成ServiceMain的初始化,准确点说是初始化一个SERVICE_TABLE_ENTRY结构数组,这个结构记录了这个服务程序里面所包含的所有服务的名称和服务的进入点函数,下面是 ...

  7. 交互神器-最好用的Mac原型设计工具

    市场上有着大量的开发和设计工具支持在Mac上安装使用,今天给大家强烈推荐一款Mac上的原型设计工具-Mockplus,原型工具在产品开发设计中是必不可少的,无论是现在非常火的小程序设计,还是网页设计, ...

  8. 中介者模式(QQ聊天室我觉得是个很生动的例子简单易懂)

    设计模式之中介者模式(Mediator) 一.初识中介者模式 那些年,我们一起上过的大学,班级里有班长,有团书记.想一想如果没有QQ这种通讯工具的话,那么班长或者团支书该怎样下达消息呢??同时,班级上 ...

  9. 专2-第一课 Ubuntu系统安装与配置

    1.1 使用VMware安装Ubuntu 1.1.1 准备工作 1)VMware的安装包 VMware至少要用10.0版本,本文采用最新的VMware12版本,这个版本对USB3.0的支持更加完善稳定 ...

  10. 外网不能访问阿里云服务器的apache服务

    今天弄了下Ubuntu的服务器,配置了一个LAMP环境的服务器,配置有时间我再来说 但是配置了很长的时间,差不都怕是好几个小时 在配置apache的时候,出现了问题,好不容易把apache服务配置好 ...