温湿度传感器SHTC3驱动开发(一)小白也能轻松理解

2023-05-16

一 、首先了解设备硬件原理图

首先在公司干活,要你开发一个设备驱动,那你的老大必须得给你的东西如下:

  1. 开发板主板硬件原理图
  2. 驱动设备的硬件原理图
  3. 驱动的设备的数据手册(datasheet)
  4. 一个硬件正常的开发板
  5. 一个正常的要驱动的设备
  6. 一份demo驱动代码(一些厂家可能没有linux驱动代码,只有stm32的,这个就会稍微麻烦一点)

好了,现在清算一下,除了第6个,如果缺胳膊少腿儿的,你直接找老大要就完事了,不要怕,直接要

打开主板硬件原理图

找到和温湿度传感器相关部分,可以看到温湿度传感器接在J25口上,并且看到是I2C2_SDA和I2C2_SCL,可以确定的是该设备走的i2c协议,并且是i2c2(通常情况下是i2c2,但是由于我们硬件工程师命名和原厂定义有出入,其实对应的是i2c0)。

到这里我们可以知道两个信息,一个是该设备驱动走的是i2c协议,且是接入的i2c2。

在这里插入图片描述

打开温湿度硬件原理图

在这里插入图片描述
其实这上面没有什么关键信息,不过做开发肯定是得看一眼,结合温湿度传感器datasheet可知其实温湿度传感器设备有四根线,从datasheet上也可以看到,分别是电源线 时钟线 数据线 接地。
在这里插入图片描述

二、打开温湿度传感器datasheet

在这里插入图片描述
在这里插入图片描述
浏览可以得到一个大概信息,SHTC3是一个可以检测温度和湿度的传感器,
温度范围 -40℃~125℃
湿度范围 0%~100%
工作电压 1.6v~3.6v
通讯方式 i2c
时钟频率 三种模式分别是 0 ~ 100kHz 0 ~ 400kHz 0 ~ 1000kHz

找到如下几个关键信息

温湿度设备地址和读写命令在这里插入图片描述

在实际的使用过程中,SHTC3的设备地址需要与读写数据/命令方向位组成一个字节同时发送,字节的最低位为读写数据/命令方向位,高7位是SHTC3的设备地址。

如果要通过I2C写数据或命令给SHTC3,在I2C起始信号之后,需要发送“1110 0000”,即0xE0给SHTC3,除了通过高7位“1110 000”的设备地址寻址还通过最低位“0”通知SHTC3接下来是写数据或命令操作。

如果要通过I2C读取SHTC3中的数据,在I2C起始信号之后,需要发送“1110 0001”,即0xE1给SHTC3,除了通过高7位“1110 000”的设备地址寻址还通过最低位“1”通知SHTC3接下来是读取数据的操作。
  简单来说就是,0xE0表示写数据,0xE1表示读数据。不过这个貌似在linux驱动开发中用不上,可能stm32开发驱动用到。不过当使用逻辑分析仪测试i2c通信是否畅通的时候可以参考,后续会讲解到。

读取温湿度数据

在这里插入图片描述
可知,不同的命令,除了获取的数据顺序不一样,还有一个Clock Stretching Enable 和 Disable的区别。

Clock Stretching是时钟拉伸的意思。如果使用Clock Stretching Enable命令的话,那么发送完测量命令之后,在SHTC3测量温度湿度数据的过程中,SHTC3会拉低I2C的时钟线SCL,通过这样来禁止主机发送命令给SHTC3,只有当SHTC3完成温度湿度数据测量时,SHTC3才会释放时钟线SCL。

如果使用Clock Stretching Disable命令的话,在SHTC3测量数据的过程中,SHTC3并不会拉低I2C的时钟线SCL,只是如果主机在SHTC3测量数据的过程中发送命令或数据的时候,SHTC3是不会响应主机的,主机可以通过SHTC3是否有响应信号来判断SHTC3是否完成数据的测量。

从数据手册可知,一个测量周期包概括四个步骤:

1、发送唤醒命令。

2、发送测量命令

3、读取测量完成之后的数据。

4、发送休眠命令。
  
以上唤醒命令和休眠命令在数据手册中查询。
在这里插入图片描述
总结如下:
1、唤醒SHTC3:先发送写入指令(0xE0),再发送唤醒指令高位(0x35),再发送唤醒指令低位(0x17)。
2、等待唤醒:数据手册上写的最大唤醒时间是240us,等待的时间大于这个就行了。
3、发送采集指令:先发送写入指令(0xE0),再发送采集指令的高位和低位。采集指令有多个,根据需要自行选择。
4、接收数据:发送读取指令(0xE1),连续接收6个字节数据。如果采集的指令是先存温度,那么这6个字节的第1-2个字节就是温度数值,第3个字节是温度校验。第4-5个字节是湿度数值,第6个字节是湿度校验。如果采集的指令是先存湿度,则前3个字节和后3个字节相反。
5、进入睡眠:发送写入指令,再发送睡眠指令进入睡眠。

