EFR32BG22系列-windows开发环境搭建及出厂例程验证

最近对ThreadX很感兴趣,TreadX官方文档中有Silicon Labs EFR32MG12的代码支持,我手头没有这块板子,但我之前有幸拿到了朋友送的配置可谓极致的silicon labs BG22开发板,所以想尝试下这个板子是否也可以用。

这个板子可谓精致,还有配套的演示app,可玩性很高,但是一直忙于其他项目,没有时间研究。所以趁国庆有空,拿出来吃灰的板子研究下,希望以后能有机会拿它在高端和超低功耗场景拿来做产品,同时也算是对朋友的一个交代。

万事开头难,我们要怎么快速入门silicon labs的系列产品呢?对于c类型项目来说,最难的入门门槛就是开发环境和开发流程,搞定这些,到了纯编码部分就是很快的事情了。

本文内容分为以下几个部分

  • EFR32BG22开发板硬件配置介绍
  • EFR32BG22 windows开发环境搭建
  • 出厂例程的配套APP功能介绍

EFR32BG22开发板硬件配置介绍

开发板图片

file

规格

小封装 Thunderboard

  • 兼容 EXP 的外接头
    目标设备
  • EFR32BG22
    • 适用于大容量产品的安全蓝牙 5.2 SoC
    • 76.8 MHz、具有 512 kB 闪存和 32 kB RAM 的 ARM Cortex-M33 内核
    • 蓝牙 5.2 无线电,支持测向和 LE 编码 PHY
  • 38.4 MHz HFXO 晶体
  • 32.768 kHz LFXO 晶体
  • 2.4 GHz 匹配网络和贴片天线
    板载板控制器
  • J-Link 调试器
    • SWD 物理层
  • UART 数据包追踪/异步协议
  • 带硬件流控制功能的虚拟 COM
    用于调试连接的 USB Micro-B 连接器
    用户接口功能:
  • 1x 按钮(带 EM2 唤醒功能)
  • 1x LED
    数据存储 / OTA 支持
  • 8 Mbit SPI 闪存
    节能特性
  • 适用于传感器的可控独立电源域
    Android 和 iOS 移动应用程序
  • 查看传感器数据、控制 LED 灯和检测按钮操作
  • iOS 应用程序得到快速实施
  • 以原代码形式实现的 Android 应用程序
  • GitHub 上可用的源代码
    传感器
  • 相对湿度和温度传感器:Si7021
  • UV 和环境光传感器:Si1133
  • 霍尔效应传感器:Si7210
  • 6 轴 IMU:Invensense ICM-20648
    Mini Simplicity 调试连接器(兼容 SLSDA001A),可接入:
  • AEM
  • PTI
  • VCOM
  • SWD

除了左右两个MIC,以上的传感器和按键以及led都在APP中可以互通。

EFR32BG22 windows开发环境搭建

  1. 确保你的系统是win10,因为最新的simplicity5主要是针对win10兼容的。我自己得老爷本是win7,特此升级到了win10,废了不少时间。
  2. 从官网下载Simplicity Studio并运行安装程序,一切按照指导操作就可以。
  3. 环境变量的配置,主要是silicon相关工具的path配置,这个可以放到后面实际使用时再针对性的来配置。
  4. 在simplicity中根据开发板类型下载正确的SDK。这一步需要连接开发板,要确认正确的usb线,开发板链接电脑后,在设备管理器里面应该出现正确的j-link和com端口。Tools->Simplicity Commander,然后选择正确的开发板。
  5. 克隆出厂例程,出厂例程有完整的测试app和驱动,方便我们后继开发使用。

  6. 编译:project->build project。
  7. 编译成功。
  8. 烧录下载:操作flash programmer按钮。因为boot的原因,默认我们的例程是不包含bootloader的,所以下载时要注意首地址,系统默认boot中应用的首地址是0x6000。如果不小心boot被擦除了,就要重新下载bootloader。如果直接不小心下载到0地址,boot会被覆盖,而且程序也不会正常运行。
  9. 下载成成功。
  10. 复位运行,正确下载后,开机后VCOM会有log输出,同时黄色LED会闪烁。
    [I] Thuderboard demo initialised
    [I]  sv = 3.031  svl = 3.031   i = 0.003   r = 0.072
    [I] Bluetooth stack booted: v3.2.3-b273
    [I] Bluetooth public device address: 84:2E:14:31:CA:5D

注意事项

通过simplicity 的下载按钮下载的只是应用,是不包含bootloader的,如果之前全片erase过,下载后是无法正常运行的。更新boot的方法就是重新下载一个带boot的,然后再重新更新应用,或者独立下载系统内置的默认bootloader。

问题1

在我们尝试 erase时,出现下面的问题:

