【经验】EFR32FG23无线SoC使用I2C读写MSA311传感器寄存器的方法
本文以 SILICON LABS 的 EFR32FG23 无线SoC芯片的 rail_soc_simple_trx 工程为例,介绍如何使用 EFR32FG23 芯片 I2C 外设来读写敏芯微 MSA311 三轴加速度传感器的寄存器的方法。
1、在使用 EFR32FG23 芯片的 I2C 外设之前,我们需要先在 rail_soc_simple_trx 工程安装 I2CSPM(I2C Simple Polled Master) 驱动。双击打开 rail_soc_simple_trx.slcp 文件,点击 SOFTWARE COMPONENTS,在右上方的搜索栏输入 i2c,按下电脑键盘的 enter 按键。点击搜索到的 I2CSPM 组件,点击 Install。
在弹出的对话框中,可以修改 INSTANCE NAME 的名称,本文使用默认的名称 sensor,点击 Done。
2、点击 I2CSPM 组件下面的 sensor,点击右边的 Configure。
在 I2CSPM (sensor) 页面可以修改 I2C 的速率、选择使用哪个 I2C 模块和设置 SCL 和 SDA 的引脚等。
3、为了方便管理代码,我们在 rail_soc_simple_trx 工程目录下新创建一个 user_i2c.c 文件。在 rail_soc_simple_trx 工程名称点击鼠标右键,点击 New,再点击 Source File。
输入文件名称 user_i2c.c,点击 Finish。
4、使用类似的方法,再创建一个 user_i2c.h 文件。记得创建 .h 文件需要选择 Header File。
5、在 user_i2c.c 文件添加如下代码。注意在读寄存器时,需要把 seq.flags 设置为 I2C_FLAG_WRITE_READ;在写寄存器时,需要把 seq.flags 设置为 I2C_FLAG_WRITE。
#include "user_i2c.h"
sl_status_t user_i2c_read_register(sl_i2cspm_t *i2cspm, uint8_t addr, uint8_t reg, uint8_t *data)
{
I2C_TransferSeq_TypeDef seq;
I2C_TransferReturn_TypeDef ret;
uint8_t i2c_read_data[2];
uint8_t i2c_write_data[2];
seq.addr = addr << 1;
seq.flags = I2C_FLAG_WRITE_READ;
/* Select command to issue */
i2c_write_data[0] = reg;
seq.buf[0].data = i2c_write_data;
seq.buf[0].len = 1;
/* Select location/length of data to be read */
seq.buf[1].data = i2c_read_data;
seq.buf[1].len = 1;
ret = I2CSPM_Transfer(i2cspm, &seq);
if (ret != i2cTransferDone) {
*data = 0;
return SL_STATUS_TRANSMIT;
}
*data = i2c_read_data[0];
return SL_STATUS_OK;
}
sl_status_t user_i2c_write_register(sl_i2cspm_t *i2cspm, uint8_t addr, uint8_t reg, int8_t data)
{
sl_status_t retval = SL_STATUS_OK;
I2C_TransferSeq_TypeDef seq;
I2C_TransferReturn_TypeDef ret;
uint8_t i2c_read_data[2];
uint8_t i2c_write_data[2];
seq.addr = addr << 1;
seq.flags = I2C_FLAG_WRITE;
/* Select command to issue */
i2c_write_data[0] = reg;
i2c_write_data[1] = data;
seq.buf[0].data = i2c_write_data;
seq.buf[0].len = 2;
/* Select location/length of data to be read */
seq.buf[1].data = i2c_read_data;
seq.buf[1].len = 0;
ret = I2CSPM_Transfer(i2cspm, &seq);
if (ret != i2cTransferDone) {
retval = SL_STATUS_TRANSMIT;
}
return retval;
}
6、在 user_i2c.h 文件添加如下代码。MSA311 传感器的 I2C 地址为 0x62。
#include <stddef.h>
#include "sl_i2cspm.h"
#include "sl_status.h"
#define MSA311_SENSOR_ADDR 0x62
sl_status_t user_i2c_read_register(sl_i2cspm_t *i2cspm, uint8_t addr, uint8_t reg, uint8_t *data);
sl_status_t user_i2c_write_register(sl_i2cspm_t *i2cspm, uint8_t addr, uint8_t reg, int8_t data);
7、打开 app_init.c 文件,添加如下包含头文件的代码:
#include "user_i2c.h"
#include "sl_i2cspm_instances.h"
8、在 app_init.c 文件的 app_init() 函数添加如下代码。
uint8_t i2c_test_data = 0xFF;
//读取MSA311传感器0x1A寄存器的数据
if(!user_i2c_read_register(sl_i2cspm_sensor, MSA311_SENSOR_ADDR, 0x1A, &i2c_test_data))
{
app_log_info("Data read from 0x1A register of MSA311: 0x%02X\n", i2c_test_data);
}
//向MSA311传感器的0x1A寄存器写数据0x01
if(!user_i2c_write_register(sl_i2cspm_sensor, MSA311_SENSOR_ADDR, 0x1A, 0x01))
{
app_log_info("Write 0x01 to the 0x1A register of MSA311\n");
}
//重新读取MSA311传感器0x1A寄存器的数据
if(!user_i2c_read_register(sl_i2cspm_sensor, MSA311_SENSOR_ADDR, 0x1A, &i2c_test_data))
{
app_log_info("Reads data from the 0x1A register of MSA311 again: 0x%02X\n", i2c_test_data);
}
9、编译 rail_soc_simple_trx 工程,直到工程没有报错。将 MSA311 传感器连接到 EFR32FG23 开发板的 I2C 接口,并使用逻辑分析仪来捕捉 I2C 的 SCL 和 SDA 引脚的波形。
10、打开串口软件,开始监控 EFR32FG23 开发板所在 COM 口的串口数据。打开逻辑分析仪软件,开始捕捉 SCL 和 SDA 引脚的波形。将 rail_soc_simple_trx 工程的固件烧录到 EFR32FG23 芯片,从串口软件可以看到:
EFR32FG23 芯片成功的读到 MSA311 传感器 0x1A 寄存器的默认数据为 0x00;
然后 EFR32FG23 芯片对 MSA311 传感器 0x1A 寄存器写数据0x01;
最后 EFR32FG23 芯片成功的读到 MSA311 传感器 0x1A 寄存器的数据变为 0x01。
11、查看逻辑分析仪捕捉到的波形如下图所示:
a. 从 MSA311 传感器的 0x1A 寄存器读到的默认数据为 0x00;
b. 将数据 0x01 写入到 MSA311 传感器的 0x1A 寄存器;
c. 从 MSA311 传感器的 0x1A 寄存器读到的数据变为 0x01。
- |
- +1 赞 0
- 收藏
- 评论 0
本文由潮汕小菜提供,版权归世强硬创平台所有,非经授权,任何媒体、网站或个人不得转载,授权转载时须注明“来源:世强硬创平台”。
相关推荐
【经验】多协议无线 SOC EFR32MG实现ZigBee的OTA操作指南
EFR32MG系列是Silicon Labs公司推出支持多协议无线 SOC,可以单芯片支持私有协议、BLE5.0、BLE MESH、ZigBee和Thread协议,并且可以单芯片支持Sub-GHz和2.4GHz的频段。由于其超低功耗、高射频性能以及高集成度等特点被广泛应用于智能家居、安防、智能工业等市场。在ZigBee的实际应用中,OTA是必不可少的功能,由于选择的型号不同,配置OT
设计经验 发布时间 : 2018-09-24
【经验】芯科科技EFR32MG21A020F512IM32无线SOC固件烧录方法及步骤
笔者设计了一款Zigbee无线通信模块,采用Silicon Labs(芯科科技)EFR32MG21A020F512IM32无线SOC作为主芯片,包含512KB Flash、64KB RAM和丰富硬件外设,最大发射功率20dBm,支持Zigbee 3.0协议,主要用于智能家居中的网关、智能开关等产品的无线连接。本文介绍EFR32MG21A020F512IM32无线SOC固件烧录方法及步骤。
设计经验 发布时间 : 2020-03-16
【经验】Matter入门指导10:使用Raspberry Pi 4B更新EFR32MG21 USB STICK固件
Matter演示套件中的EFR32MG21 USB STICK需要下载 ot-rcp-mg21-usbstick.gbl 固件,才能正常使用Matter over Thread的功能。本文主要介绍使用树莓派4B(Raspberry Pi 4B)给EFR32MG21 USB STICK更新固件的方法。
设计经验 发布时间 : 2023-06-22
芯科科技MG24系列多协议SoC助力Centero工业网络,提升工业无线连接设备性能和安全性
SILICON LABS的合作伙伴Centero运用MG24多协议无线SoC提供了易于集成、兼容的端到端无线IEEE 802.15.4和802.11解决方案,从而满足严格的行业要求。其保证的延迟是安全、关键应用程序所必需的。Centero的解决方案还提供强大的数据存储和使用信息,以及预测性维护(predictive maintenance),从而提高运营效率和工厂安全性。
原厂动态 发布时间 : 2024-05-17
xG26再告捷!荣获2024全球电子成就奖-RF/无线年度创新产品奖
SILICON LABS(芯科科技)旗舰级BG26蓝牙SoC和MG26多协议SoC在日前获颁2024年全球电子成就奖(WEAA)年度射频/无线/微波创新产品奖!BG26和MG26系列SoC是迄今物联网产业领先企业之最高性能的系列产品,可用于最复杂的物联网应用,如需要较强的处理能力、能效和无线性能的Matter等具备严苛要求之新兴应用,以及包括智能家居、智慧城市和工业用例。
原厂动态 发布时间 : 2024-11-13
芯科科技提供多款无线连接和控制芯片产品及解决方案,BG2x系列蓝牙SoC成就多样医疗物联网用例,
Silicon Labs(亦称“芯科科技”)的无线SoC和MCU助力全球客户的医疗物联网应用创新,持续打造更智能、高效、安全和便捷的健康监测设备。智能和网联技术近年来一直是医疗和健康保障领域内的热门技术,许多厂商都在利用医疗物联网(IoMT)技术开发更加智能和互联的健康监测设备,以利用物联网、云计算、人工智能和可穿戴等新一代信息通信技术,来帮助用户时刻监控自己的健康状况、降低医疗费用和就医麻烦。
原厂动态 发布时间 : 2023-06-29
最新第三代无线开发平台全面提升人工智能和无线连接功能!
芯科科技在嵌入式世界展览会上宣布,其第三代无线开发平台将推动物联网设备的增长,预计10年内设备数量超1000亿台。新平台将提供更强大的连接性、计算能力、安全性和AI/ML功能,支持从制造到医疗等多个行业的转型。首款SoC正在试用,更多细节将在2025年上半年公布。同时,第一代和第二代平台产品继续发展,满足广泛的技术需求。
原厂动态 发布时间 : 2024-10-23
【经验】创建ZigBee的无线SOC网关工程操作步骤
Silicon Labs公司的EFR32MG系列是针对智能家居市场应用的多协议无线SOC,单芯片支持蓝牙、ZigBee和Thread等协议,尤其是高性价比的系列2产品MG21、MG22,在ZigBee应用方面受到广大工程师的青睐。对于新手来说,使用SOC模式网关是最简单不过,本文就指导大家创建ZigBee的SOC网关工程操作步骤。
设计经验 发布时间 : 2020-04-09
【IC】Silicon Labs的EFR32xG27无线SoC,外形小巧且低功耗,在物联网应用中具有极强的渗透力
EFR32xG27无线Gecko SoC是将76.8MHz的Arm Cortex-M33处理器内核与高性能2.4GHz无线电相结合的单芯片解决方案,外形小巧,同时具有丰富的功能和低功耗的特性,在物联网应用中具有极强的渗透力。
产品 发布时间 : 2024-10-17
【IC】全新xG22E无线SoC系列支持能量采集应用,开创无电池物联网产品
Silicon Labs宣布推出全新的xG22E系列无线片上系统(SoC),这是芯科科技有史以来首个设计目标为可在无电池、能量采集应用所需超低功耗范围内运行的产品系列。这一新系列包括BG22E、MG22E和FG22E三款SoC产品。是芯科科技迄今为止能量效率最高的SoC。
产品 发布时间 : 2024-04-26
【经验】多协议无线SoC EFR32MG的ZigBee开发之Token使用教程
EFR32MG系列是Silicon Labs公司针对多协议推出的无线SOC,单芯片可以支持Sub-G、蓝牙、Thread和Zigbee多种协议。Token是用来存储非易失性数据的即掉电后也能保存,本文档指导大家如何在EmberZNet PRO应用程序中自定义Token来存储非易失性数据。
设计经验 发布时间 : 2019-02-13
智能设备设计概念并开发小型医疗、可穿戴和娱乐设备
随着科技的发展,电子产品的体积越来越小,并被赋予更多智能功能,与网络连接也成为基本功能,像是小型蓝牙医疗保健设备与可穿戴设备、智能娱乐设备和增强现实(AR)和虚拟现实(VR)解决方案等产品,已经逐步改变人类的生活样貌。本文将为您介绍设计这类电子产品的设计概念,以及由Silicon Labs(芯科科技)所推出相关解决方案的产品特性。
应用方案 发布时间 : 2024-10-08
EFR32FG23 Wireless SoC Family Data Sheet
型号- EFR32XG23,EFR32FG23B010F128GM40-C,EFR32FG23A010F256GM48-C,EFR32FG23B010F512IM40-C,EFR32FG23A020F512GM48-C,EFR32FG23A021F512GM40-C,EFR32FG23A010F512GM48-C,EFR32FG23A010F256GM40-C,EFR32FG23B010F512IM48-C,EFR32FG23A020F512GM40-C,EFR32FG23A010F512GM40-C,EFR32FG23B021F512IM40-C,EFR32FG23A011F512GM40-C,EFR32FG23B020F512IM40-C,EFR32FG23 FAMILY,EFR32FG23A020F256GM48-C,EFR32FG23B020F512IM48-CR,EFR32FG23,EFR32FG23B020F128GM40-C,EFR32FG23B021F512IM48-C,EFR32,EFR32FG23B020F512IM48-C,EFR32FG23A020F256GM40-C
【经验】无线SoC EFR32系列的timer配置及注意点介绍
Silicon Labs的EFR32系列无线SoC的timer在协议的应用中起非常重要的作用,应用于协议中的任务切换、功耗模式切换、定时发送等,本文主要介绍EFR32的定时器相关的配置及注意要点。
设计经验 发布时间 : 2020-04-14
芯科科技FG25 Sub-GHz无线SoC成功案例推动智慧城市能源转型
SILICON LABS芯科科技正在为改善世界和生活的产品的物联网开发人员创建硬件、软件和解决方案。凭借多样化的无线SoC、所有主要和次要物联网标准和协议方面的专业知识,以及至高的质量和安全标准,公司为正在重塑能源管理、电气化和分销的变革者提供支持。
应用方案 发布时间 : 2024-09-06
电子商城
品牌:SILICON LABS
品类:Mighty Gecko Multi-Protocol Wireless SoC
价格:¥27.0929
现货: 90,767
品牌:SILICON LABS
品类:Wireless Gecko SoC
价格:¥15.1445
现货: 14,989
品牌:SILICON LABS
品类:Gecko Multi-Protocol Wireless SoC
价格:¥44.9692
现货: 12,980
现货市场
品牌:SILICON LABS
品类:Switch Hall Effect Magnetic Position Sensor
价格:¥2.2924
现货:126,000
服务
提供是德(Keysight),罗德(R&S)测试测量仪器租赁服务,包括网络分析仪、无线通讯综测仪、信号发生器、频谱分析仪、信号分析仪、电源等仪器租赁服务;租赁费用按月计算,租赁价格按仪器配置而定。
提交需求>
配备KEYSIGHT网络分析仪,可测量无线充电系统发射机/接收机线圈的阻抗,电感L、电阻R、电感C以及品质因数Q,仿真不同充电负载阻抗下的无线充电传输效率。支持到场/视频直播测试,资深专家全程指导。
实验室地址: 深圳 提交需求>
登录 | 立即注册
提交评论