648|5

48

帖子

0

资源

一粒金砂(中级)

【ESP32-C3-DevKitM-1】ESP32-C3的硬件I2C+SHT30 [复制链接]

4、I2C的评测

ESP32-C3有一组硬件I2C,支持主机和从机模式,速度可支持标准模式和快速模式,最高可达800Kbit/s,但受限于SDA和SDL的上拉强度,芯片内部的SDA和SDL脚有上拉电阻可以配置。同时,引脚可以任意映射,如下图

image-20210708112835-1.png

接下来我将使用硬件I2C来驱动温湿度传感器SHT30

1、初始化I2C

因为GPIO没有默认,所以要指定GPIO作为SDASCL,还要选择I2Cmode,这里我们选择Master,同时使能内部上拉,还要配置I2C的时钟速度,这里我们选用100KHz,最后调用i2c_param_configi2c_driver_install来完成配置,这里注意一下I2C的端口i2c_master_port我这里是I2C_NUM_0具体程序见下图。

image-20210708112835-2.png

还有一些宏定义

image-20210708112835-3.png

2、配置I2C的相关函数

这里直接调用API就行了,同时为了提高移植性,我将官方的API封装了一下,这样SHT30在调用的时候可以灵活切换软硬件I2C驱动函数,见下图

image-20210708112835-4.png

下图是在SHT30头文件里的宏定义,可以实现软硬件I2C灵活切换

image-20210708112835-5.png

 

3、配置SHT30的函数

SHT30的驱动函数网上也比较多,我就不细讲了,讲一些核心函数,我这里选用Singleshot模式来采集数据,首先要初始化SHT30,这里比较简单,就是I2C的初始化,见下图

image-20210708112835-6.png

4、配置读取SHT30数据的函数

首先要讲一下ESP32-C3的I2C的一些基本操作,包括主机向从机写入数据和主机从从机读取数据,具体的在官方编程指南了写的很明白了,见下图

image-20210708112835-7.png

image-20210708112835-8.png

 

这里需要注意一点,上边的步骤缺一不可

具体要怎么通过I2C来操作SHT30呢,当然是参考官方数据手册,下图是Singleshot模式的操作时序图

image-20210708112835-9.png

 

1、首先,发送开始信号,再发送write header,我这里是0x88,然后再发送16位的配置命令,比如配置成高重复性或者低重复性,这个可以参考数据手册或者互联网,我就不细讲了,最后发送停止信号,见下图的程序

image-20210708112835-10.png 这里的Sht30_WriteCommand就是发送两次8位数据,依次是高8位和低8位 image-20210708112835-11.png

同时,因为发送的3组8位数据都是有ACK响应的,所以要将使能主机检查ACK,也就是设置ACK_CHECK_EN

 

2、延时至少1ms,也就是SCL free,这时候SHT30正在测量

image-20210708112835-12.png

 

3、发送开始信号,写入read header,我这里的值为0x89,根据时序图,SHT30会返回一个NACK,所以可以不使能主机检查ACK,也就是设置ACK_CHECK_DIS,最后发送停止信号

image-20210708112835-13.png

 

4、再延时大于1ms

 

5、再次发送开始信号,再写入read header,如果转换好了,SHT30会发送一个ACK,没有的话可以稍微延长延时时间,然后依次读写6组8位的SHT30返回的数据,这里注意一下,收到前5组数据时要发送ACK,最后1组不需要(虽然加了也没什么关系),然后再发送停止信号就好了。这里还需要注意一点,在读数据时一定要将从设备发送过来的数据全部读完,不然会莫名出问题的,踩了坑)

image-20210708112835-14.png

 

6、最后要验证收到的数据的正确性,要进行CRC验证,具体算法我就不讲了,大家可以看数据手册。其中temp[2]和humi[2]是CRC数据,如果数据验证正确,再对原始数据进行转换成真实数据。

image-20210708112835-15.png

下图为CRC验证算法和数据转换算法

image-20210708112835-16.png

image-20210708112835-17.png

 

最后在主函数调用如下函数

image-20210708112835-18.png

用串口打印如下结果,成功驱动

image-20210708112835-19.png

赞赏

1

查看全部赞赏


回复

48

帖子

0

资源

一粒金砂(中级)

欢迎讨论和指正


回复

1576

帖子

3

资源

版主

文章排版还是非常好的。功能设计的也很清晰!


回复

5938

帖子

0

资源

五彩晶圆(初级)

通过I2C来操作SHT30写的很详细,评测的很赞


回复

4246

帖子

1

资源

五彩晶圆(初级)

这个i2c的图看着有点复杂啊

点评

感觉还好吧    详情 回复 发表于 2021-7-9 22:09
个人签名

默认摸鱼


回复

48

帖子

0

资源

一粒金砂(中级)

freebsder 发表于 2021-7-9 21:53 这个i2c的图看着有点复杂啊

感觉还好吧

 


回复
您需要登录后才可以回帖 登录 | 注册

最新文章 更多>>
    关闭
    站长推荐上一条 1/9 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2021 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表