DP write failed
Could not access Debug challenge interface

解决
参考官方论坛的解答,断开重连问题得以解决: https://silabs-prod.adobecqms.net/community/software/simplicity-studio/forum.topic.html/can_t_program_bgm220pc22hnamoduledpwritefaile-j6BP

进一步的原因,其实官方的文档里面有描述:
https://www.silabs.com/documents/public/training/wireless/bg22-thunderboard-workshop-out-of-the-box-thunderboard-example-project.pdf

Error: DP Write Failed - Press the Reset button on Thunderboard or unplug/replug then Flash again within 30 seconds.
The Thunderboard demo app which ships on the boards goes into a low energy mode (EM2) after 30 seconds. When the device is in EM2,
the debug interface is unavailable, and DP write fails. We can wake the device by resetting Thunderboard

出厂例程的配套APP功能介绍

在烧录下载了我们自己编译的嵌入式版本后,我们接下来要用原厂配套的APP来测试各个功能,以确保我们手头的代码版本功能正常。

  1. 下载app。可以从github直接下载 https://github.com/SiliconLabs/thunderboard-ios https://github.com/SiliconLabs/thunderboard-android ,也可以从各手机商店下载。iphone 可以直接在商店搜索“Thunderboard”。
  2. 点开APP,复位开发板,因为板子可能进入睡眠模式,无法连接。复位开机的30s内是可以正常连接的(经测试,出厂的原装版本会蓝牙休眠,我们新的编译的版本不会,可以随时连接)。正常的情况下,app下方会显示开发板蓝牙的名称。
  3. APP功能主界面
  4. Motion功能,主要是测试的6轴IMU,当我们旋转开发板时,APP的仿真目标会根据三轴的角度,同步变化。
  5. 环境传感器数据,会显示实际的温湿度,环境光,UV,霍尔开关状态,地磁参数。其中霍尔开关和地磁是同一个芯片Si7210出来的数据。
  6. IO控制,这个主要演示的是通过app控制载LED,以及板载按键开关的反向状态同步到APP。

至此,我们编译的版本,在APP的各项测试中都正常通过,跟出厂的原装版本表现一致,也就证明了我们这套代码以及环境的可用性和正确性,接下来我们就可以放心基于这套驱动和参考代码来构建我们自己的功能产品了。

结论

不论是从芯片支持的外围传感器的驱动丰富性,还是从开发IDE Simplicity和配套APP的易用和完备角度来看,EFR32BG22芯片及其开发SDK套件都是低功耗蓝牙物联网解决方案的极具竞争力选择,其芯片价格在一线品牌中也很有竞争力,具有极高性价比,值得我们深入挖掘和研究。

EFR32BG22如何烧录内置bootloader

BG22带蓝牙协议栈的版本是需要bootloader的。如果开发过程中我们不小心把bootloader覆盖了或者擦除了,怎么重新烧录?

有2种方法:

  • 烧录已经自带boot的目标文件,比如出厂默认的例子:Bluetooth - SoC Thunderboard EFR32BG22 (BRD4184A)。然后再单独更新应用部分,注意确认好起始地址,不要搞错了。目前内置默认的boot的应用首地址是0x6000。
  • 烧录独立的bootloader,可以是自己编译的,也可以是内置的。

第1种在simplicity中可以一键完成,所以我们不再赘述。我们接下来重点详细介绍第2种方法。

EFR32BG22单独更新boot的步骤

  1. 在当前工程的生成目录下打开命令行
    file
  2. 执行命令行:
    commander flash D:\SiliconLabs\SimplicityStudio\v5\developer\sdks\gecko_sdk_suite\v3.2\platform\bootloader\sample-apps\bootloader-storage-internal-single-512k\efr32mg22c224f512im40-brd4182a\bootloader-storage-internal-single-512k.s37

    这里需要需要注意环境变量的问题,如果提示不能识别commander,就需要自己手动配置。我们这里使用的是系统默认的boot,如果用自己的,注意改成实际boot项目的路径。
    成功后提示如下:
    file

Thunderboard EFR32BG22 summary

VCOM

The serial format is 115200 bps, 8 bits, no parity, and 1 stop bit by default.

Recover bricked Device

实际是先整片擦除,然后自动重新烧录了bootloader

合并bootloader和应用

commander convert bootloader-uart-bgapi_BG21_test.s37 your_application.s37 -o app+bootloader.s37

合并bootloader和应用的命令在UG162文档描述如下:

5.5.1 Combine Two Files
Converts two files with different file formats into one specified output file. Command Line Syntax:
$ commander convert <filename> <filename> [--address <address>] --outfile <filename>

注意:需要指定转换文件的路径,如果不指定路径,需要把转换的文件放到commander软件同一路径下。