SHT20 IIC总线驱动概述
SHT20温湿度传感器使用iic总线的驱动方式,以下资料参考SHT20 datasheet总结
1、IIC总线
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);
}
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);
}
ACK 信号
ACK信号是在时钟线的下降沿拉低数据线,代码如下:
void IIC_ACK(void)
{
GpioWrite(&SDA, 0);
GpioWrite(&SCL, 1);
//todo delay 15us
GpioWrite(&SCL, 0);
}
NOACK 信号
和ACK信号相反,NOACK是在时钟的下降沿拉高数据线,代码如下:void IIC_NOACK(void) //6. 非应答信号
{
GpioWrite(&SDA, 1);
GpioWrite(&SCL, 1);
//todo delay 15us
GpioWrite(&SCL, 0);
}
发送数据和接受数据
通常发送数据还是接受数据是由 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总线驱动概述的更多相关文章
- Exynos4412 IIC总线驱动开发(一)—— IIC 基础概念及驱动架构分析
关于Exynos4412 IIC 裸机开发请看 :Exynos4412 裸机开发 —— IIC总线 ,下面回顾下 IIC 基础概念 一.IIC 基础概念 IIC(Inter-Integrated Ci ...
- 对 IIC 总线的理解、调用函数以及常见面试问题
一.IIC 总线概述: IIC 即Inter-Integrated Circuit(集成电路总线) I2C总线是PHLIPS公司推出的一种串行总线, I2C总线只有两根双向信号线.一根是数据线SDA, ...
- 18、IIC总线驱动程序
i2c_s3c2410.c是内核自带dev层(adapt)驱动程序,知道怎么发收数据,不知道含义 在与i2c_s3c2410.c(在其probe函数中的s3c24xx_i2c_init函数会初始化ii ...
- linux-2.6.38 总线驱动分析
一.IIC总线驱动代码 IIC总线控制器通常是在内存上的,连接在platform总线上,所以需要通过platform_driver和platform_device的匹配.我想大概根据总线设备驱动模型的 ...
- Linux驱动之IIC总线
<作用> 电子设备中有很多IIC设备之间需要进行相互通信,这样就产生了IIC总线,常用来实现设备之间的数据通信. <IIC总线结构> IIC总线只有两条线,一条是串行数据线 ...
- RT-thread 设备驱动组件之IIC总线设备
本文主要介绍RT-thread中IIC总线设备驱动,涉及到的主要文件有:驱动框架文件(i2c_core.c,i2c_dev.c,i2c-bit-ops.c,i2c_dev.h,i2c.h):底层硬件驱 ...
- IIC总线
一. 概述 1. IIC总线是PHILIPS公司推出的一种串口总线,是具备多主机系统所需的包括总线裁决和高低速器件同步功能的高性能串口总线. 2. IIC总线只有两根双向信号线.一根是数据线SDA,一 ...
- linux内核SPI总线驱动分析(一)(转)
linux内核SPI总线驱动分析(一)(转) 下面有两个大的模块: 一个是SPI总线驱动的分析 (研究了具体实现的过程) 另一个是SPI总线驱动的编写(不用研究具体的实现过程) ...
- linux之i2c子系统架构---总线驱动
编写i2c设备驱动(从设备)一般有两种方式: 1.用户自己编写独立的从设备驱动,应用程序直接使用即可. 2.linux内核内部已经实现了一个通用的设备驱动,利用通用设备驱动编写一个应用程序(用户态驱动 ...
随机推荐
- Winform关于OpenFileDialog的使用方法
1.OpenFileDialog控件有以下基本属性InitialDirectory 对话框的初始目录Filter 要在对话框中显示的文件筛选器,例如,"文本文件(*.txt)|*.txt|所 ...
- models渲染字典&form表单上传文件&ajax上传文件
{# {% for u in teacher_d.keys %}#} {# {% for u in teacher_d.values %}#} {% for k,u in teacher_d.item ...
- 1. Spring boot 之热部署
1. spring boot 热部署 1.1. springloaded springloaded可以实现修改类文件的热部署.下载地址:springloaded 安装单击Run Configurati ...
- OpenSSL基础知识
1.openssl里的fips是什么意思? openssl-fips是符合FIPS标准的Openssl. 联邦信息处理标准(Federal Information Processing Standar ...
- PAT 1044 火星数字(20)(思路+代码)
1044 火星数字(20)(20 分) 火星人是以13进制计数的: 地球人的0被火星人称为tret. 地球人数字1到12的火星文分别为:jan, feb, mar, apr, may, jun, jl ...
- python如何查看有哪些模块
Question: 如何查看正则表达式模块re及其相关函数的意义 1.终端命令行下 python >> import sys >> sys.modules ########## ...
- select查询
4.2 查询功能 SQL的核心是查询.SQL的查询命令也称作SELECT命令,它的基本形式由SELECT-FROM-WHERE查询块组成,多个查询块可以嵌套执行. 以下表为以后的例子中使用表: 档案 ...
- 设计神器 - 摹客设计系统上线了 | 晒出你的设计规范,赢iPad Pro!
在国内,设计规范也许还是个不太常用的概念,但是如果你正好有参与互联网公司的产品设计,你应该早就已经体会到设计规范的重要性了.UI设计师总是要花费大量的时间和精力向开发描述一大堆设计细节,但是产品最后呈 ...
- msys2 命令行添加镜像地址
sed -i "1iServer = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686" /etc/pacman.d/mi ...
- 如何使用webpack打包前端项目
webpack概述 随着前端体积越来越大,功能越来越丰富,这时候就需要将前端工程化,而 webpack就是用于将前端各种文件打包起来. 一个简单的webpack应该包含以下几个概念 · 入口起点 · ...