5128|5

85

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

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

 

4、I2C的评测

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

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

1、初始化I2C

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

还有一些宏定义

2、配置I2C的相关函数

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

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

 

3、配置SHT30的函数

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

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

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

 

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

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

 

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

这里的Sht30_WriteCommand就是发送两次8位数据,依次是高8位和低8位

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

 

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

 

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

 

4、再延时大于1ms

 

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

 

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

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

 

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

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

最新回复

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

赞赏

1

查看全部赞赏

点赞(1) 关注(1)
 
 

回复
举报

85

帖子

0

TA的资源

一粒金砂(高级)

沙发
 

欢迎讨论和指正

 
 
 

回复

1942

帖子

3

TA的资源

版主

板凳
 

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

 
 
 

回复

6861

帖子

0

TA的资源

五彩晶圆(高级)

4
 

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

 
 
 

回复

7671

帖子

2

TA的资源

五彩晶圆(高级)

5
 

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

点评

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

默认摸鱼,再摸鱼。2022、9、28

 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(高级)

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

感觉还好吧

 

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

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