1、引言

用SHT30测温湿度,SHT30是I2C通信总线,具体信息去看Datasheet文档:https://pdf1.alldatasheet.com/datasheet-pdf/view/897974/ETC2/SHT30.html。操作系统是Linux,机器是CM3计算板,当然也可以是树莓派和其他主机。

2、设备树打开I2C接口

linux的I2C需要打开I2C的设备树才能在/dev中找到,具体方式是:

sudo vim /dev/config.txt

打开注释或者新增以下内容:

dtparam=i2c_arm=on
dtoverlay=i2c0
dtoverlay=i2c1

然后重启,查看/dev下边有没有i2c-0和i2c-1出现。执行:ls /dev/

3、一切皆文件的驱动编写

linux中的I2C驱动主要包括ioctl,write,read三个函数。其中,ioctl的cmd常用到以下配置:

  1. I2C_SLAVE:I2C从机地址,用来设定I2C从机地址;
  2. I2C_SLAVE_FORCE:用来修改I2C从机地址;
  3. I2C_TENBIT:设置从机地址占用的位数,取值为0表示从机地址为7 bit;取值为1表示机地址为10bit。

具体地,贴代码了:

/******************************************************************************** File Name          : cm3I2C.c* Description        : This file provides code for the gateway i2c driver.* Author             : jackwang by jiawang16@foxmail.com* Date               : 2019-08-17******************************************************************************
*/
/*! Include header */
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <linux/i2c.h>
#include <linux/i2c-dev.h>
#include <unistd.h>
#include <sys/ioctl.h>#include "cm3I2C.h"/*! debug info define */
#define __DEBUG    1
#if __DEBUG#define debug   printf
#else#define debug
#endif/*! cm3 i2c dev setup, e.g. /dev/i2c-0 */
int cm3I2CSetup(char* dev)
{int fd;fd = open(dev, O_RDWR);if ( fd < 0 ){debug("[Error] failed to open the i2c bus: %s.\n", dev);return -1;}return fd;
}/*! cm3 i2c slave address bits setup, 0->7,1->10 */
int cm3I2CSlaveAddrBitSetup(int fd, int bits)
{if ( ioctl(fd, I2C_TENBIT, bits) < 0) {debug("[Error] failed to set i2c addr bits.\n");return -1;}return 0;
}/*! cm3 i2c slave address setup */
int cm3I2CSlaveAddrSetup(int fd, int addr)
{if ( ioctl(fd, I2C_SLAVE_FORCE, addr) < 0 ){debug("[Error] failed to set i2c slave address.\n");return -1;}return 0;
}/*! cm3 i2c read slave device reg */
int cm3I2CRead(int fd, unsigned char*buf, int buflength)
{if ( read(fd, buf, buflength) <0){debug("[Error] failed to read i2c.\n");return -1;}return 0;
}/*! cm3 i2c write slave device reg */
int cm3I2CWrite(int fd, unsigned char*buf, int buflength)
{if ( write(fd, buf, buflength) != buflength ){debug("[Error] failed to write i2c.\n");return -1;}return 0;
}/*! cm3 i2c dev-handler close */
void cm3I2CClose(int fd)
{close(fd);
}

