1. 项目背景与硬件选型
最近在做一个物联网传感器项目,需要将传感器数据通过无线方式传输到手机端。经过多方比较,我最终选择了Silicon Labs的EFR32BG22作为主控芯片。这款芯片真的让我眼前一亮,它集成了高性能的Cortex-M33内核和2.4GHz无线模块,特别适合做低功耗蓝牙设备。
选择EFR32BG22有几个关键考虑:首先是低功耗特性,在蓝牙传输状态下功耗只有8.2mA,睡眠模式下更是低至1.2μA,这对于电池供电的物联网设备至关重要。其次是丰富的外设接口,特别是I2C控制器,可以轻松连接各种传感器。最后是开发工具链完善,Simplicity Studio 5提供了从硬件配置到软件开发的完整解决方案。
在实际项目中,我使用EFR32BG22作为I2C主机,采集温湿度传感器和加速度计的数据,然后通过BLE实时传输到手机App。这种架构既保证了数据采集的稳定性,又实现了无线传输的便利性。整个系统搭建下来,发现EFR32BG22确实是个不错的选择,特别是在处理多外设和无线通信同时工作的场景下表现很稳定。
2. 开发环境搭建与工程配置
搭建开发环境是第一步,我用的是Simplicity Studio 5(简称SSV5),这是Silicon Labs官方的集成开发环境。安装过程比较简单,从官网下载安装包后一路next就行,不过要注意选择安装所有的SDK组件,特别是Gecko SDK Suite,因为后面会用到里面的蓝牙协议栈。
创建新工程时选择"Bluetooth - SoC Empty"模板,这是一个基础的蓝牙示例工程,包含了必要的蓝牙协议栈初始化代码。然后需要配置SDK组件,在Software Components面板中搜索并添加I2C相关的组件,主要是I2CSPM(I2C Simple Mode)驱动,这个驱动简化了I2C操作接口,用起来很方便。
工程配置完成后,接下来要配置引脚。EFR32BG22的引脚复用功能很灵活,需要通过Pin Tool工具进行配置。我选择PC0作为SCL,PC1作为SDA,这两个引脚都支持I2C功能。在Pin Tool中右键点击相应引脚,选择I2C功能,然后指定是SCL还是SDA。配置完成后SSV5会自动生成引脚初始化代码,不需要手动写GPIO配置,这点很省心。
最后检查一下时钟配置,I2C需要正确的时钟源才能工作。在Clock Configurator中确保HFCLK选择的是38.4MHz的晶体振荡器,这是蓝牙协议栈要求的时钟频率。I2C的时钟可以分频得到,比如100kHz的I2C时钟就是从38.4MHz分频而来。
3. I2C外设深入配置
I2C的配置有几个关键参数需要特别注意。在I2CSPM配置界面,首先选择使用I2C0还是I2C1外设,EFR32BG22有两个I2C控制器,我选择了I2C0。然后设置时钟频率,常见的有100kHz标准模式和400kHz快速模式,我一开始用了100kHz,后来测试发现400kHz也能稳定工作。
超时设置很重要,特别是当从设备没有响应时,超时机制可以防止程序卡死。我设置了100ms的超时时间,这个值可以根据实际应用调整。还要注意I2C的地址模式


598

被折叠的 条评论
为什么被折叠?



