日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

CM3计算板读取SHT30以及I2C驱动

發(fā)布時(shí)間:2023/12/10 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CM3计算板读取SHT30以及I2C驱动 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、引言

用SHT30測(cè)溫濕度,SHT30是I2C通信總線,具體信息去看Datasheet文檔:https://pdf1.alldatasheet.com/datasheet-pdf/view/897974/ETC2/SHT30.html。操作系統(tǒng)是Linux,機(jī)器是CM3計(jì)算板,當(dāng)然也可以是樹莓派和其他主機(jī)。

2、設(shè)備樹打開I2C接口

linux的I2C需要打開I2C的設(shè)備樹才能在/dev中找到,具體方式是:

sudo vim /dev/config.txt

打開注釋或者新增以下內(nèi)容:

dtparam=i2c_arm=on dtoverlay=i2c0 dtoverlay=i2c1

然后重啟,查看/dev下邊有沒有i2c-0和i2c-1出現(xiàn)。執(zhí)行:ls /dev/

3、一切皆文件的驅(qū)動(dòng)編寫

linux中的I2C驅(qū)動(dòng)主要包括ioctl,write,read三個(gè)函數(shù)。其中,ioctl的cmd常用到以下配置:

  • ????I2C_SLAVE:I2C從機(jī)地址,用來設(shè)定I2C從機(jī)地址;
  • ????I2C_SLAVE_FORCE:用來修改I2C從機(jī)地址;
  • ????I2C_TENBIT:設(shè)置從機(jī)地址占用的位數(shù),取值為0表示從機(jī)地址為7 bit;取值為1表示機(jī)地址為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); }

    ?

    ?

    總結(jié)

    以上是生活随笔為你收集整理的CM3计算板读取SHT30以及I2C驱动的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。