CM3计算板读取SHT30以及I2C驱动相关推荐

  1. CM3计算板安装硬件时钟DS3231

    1.硬件连接 DS3231是高速(400kHz)I2C接口的实时时钟芯片,0°C至+40°C范围内精度为±2ppm,-40°C至+85°C范围内精度为±3.5ppm,工作电压3.3V,提供电池备份,具 ...

  2. 使用STM32F103 I2C驱动SHT30

    使用STM32F103 I2C驱动SHT30 SHT30的官方代码见<Sensirion_Humidity_Sensors_SHT3x_Sample_Code_V2>,不过官方是用GPIO ...

  3. linux i2c 读写函数,Linux内核调用I2C驱动_实现MPU6050的数据读取

    0. 导语 最近一段时间都在恶补数据结构和C++,加上导师的事情比较多,Linux内核驱动的学习进程总是被阻碍.不过,十一假期终于没有人打扰,有这个奢侈的大块时间,可以一个人安安静静的在教研室看看Li ...

  4. CM3计算板RTC闹钟唤醒系统

    1.前言 一个周期性控制系统的核心为CM3计算板,在电池供电情况下要求尽可能提高使用时长.由于系统空闲时长较多,因此在考虑低功耗的情况下将系统关机以进一步降低功耗.需要注意的是,系统关机后需要在指定时 ...

  5. 模拟IIC读取SHT30温湿度传感器数据

    文章目录 1 i2c.c 2 i2c.h 3 crc.c 4 crc.h 1 i2c.c /*** @brief SHT30温湿度传感器相关,使用模拟IIC进行数据的读取*/#include < ...

  6. 基于WinCE的I2C驱动程序设计

    http://www.mcu123.com/news/Article/rtos/WinCE/200607/88.html 引言 随着以计算机技术.通信技术和软件技术为核心的信息技术的迅速发展,嵌入式系 ...

  7. CM3计算板I/O编程

    1.CM3计算板的IO资源 CM3支持的I/O管脚数为54个,每个管脚包括一个或多个复用功能,分别位于ALT0~ALT5,如下表: 2.设备树启用IO外设的方式 通过在/boot/config.txt ...

  8. WinCE的I2C驱动程序设计

    1 I2C 通信协议及S3C2410 芯片介绍 I2C(Inter Integrated Circuit) 总线是1980 年由Philips 公司推出的. I2C 总线用两条线(SDA 和SCL ) ...

  9. linux下i2c驱动笔记

    1. 几个基本概念 1.1. 设备模型 由 总线(bus_type) + 设备(device) + 驱动(device_driver) 组成,在该模型下,所有的设备通过总线连接起来,即使有些设备没有连 ...

最新文章

  1. 两篇文章说中断和异常之一
  2. ssl mybatis实现数据库字段的加解密
  3. json.dumps()和json.loads()
  4. boost::hana::deque用法的测试程序
  5. 电脑怎么下mcjava版_游戏下载常见问题(苹果、电脑玩家下载须知)
  6. DAHDI与Zaptel
  7. 关于配置Webapck的 exclude 不过滤 node_modules Babel却没有处理转换node_modules的源码
  8. The Tomcat connector configured to listen on port 8080 failed to start. The port may already be in u
  9. frame中src怎么设置成一个变量_OpenCV图像人脸检测及视频中的人脸检测(附源码)...
  10. 【调试工具】之Python调试工具pycharm
  11. 瑞斯康达nms_瑞斯康达接入网设备维护标准手册.docx
  12. 李宏毅20212022机器学习
  13. json表示map_简单json 转换为 map、对象
  14. CDN选择合适的回源策略很重要
  15. 红蓝药丸的选择:大脑在缸中还是颅中?
  16. 计算机专业专业课代号408,2020武汉大学计算机专业课改考408
  17. dpdk pmd驱动分析
  18. C#编写数据分析软件(附源码)
  19. 小心inneHTML的地雷
  20. SCON:串行控制寄存器 之 格式

热门文章

  1. 7种常用p2p共享协议
  2. 用OmniPeek快速定义的过滤器来抓网页提交信息
  3. c#控件弹幕效果_C# Form 实现桌面弹幕
  4. Android 基础—— 对Context的理解与使用技巧
  5. Python使用select实现异步通信
  6. frameworks/av/media/CedarX-Projects/CedarAndroidLib/LIB_KK44_/Android.mk: No such file or directory
  7. javascript学习系列(2):数组中的filter方法
  8. 前端学习(3000):vue+element今日头条管理--远程仓库的issue
  9. 前端学习(2925):vue改变样式1
  10. [css] 写例子说明如何强制(自动)中、英文换行与不换行