蓝牙Mesh开发四 TLSR8258 ble mesh通信测评

前言

TLSR是由泰凌微电子设计的一款低功耗蓝牙芯片,8258芯片方案已经支持SigMesh协议栈,符合BLE5.0协议规范,跑下Demo来做下SIG Mesh的测试

如有异议,欢迎留言指正

特性
  • 32 Bit RISC-V 处理器,最高主频48MHz
  • 512 KBytes 片上可编程Flash
  • 64 KBytes 片上RAM
  • 内置32.768KHz RC时钟
  • 内置硬件AES加密单元
  • 丰富的外设:17路GPIO,一路SPI、IIC、UART
  • 六路PWM,支持红外信号生成
  • 6路14Bit高精度ADC,支持电池电量采集
  • 高达10dBm的发射功率,-96dBm接受灵敏度
  • 优秀的功耗管理,深度睡眠电流0.4uA,保持RAM数据睡眠电流1.4uA,接收模式5.3mA,发送模式4.8mA(0dbm)
  • 支持低功耗蓝牙5.0 (不支持经典蓝牙)
  • 支持SigMesh,可对接天猫精灵
  • 电压范围1.8V~3.6V
  • 4通道差分输入可编程增益PGA
    在这里插入图片描述

开发环境

SDK下载

需要到官网下载Mesh开发SDK,SDK下载地址
在这里插入图片描述

解压SDK,这里下载的是SIG MESH的版本
在这里插入图片描述

IDE安装与工程导入教程
烧录调试工具下载

工程代码实例

  • 在Telink IDE中导入sdk工程后,文件组织结构如下
    在这里插入图片描述

    • boot:提供芯片的 bootloader,即 MCU 上电启动或 deepsleep 唤醒后的汇编处理过程,为后面 C 语言程序的运行搭建好环境
    • drivers:提供与 MCU 紧密相关的硬件设置和外设驱动程序,如 clock、flash、i2c、usb、gpio、uart 等
    • proj:提供 MCU 相关的外设驱动程序,如 flash,i2c,usb,gpio, uart 等
    • proj_lib:提供 MCU 运行所必需的库文件,包括 BLE 协议栈、RF 驱动、PM 驱动等,这部分是以库文件形式提供的,用户无法看到源文件,如 liblt_8258_mesh.a 为蓝牙协议栈的库文件,libsig_mesh.a 为 SIG_mesh 普通节点的库文件,libsig_mesh_LPN.a 为 SIG_mesh中的低功耗节点的库文件,libsig_mesh_prov.a为SIG_mesh中的provision节点的库文件
    • stack:存放 BLE 协议栈相关的头文件。源文件被编译到库文件里面,对于用户是不可见的
    • vendor:用于存放用户应用层代码,目前 vendor 目录下有:
      • 8267_master_kma_dongle:上位机测试使用,配合 GATT 模式上位机工具可以作为一个 provisioner 的角色,用于演示和 debug。
      • common:主要包含了 mesh/mesh_lpn/mesh_provision/mesh_switch 等共用的模块,例如 SIG mesh model 的处理,led 部分,出厂初始化 ,测试命令等模块。
      • mesh/mesh_gw_node_homekit/mesh_lpn/mesh_provision/mesh_switch/spirit_lpn 这几个文件夹的结构一样,每个文件夹对应一个应用类型,都包含了 app.c、app.h、app_att.c、app_config.h、main.c。app.c/app.h 主要是初始化和底层回调功能;app_att.c 是蓝牙 att 表的描述以及接口函数的说明;app_config.h 是定义工程中对应的宏和声明;main.c是主函数和中断函数的入口。
代码实例

在vendor目录下mesh工程进行编译,在mesh目录下生成8258_mesh.bin的固件,并通过BDT工具烧录固件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
mesh工程支持代理、中继、朋友节点功能,可借助sdk目录下的app软件进行配网和功能调试
为了方便调试,可开启打印功能,使能宏HCI_LOG_FW_EN将使用GPIO模拟uart输出打印

通信测试

在vendor model中增加用户自定义的命令来进行接收数据测试,sdk中预留给用户的opcode有32个,即0xE0 ~ 0xFF

  • mesh_cmd_vd_func数据中增加自定义的opcode命令,打印接收到的数据
#define VD_CUSTOM_CODE            0xE0
int cb_vd_test(u8 *par, int ac_len, mesh_cb_fun_par_t *cb_par)
{

    printf("recv_len = %d recv_data =  %s \n",ac_len, par); //打印数据
    
    //报文解析
    //parsedata
    return 0;
}

mesh_cmd_sig_func_t mesh_cmd_vd_func[] = {
        {VD_CUSTOM_CODE, 0, VENDOR_MD_LIGHT_C, VENDOR_MD_LIGHT_S, cb_vd_test, STATUS_NONE},//自定义命令
}

调用 mesh_tx_cmd2normal_primary(),此方式发送的数据遵循 SIG mesh 协议。access_cmd_onoff()等命令是对 mesh_tx_cmd2normal_primary()进行封装而来。

  • main_loop中增加一段自定义的按键检测处理代码,读取到按键后发送数据,目的地址为所有中继节点
void test_proc(void)
{
    if(button_read() == BTN_SINGL)//读取到键值
    {
		printf("single button \n");
		mesh_tx_cmd2normal_primary(VD_CUSTOM_CODE, "single btn",sizeof("single btn"),0xFFFE, 0);//发送所有中继(0xFFFE)
    }
}
  • 安装SDK目录下的app进行配网,调用mesh_tx_cmd2normal_primary发送前可以通过查询get_provision_state来判断是否已经配网

由于mesh工程也具备了中继的节点功能,所以发送的数据自身也会接收到
在这里插入图片描述

总结

本章只是用到很少的一部分相关通信用的接口,目前只用了两个节点来做测试,实测可靠的空旷距离15米左右,需要深入开发的,可参考泰凌微官网的资料,重点阅读sdk开发手册

  • 7
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值