这里先对命令使用有个大概了解,后续编码时再详细讲解如何使用

三、数据的计算

由shtc3数据手册可知
在这里插入图片描述
例如:采集到的湿度数值是0x6501,换算成十进制是25857。
则:湿度 = 100 * 25857 / 65536 = 39.45 (单位:%)
采集到的温度数值是0x6600,换算成十进制是26112。
则:温度 = -45 + 175 * 26112 / 65536 = 24.72 (单位:℃)

四、添加设备树节点

根据以上的信息,可以开始在设备树中添加设备节点了,找到你项目使用的设备树文件,一般路径为 arch/arm/boot/dts/xxx/xxx.dts
我这里开发板对应的是i2c0,所以在dts的i2c0下添加节点,具体如下:
在这里插入图片描述

这里有两个要注意的地方
1.为什么是i2c0 ?
上面主板原理图明明写的是I2C2_SDA、I2C2_SCL,这是因为我们硬件工程师命名时没有和原厂保持统一,导致的出入,Domain对应的M几,才是真正对应的哪个i2c。如果你在设备数的i2c2节点下添加,那驱动肯定是不会通的,所以我们开发过程中遇到问题要及时沟通。
在这里插入图片描述
2.pinctrl-0怎么配置?
在主板原理图中找I2C2对应的有哪些引脚,可以看到有GPIOZ_0和GPIOZ_1
在这里插入图片描述
然后在dts的头文件找到这个文件#include “mesonsm1.dtsi”,打开mesonsm1.dtsi,发现i2c0有三个pinctrl配置,pinctrl2对应的是z0和z1,所以应该选择i2c0_master_pins2。
在这里插入图片描述
注意:设备节点中的宏SENSOR_TYPE_TEMPERATURE 需要在头文件中添加<dt-bindings/sensor-dev.h>

添加完设备树之后,编译烧录,启动板子,查看节点是否添加成功,名称是否一致,如下图显示,即表明设备树节点添加成功。

在这里插入图片描述
在这里插入图片描述
注意:当你准备验证设备节点是否添加成功时,记得一定要把温湿度设备插到主板上,电源供电供上,别只插USB线,忙碌了一大堆,往往基本操作很容易忽略

做完这一步,可以使用逻辑分析仪测试硬件通信是否正常,可参考此文章,后续编写驱动,便不用考虑硬件的问题了。逻辑分析仪的使用

下一篇继续详细讲解i2c协议的驱动编码过程,如果你觉得有用的话,请点个赞吧~
温湿度传感器SHTC3驱动开发(二)小白也能轻松理解

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

温湿度传感器SHTC3驱动开发(一)小白也能轻松理解 的相关文章

