本文将会分别介绍——使用软件i2c和硬件i2c在psoc开发板上获取sht30数字温湿度传感器的数据。本文实验使用的是4线的sht30模组,通信接口为i2c,对外仅提供四根线,使用起来简单、便捷。本文使用的开发环境为rt-thread studio,设备上运行的是rt-thread实时系统。本文主旨在于,介绍如何在psoc开发板上使用软件i2c和硬件硬件i2c驱动外设。
如需离线阅读,可以下载本文的完整pdf版本:
*附件:【英飞凌psoc 6 rtt开发板试用】通过i2c接口读取sht30传感器的温湿度数据 28a12ba6538e461da5c07d6ff64279b1.pdf
一、环境准备开始之前,需要准备实验所需的硬件和软件,接下来分别介绍。
1.1 硬件准备本次实验需要用到的硬件有:
rtt&英飞凌psoc6评估板sht30模组杜邦线4根usb type-c数据线个人电脑,windows 10系统1.2 软件准备本次实验需要使用的软件主要为:
rt-thread studiomobaxterm(其他串口调试工具也可以)假设你已经成功在电脑上安装了以上这些软件。
二、硬件原理分析2.1 硬件连接硬件连接分为两部分,一部分是pc和开发板,通过usb type-c线连接;这个没啥难度,不做过多介绍;需要注意的是,开发板一端接dap口;否则无法正常下载程序。
另外一部分是,开发板和oled屏幕之间的连接,具体如下表所示:
sht30模组开发板引脚
scl a0
sda a1
gnd gnd
vcc 3v3
开发板和oled屏幕之间的硬件连接,如下图所示:
2.2 开发板原理图首先,检查开发板原理图的arduino接口a0/a1部分:
这里只能看到标号,看不到主控芯片的引脚名称。
所以,还需要继续搜索这两个引脚的标号,找到主控芯片对应的引脚标号:
对照前面的传感器与开发板的连接图,以及这两处原理图,可以知道——传感器模组i2c引脚和主控芯片直接的连接关系为:
scl:p10.0sda:p10.12.3 芯片数据手册《psoc 6 mcu: cy8c62x8, cy8c62xa datasheet》文档的 pinouts 章节,table 8. multiple alternate functions 引脚功能服用表,可以查到p10.0和p10.1的功能有:
可以看到,有scb[1].i2c_scl和scb[1].i2c_sda功能。
也就是说,p10.0和p10.1可以设置为硬件i2c功能。
三、软件i2c获取sht30数据接下来,将使用rt-thread studio创建项目,并通过添加软件包和修改配置的方式,实现使用软件i2c获取sht30的温湿度数据。
3.1 创建rt-thread项目在rt-thread studio中,打开“文件”→“新建”→”rt-thread项目”菜单,如下图所示:
在弹出的创建项目界面中,project name中填入psoc6_sht30,选中基于开发板的项目,如下图所示:
点击“完成”,稍等几秒钟,即可创建名为psoc6_sht30的项目。
3.2 添加ssd1306软件包创建项目后,双击项目资源管理器视图中,项目下方的“rt-thread settings”,主编辑区如下图所示:
点击其中的“添加软件包”,弹出的软件包搜索界面,如下图所示:
按照图中标注的操作顺序,即可将ssd1306软件包添加到当前项目。
添加完成后,主编辑区如下图所示:
此时,按ctrl+s快捷键,保存对项目配置的修改。如果网络通常,则会在控制台窗口中看到ssd1306软件包正常下载的日志:
这样,ssd1306软件包就成功添加到项目中了,位于packages子目录下:
3.3 配置软件i2c引脚接下来,在rt-thread studio主编辑器,点击详细配置按钮,按钮位置如下图所示:
主编辑器将会显示详细配置:
切换到“硬件”标签页,找到“enable software i2c”选项,并打开该选项,如下图所示:
接着,打开“使能i2c1 bus”,并将scl和sda中分别改为80和81,如下图所示:
最后,按ctrl+s保存对所有配置项的修改。
3.4 编译和下载程序首先,点击工具栏的锤子图标,或者按ctrl+b快捷键,触发项目构建(全部编译):
项目构建完成后,可以在控制台窗口看到生成了elf文件,以及预计flash和ram占用情况:
接着,点击工具栏上的下载图标,或者ctrl+alt+d快捷键,触发下载程序二进制文件到开发板上,如下图:
下载过程中以及下载完成后,控制台窗都可以看到日志输出:
ps:开始下载之前,需要确认开发板以及和pc正确连接了(开发板要连在dap口上,并能够正常识别)。
3.5 运行和测试程序为了方便在串口中进行命令控制,运行之前,需要先打开mobaxterm(或者其他串口调试工具):
如上图所示,选中对应的com号,串口参数设置为:
波特率 115200数据位 8停止位 1校验 none流控 none之后,点ok确认连接。
连接成功后,按开发板的复位键,可以看到串口连接中输出:
可以看到i2c1成功注册的日志。
此时输入help命令并回车:
可以看到,有sht3x命令了。
输入sht3x命令并回车,将会输出用法提示:
可以看到,使用 sht3x probe 加上i2c设备名称,可以探测传感器;
我们先用list device看看有哪些设备:
可以看到i2c1设备了。
接下来,使用 sht3x probe i2c1 探测设备:
已经成功探测到了。
紧接着,使用sht3x read尝试读取传感器温湿度值:
成功读取到了温湿度数据!
接下来,我把手指放在传感器上,多读几次(上下键翻历史命令,再回车,可以避免重复复输入),应该可以看到温度和湿度都在不断升高:
说明传感器是正常工作的。
四、硬件i2c获取sht30数据前面通过查询原理图,我们知道开发板arduino接口的a0/a1引脚可以设置为i2c1功能,接下来将在前面创建的项目的基础上,修改代码,实现通过硬件i2c1获取sht30的温湿度数据。
4.1 增加硬件i2c1配置和代码rt-thread studio默认创建的项目不支持硬件i2c1,不能实现硬件i2c1驱动sht30。因此,需要先添加i2c4配置和代码,才能进行后续操作。
首先,修改 board/kconfig 文件,在config bsp_using_hw_i2c3之前添加如下代码行:
config bsp_using_hw_i2c1 bool enable i2c1 bus (user i2c) default n if bsp_using_hw_i2c1 comment notice: p10_0 -- > 80; p10_1 -- > 81 config bsp_i2c1_scl_pin int i2c4 scl pin number range 1 113 default 80 config bsp_i2c1_sda_pin int i2c4 sda pin number range 1 113 default 81 endif接着,修改 libraries/hal_drivers/sconscript 文件,找到 src += ['drv_i2c.c'] ,将其前面的条件修改为:
if getdepend('bsp_using_hw_i2c1') or getdepend('bsp_using_hw_i2c3') or getdepend('bsp_using_hw_i2c6'): src += ['drv_i2c.c']最后,修改 libraries/hal_drivers/drv_i2c.c 文件,具体修改内容为:
--- a/libraries/hal_drivers/drv_i2c.c+++ b/libraries/hal_drivers/drv_i2c.c@@ -11,9 +11,19 @@ #include board.h #if defined(rt_using_i2c)-#if defined(bsp_using_hw_i2c3) || defined(bsp_using_hw_i2c6) #include +#include drv_log.h++#ifndef i2c1_config+#define i2c1_config \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\+ { \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\+ .name = i2c1, \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\+ .scl_pin = bsp_i2c1_scl_pin, \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\+ .sda_pin = bsp_i2c1_sda_pin, \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\+ }+#endif+ #ifndef i2c3_config #define i2c3_config \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ { \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\@@ -22,7 +32,7 @@ .sda_pin = bsp_i2c3_sda_pin, \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ } #endif /* i2c3_config */-#endif+ #ifndef i2c6_config #define i2c6_config \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ { \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\@@ -34,6 +44,9 @@ enum {+#ifdef bsp_using_hw_i2c1+ i2c1_index,+#endif #ifdef bsp_using_hw_i2c3 i2c3_index, #endif@@ -59,6 +72,10 @@ struct ifx_i2c static struct ifx_i2c_config i2c_config[] = {+#ifdef bsp_using_hw_i2c1+ i2c1_config,+#endif+ #ifdef bsp_using_hw_i2c3 i2c3_config, #endif@@ -145,8 +162,7 @@ void hal_i2c_init(struct ifx_i2c *obj) int rt_hw_i2c_init(void) {- rt_err_t result;- cyhal_i2c_t mi2c;+ rt_err_t result = rt_eok; for (int i = 0; i < sizeof(i2c_config) / sizeof(i2c_config[0]); i++) {@@ -157,18 +173,18 @@ int rt_hw_i2c_init(void) i2c_objs[i].mi2c_cfg.address = 0; i2c_objs[i].mi2c_cfg.frequencyhal_hz = (400000ul);- i2c_objs[i].mi2c = mi2c;- i2c_objs[i].i2c_bus.ops = &i2c_ops; hal_i2c_init(&i2c_objs[i]); result = rt_i2c_bus_device_register(&i2c_objs[i].i2c_bus, i2c_config[i].name); rt_assert(result == rt_eok);++ log_i(hardware i2c device %s registered!, i2c_config[i].name); } return 0; } init_device_export(rt_hw_i2c_init);-#endif /* defined(bsp_using_i2c1) || defined(bsp_using_i2c2) */+#endif /* defined(rt_using_i2c) */4.1 修改硬件i2c1配置首先,打开rt-thread settings的详细配置,切换到硬件标签页,关闭“enable software i2c bus”配置项,如下图所示:
接着,打开“enable hardware i2c bus”配置项,再打开其中的“enable i2c4 bus (arduino i2c)”配置项,如下图所示:
完成修改后,按ctrl+s保存配置。
4.2 编译、下载、运行重新ctrl+b编译,ctrl+alt+d下载,按reset键复位之后,按reset键重启系统,可以看到,硬件i2c驱动代码中添加的日志已经正常输出了。
再次运行 list device ,可以看到:
类似的,这次也可以读到温湿度值:
把手放在传感器上,多读几次,也可以看到温度升高:
说明我们修改的硬件i2c代码也可以正常工作了。
文章就到这里,感谢阅读,下次再会~
五、参考链接rtt psoc开发板原理图:ifx-psoc6-rt-thread-sch.pdf (gitee.com)cy8c624a 芯片数据手册:infineon-psoc_6_mcu_cy8c62x8_cy8c62xa-datasheet-v18_00-en.pdfcy8c624a 架构参考手册: infineon-psoc_6_mcu_cy8c6xx8_cy8c6xxa_architecture_technical_reference_manual_(trm)-additionaltechnicalinformation-v08_00-en.pdfcy8c624a 寄存器参考手册: infineon-psoc_6_mcu_cy8c62x8_cy8c62xa_registers_technical_reference_manual-additionaltechnicalinformation-v06_00-en.pdfcypress hal接口参考: redirecting to infineon github (cypresssemiconductorco.github.io)
机器人需要更具场景适用性的导航方案 导航方案选择需要因地制宜
ABB亮相行业年会 携手业界推动智能技术发展
基于块层的组成“bio层”的详细解析
使用HART兼容性处理技术简化设计过程
智慧城市的数据治理
【英飞凌PSoC 6 RTT开发板试用】通过软件和硬件I2C接口获取数字温湿度传感器SHT30的数据
谷歌多模态大模型PaLI研究神经网络
详解列控中心与ZPW-2000轨道电路接口
轨交信号系统基础简介
果汁LED灯制作步骤
音箱采用无线充电技术,实用性将大大提升
中国布局新能源汽车开放,本土化才是关键
5G工业网关助力搭建污水预处理智能化信息应用平台
安森美半导体将在2015 APEC展示下一代电源系统
恩智浦半导体公司宣布推出首个多设备车载无线充电解决方案
电梯前室 (合用前室) 和楼梯间的余压传感器的是怎么进行工作的
单片机教程十二:单片机逻辑与或异或指令详解
Helm部署MinIO集群
CES 2023 | 从科技趋势看存储新风向
2020年人气爆棚的十大真无线蓝牙耳机品牌终极盘点