Telink white logo with Telink word in small size

您现在使用 IE

我们建议您改用下列浏览器,以获得更好的体验。

点击下载:

Chrome

Firefox

Safari

Edge

Telink white logo with Telink word
Rotate your device top arrow

旋转设备

Rotate your device bottom arrow
Preloader image
正在加载
Telink white logo with Telink word in small size

泰凌微电子BLE单连接SDK(三):B85m_ble_remote例程使用演示

Telink Staff

September 1, 2022

Applications

Bluetooth screen

在泰凌Wiki网站上提供了多种应用场景的软件SDK,供客户选择使用。本系列的几篇文章主要讲述”Bluetooth LE Single Connection”,此SDK是单连接应用的SDK,所谓的单连接就是蓝牙芯片做从机跟主机(一般是手机)建立点对点连接,或者蓝牙芯片做主机跟其他的从机建立点对点连接的应用场景。

本篇文章详细讲述此SDK中的B85m_ble_remote例程的使用及注意事项,以便客户尽快熟悉起来,加快项目开发进度。

一、ble_remote例程说明

单连接SDK中B85m_ble_remote适用825x芯片和827x芯片,所以编译选项中又分为了825x_ble_remote和827x_ble_remote(下文统称ble_remote)。

ble_remote例程是较复杂的从机例程,是蓝牙语音遥控器的源码例程。

Telink具有多种语音遥控器的方案,详情链接:

http://wiki.telink-semi.cn/wiki/solution/RCU/

该例程主要功能:蓝牙连接并枚举为HID设备,矩阵按键扫描,语音采集并BLE传输,IR功能,电池电量检测,低功耗,OTA升级等。

二、开发板选择

基于TLSR825x和TLSR827x芯片的遥控器的相关资源(软件SDK,硬件参考设计等),请通过以下链接下载:

http://wiki.telink-semi.cn/wiki/solution/RCU/Generic-Bluetooth-LE-RCU/

基于TLSR825x和TLSR827x的语音遥控器Audio RCU如下图所示:

三、使用演示

Audio RCU有两种使用方式,一种是直接跟智能电视进行蓝牙连接,并控制电视。另一种是配合kma master dongle一起使用(在kma master dongle的文章中进行演示说明)。下面主要讲述第一种使用方式,并用手机替代智能电视。

  1. 编译ble_remote例程,并把生成的固件download到Audio RCU板中,重新上电或者reset一次。
  2. 在手机–>设置–>蓝牙 页面,扫描到“VHID”,点击连接并选择配对。蓝牙连接后,手机上会显示“VRemote”的名称。
  3. 点击Audio RCU上的按键,手机上会有相应的显示。比如按“音量+”,手机界面会弹出音量增加的提示。

注意1:ble_remote例程是HID设备,不需要在手机app中使用。如果使用手机app连接,是看不到上面的按键的效果。

注意2:RCU上的部分按键,手机不一定支持。因为RCU是蓝牙语音遥控器,可以蓝牙连接智能电视,机顶盒等设备,当作遥控器使用。手机和智能电视上对一些按键的解析不同导致的。

四、主要功能

在ble_remote的app_config.h文件中,有主要功能的宏定义开关。

1、低功耗

默认使能了低功耗功能,宏定义为:

#define BLE_REMOTE_PM_ENABLE             1

#definePM_DEEPSLEEP_RETENTION_ENABLE       1

另外,针对遥控器闲置的情况做功耗优化,广播超过60s会自动进入深睡眠(deepsleep模式)而停止广播。建立连接,60s内无按键事件,会断开连接并进入deepsleep模式。代码如下图所示,在blt_pm_proc()中代码如下图所示。

注意:当蓝牙处于连接状态时,必须先主动断开连接并收到对方的ack后,再进入低功耗模式。

2、按键扫描

遥控器有较多的按键,Telink提供了行列式扫描按键的代码,此部分请用户根据handbook的“按键扫描”章节以及例程代码来理解,本文不再赘述。

3、语音采集和语音传输

语音采集支持16K和32K的采样率,语音传输是使用BLE的方式来传输压缩的语音。实现原理和机制请用户参考handbook的“Audio”章节,本文不再赘述。宏定义开关为:

#define BLE_AUDIO_ENABLE              1

另外例程支持多种语音流的压缩格式,可使用宏定义选择:

#define TL_AUDIO_MODE        TL_AUDIO_RCU_ADPCM_GATT_TLEINK

4、低电量检测

使用ADC采集电池电量,是较为常用的应用场景。该例程有提供了代码实现,原理和使用的说明,请用户参考handbook的“低电检测”章节。宏定义开关为:

#define BATT_CHECK_ENABLE             1

5、红外遥控

该例程也支持红外遥控器的功能,实现原理和机制请用户参考handbook的“IR”章节。默认没有使能,宏定义的开关为:

#define REMOTE_IR_ENABLE               0

6、OTA升级

默认支持OTA升级,OTA升级的原理和机制,请用户参考handbook的“OTA”章节。宏定义开关为:

#define BLE_REMOTE_OTA_ENABLE           1

7、固件检查

firmware check有两种,一种是通过CRC32校验的方式来确认firmware是否完整。在firmware的末尾有CRC32校验值,在初始化的时候从flash中读取firmware固件计算CRC32并比较。如不一致,则认为firmware损坏。详情请参考handbook的“14.4 Firmware完整性自检”章节的说明。

宏定义开关为:

#define FIRMWARE_CHECK_ENABLE            0

另一种是,基于UID的firmware check,实现机制是:在量产时,量产工具获取芯片端的16字节的uid明文加密得到一段密文,并烧录到flash的固定地址。在程序代码中,初始化时也会根据芯片本身的uid进行加密得到密文,并跟flash中烧录的密文对比,一致则认为ok继续运行,否则停止运行。详情请参考handbook的“14.3 Firmware数字签名”章节的说明。

宏定义开关为:

#define FIRMWARES_SIGNATURE_ENABLE          0

注意,打开FIRMWARES_SIGNATURE_ENABLE宏定义后,编译会报错,提示firmware_encrypt_based_on_uid未定义,如下图所示:

解决方法:在proj_lib文件夹中有“libfirmware_encrypt.a”库文件,但是工程没有包含该库文件。具体操作为:点击project –> Properties–>C/C++ Build–>Setting–>Tool Setting的Libraries页面,点击“+”,在窗口输入“firmware_encrypt”,并点击OK。

注意:添加库文件包含的名称不要写错了,库文件名称“libfirmware_encrypt.a”需要去头去尾(即把lib和.a去掉)。

添加完成的效果如下图,clean后再rebuild即可编译成功。