随机推荐

  • Windbg及Dump文件分析方法

    1 WinDbg 1 1WinDbg介绍 WinDbg全称Debugging Tools for Windows xff0c 是windows平台下的调试工具 获取Windbg的三种途径 xff1a xff08 1 xff09 在Visua
  • hadoop实现单表和多表关联

    转载请注明 xff1a http hanlaiming freetzi com p 61 123 在mapreduce上编写简单应用后 xff0c 开始学习稍微高级一点的单表关联和多表关联 在学习过程中我参考了这篇文章 xff0c 谢谢ht
  • 第一个C++程序

    第一个C 43 43 程序 一般每个程序员的第一个C 43 43 程序都从 Hello world 开始 xff0c 不多说 xff0c 直接上代码 include lt iostream gt using namespace std in
  • 《自己动手写操作系统》初学笔记------软盘第一扇区写入问题解决方案

    这个学期刚刚学习了操作系统这门课 xff0c 我始终相信计算机学科是一门注重实践的学科 xff0c 从实践中感受学习计算机知识的快乐才是真谛 xff0c 恰巧让我碰到了 自己动手写操作系统 这本书 xff0c 刚一遇见很是兴奋 xff0c
  • CAS单点登录学习笔记二之部署CAS Server

    CAS Server 服务器部署 b 简介 b CAS Server 是一套基于 Java 实现的服务 xff0c 该服务以一个 Java Web Application 单独部署在与 servlet2 3 兼容的 Web 服务器上 xff
  • STM32标准库的引入视频课程-第3季第6部分-朱有鹏-专题视频课程

    STM32标准库的引入视频课程 第3季第6部分 1017人已学习 课程介绍 本课程是 朱有鹏老师单片机完全学习系列课程 第3季第6个课程 xff0c 本课程详细讲解了STM32官方新标准库3 5版本 xff0c 从理论到实践 xff0c 从
  • VMware虚拟机开机黑屏一系列问题解决方法

    VMware虚拟机开机黑屏一系列问题解决方法 虚拟机一开机就是黑屏 xff0c 网上看了很多方法 xff0c 都是以管理员身份运行VMware 或者是以管理员身份打开cmd 输入netsh winsock reset xff0c 再重启计算
  • vmware workstation vmx进程结束不了!!!

    打开任务管理器会看到有一个这个进程 xff0c 使用vmware的时候出现死机情况 xff0c 然后使用任务管理器结束vmware进程 xff0c 之后却发现资源监视器中有一个vmware vmx exe进程始终关不掉 xff0c 获得管理
  • 形式化方法课程学习笔记(一)|Cop的安装以及简单使用

    一 Cop的介绍以及安装 1 Cop介绍 Coq是一个著名的 xff0c 也被广泛使用的正式证明管理系统 它提供了一种正式的语言来编写数学定义 可执行的算法和定理 xff0c 以及用于机器检查证明的半交互式开发的环境 有关Coq的更多信息
  • 虚拟机共享文件夹制作|Ubuntu与本机文件共享

    一 引言 使用虚拟机 xff0c 经常出现想要把主机文件复制到虚拟机中 xff0c 或者是相反的情况 xff0c 一般来说是不能直接复制的 xff0c 另外个人感觉安装VMware tool的方式并不是很好 xff0c 似乎也容易出问题 x
  • VScode使用Remote - SSH插件实现远程服务器开发

    一 引言 最近做实验需要用到远程服务器开发 xff0c 在windows系统上可以下载Xshell PuTTY 来进行实验 xff0c 因为助教推荐使用VScode 43 Remote ssh来进行实验 xff0c 所以百度了怎么样来操作
  • YUV/RGB颜色空间转换公式

    经过调研 xff0c 最终选择以下转换公式 xff1a Jack Keith Video Demystified a Handbook for the Digital Engineer LLH Technology Publishing 3
  • c语言编程软件有哪些 Win7下用哪种C语言编译器

    C语言是一门历史很长的编程语言 xff0c 其编译器和开发工具也多种多样 xff0c 其开发工具包括编译器 xff0c 现举几个开发工具供大家选择 xff0c 当然也要根据自己的操作系统来选择适合自己的开发工具 好多刚开始接触c语言的朋友都
  • 大数据时代的图表可视化利器——highcharts,D3和百度的echarts

    还记得阿里巴巴那个令人澎湃激情的双十一吗 xff1f 还记得淘宝生动形象地把你的的消费历程一一地展示给你看吗 xff1f 还记得那些酷炫拽的it报告图表吗 xff1f 在这个大数据越来越盛行的年代 xff0c 怎样去表达一些用户的关系 xf
  • 在tinycorelinux上安装lxc,lxd (1)

    本文关键字 xff0c 在tinycorelinux上安装lxc xff0c lxd gcc4 4 self reference struct typedef 在前面的文章中我们讲到过内置虚拟化的os设计 xff0c 它可以使包括裸金属 x
  • STM32上第一个程序-GPIO控制LED-第3季第5部分-朱有鹏-专题视频课程

    STM32上第一个程序 GPIO控制LED 第3季第5部分 759人已学习 课程介绍 本课程是 朱有鹏老师单片机完全学习系列课程 第3季第5个课程 xff0c 从零开始带大家写代码控制板载LED xff0c 并且用三个版本的开发板都实现了功
  • Cas 5.3x cas-overlay-template用iframe实现登录跳转

    Cas 5 3x cas overlay template用iframe实现登录跳转 在上一篇Cas 5 3x 简单配置 xff0c 解决https访问的问题的基础上 xff0c 我尝试了一下如何用iframe实现登录和跳转 xff0c 因
  • Linux自带防火墙基本使用

    文章目录 四 Linux自带防火墙1 查看linux的防火墙状态2 查看已经对外开放的端口3 开放端口 重载防火墙配置4 filewalld常用命令 四 Linux自带防火墙 前言 xff1a CentOS7 端口的开放关闭查看都是用防火墙
  • BGP边界网关协议基础知识点

    BGP xff1a 边界网关协议 AS 自治系统 由单一机构或组织管理的一系列IP网络机器设备的集合 网络范围太大 xff0c 协议跑不过来 xff0c 需要进行划分自治管理 为了方便区分和标定不同AS xff0c 我们给每个自治系统设计了
  • 温湿度传感器SHTC3驱动开发(一)小白也能轻松理解

    一 首先了解设备硬件原理图 首先在公司干活 xff0c 要你开发一个设备驱动 xff0c 那你的老大必须得给你的东西如下 xff1a 开发板主板硬件原理图驱动设备的硬件原理图驱动的设备的数据手册 xff08 datasheet xff09