SHT20 IIC总线驱动概述



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信号是在时钟线的下降沿拉低数据线,代码如下:

    cpp void IIC_ACK(void) { GpioWrite(&SDA, 0); GpioWrite(&SCL, 1); //todo delay 15us GpioWrite(&SCL, 0); }

  4. NOACK 信号

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

    cpp 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;
     }
    

原文地址:https://www.cnblogs.com/memorypro/p/9549906.html

时间: 2024-11-05 11:44:28

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

Exynos4412 IIC总线驱动开发(二)—— IIC 驱动开发

前面在Exynos4412 IIC总线驱动开发(一)-- IIC 基础概念及驱动架构分析 中学习了IIC驱动的架构,下面进入我们的驱动开发过程 首先看一张代码层次图,有助于我们的理解 上面这些代码的展示是告诉我们:linux内核和芯片提供商为我们的的驱动程序提供了 i2c驱动的框架,以及框架底层与硬件相关的代码的实现.  剩下的就是针对挂载在i2c两线上的i2c设备了device,而编写的即具体设备驱动了,这里的设备就是硬件接口外挂载的设备,而非硬件接口本身(soc硬件接口本身的驱动可以理解为总

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

关于Exynos4412 IIC 裸机开发请看 :Exynos4412 裸机开发 -- IIC总线 ,下面回顾下 IIC 基础概念 一.IIC 基础概念 IIC(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备.IIC总线产生于在80年代,最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个组件状态的通信.例如管理员可对各个组件进行查询,以管理系统的配置或掌握组件的功能状态,如电源和系统风扇.可随时监

SylixOS iMX6平台I2C总线驱动

原理概述 I2C总线驱动概述 I2C总线驱动是I2C适配器的软件实现,提供I2C适配器与从设备间完成数据通信的能力,比如起始,停止,应答信号和MasterXfer的实现函数.驱动程序包含初始化I2C总线控制器__i2cHwInit函数,操作函数集(总线传输__i2cTransfer函数,总线控制__i2cMasterCtl函数). Imx6ul控制器的硬件描述 imx6ul处理器内部集成了一个I2C控制器,通过五个寄存器来进行控制. I2Cx_IADR I2C地址寄存器 I2Cx_IFDR I2

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

本文主要介绍RT-thread中IIC总线设备驱动,涉及到的主要文件有:驱动框架文件(i2c_core.c,i2c_dev.c,i2c-bit-ops.c,i2c_dev.h,i2c.h):底层硬件驱动文件(i2c_soft.c,i2c_soft.h).这里的i2c_soft.c和i2c_soft.h是指利用MCU的GPIO口模拟IIC总线时序,而不是利用MCU的硬件IIC接口.应用IIC总线设备驱动时,需要在rtconfig.h中添加宏定义#define RT_USING_I2C.若使用GPI

IIC总线协议

 II2C C总线的简单的概述 1.( 总线(Inter Integrated Circuit Bus Inter Integrated Circuit Bus):是 ):是Philips Philips公司 公司 推出的串行总线标准(为二线制).总线上扩展的外围器件及外设接 推出的串行总线标准(为二线制). 2.总线上扩展的外围器件及外设接 口通过总线寻址,是具备总线仲裁和高低速设备同步等功能的高性能 口通过总线寻址,是具备总线仲裁和高低速设备同步等功能的高性能 多主机总线. 3.特点:组成系

平台总线驱动设计

平台总线驱动设计1.平台总线概述(总线驱动中最为重要的一个总线)平台总线(Platform bus)是linux2.6内核加入的一种虚拟总线,其 优势在于采用了总线的模型对设备与驱动进行了管理,这总线的模 型对设备与驱动进行了管理,这样提高了程序的可移植性.通过平台总线机制开发设备驱动的流程:定义platform_device->注册platform_device->定义 platform_drivre->注册platform_driver 屏台总线驱动与设备匹配机制:内核代 码/drv

数字电路期末课程设计总结(三)IIC总线调用

首先介绍一下IIC总线.高速设备为了抗干扰,大多数都用低压差分信号(LVDS).差分线路由于传递差模信号,可以有效抑制共模噪声和串扰.IIC总线虽然由于速度限制不能驱动高速设备,多用于KHz级别的信号传递,不过依然有着比较广泛的用途. IIC网上资料繁多,我就不再赘述. 写数据分三步: 1.主机发送地址位(写),从机应答. 2.主机发送控制字,从机应答. 3.主机发送数据. 读数据分四步: 1.主机发送地址位(写),从机应答. 2.主机发送控制字,从机应答. 3.主机发送地址位(读),从机应答.

IIC总线硬件工作原理(待完善)

一.IIC基础概念 IIC(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备.IIC总线最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个组件状态的通信.例如管理员可对各个组件进行查询,以管理系统的配置或掌握组件的功能状态,如电源和系统风扇.可随时监控内存.硬盘.网络.系统温度等多个参数,增加了系统的安全性,方便了管理. 1.IIC特点 简单:接口在组件上,占用空间小     高效:能够以10Kbp

MSM8909+Android5.1.1键盘驱动------概述

采用SN7326带智能指扫描的键盘扩展芯片,通过I2C接口来读取其状态寄存器的值就可知道是单按键还是多按键按下,可知道具体是哪个按键按下.然后键盘驱动调用input_event()上报linux的扫描码,比如KEY_RIGHT,然后传递给android框架层,流程如下图: 图1 下面介绍要实现键盘驱动所涉及的主要方方面面 1.     Input子系统 Linux输入设备总类繁杂,常见的包括有按键.键盘.触摸屏.鼠标.摇杆等等,他们本身就是字符设备,而linux内核将这些设备的共同性抽象出来,简