泰凌微 SIG Mesh 开发



1、SDK 概述

SDK 给用户提供基于 SIG_Mesh 协议应用开发的 demo code,用户可以在这些 demo code基础上开发自己的应用程序。

目前工程适用的芯片是 TLSR8269(2016.1.16)。负责上位机通信的芯片是8267(或者8269)。

1.1 SDK的文件架构

SDK的文件架构分为 app应用层BLE & SIG_mesh协议层。当导入工程文件后,显示的文件架构如下图所示。有3个主要的顶层文件夹:projproj_libvendor

1、proj:提供MCU相关的外设驱动程序,如 flash,i2c,usb,gpio,uart等。
2、proj_lib:提供MCU运行所必须的库文件,包括 BLE协议栈、RF驱动、PM驱动等,这部分是以库文件形式提供的,user 无法看到源文件。比如

序号库文件描述
1liblt_8269_mesh.a蓝牙协议栈的库文件
2libsig_mesh.a普通节点的库文件
3libsig_mesh_LPN.aSIG_Mesh中的低功耗节点的库文件
4libsig_mesh_prov.aSIG_Mesh中的Provision节点的库文件

3、vendor:存放 用户应用层代码。vendor目录下:

  1. 8267_master_kma_dongle:上位机测试 使用固件,配合上位机工具可以作为一个Provisioner的角色,用于演示和debug。
  2. common:主要包含了 mesh / mesh_lpn / mesh_provision / mesh_switch 中共用的模块,例如 led部分,出厂初始化,测试命令等模块。
    mesh / mesh_lpn / mesh_provision / mesh_switch 这4个文件夹的结构一样,都包含了 app.c,app.h,app_att.c,app_config.h,main.c。
序号文件描述
1app.c,app.h主要是初始化底层回调功能
2app_att.c蓝牙att表的描述,以及接口函数的说明
3app_config.h定义工程中对应的声明
4main.c主函数中断函数的入口

具体的函数接口部分详见第3章中关于各个文件的介绍。

1.2 入口函数
int main()
{
	FLASH_ADDRESS_CONFIG;
	cpu_wakeup_init();	//mcu硬件初始化,用户不关心
	clock_init();		//时钟初始化,用户可以在 user_config.h 里面修改配置
	set_tick_per_us(CLOCK_SYS_CLOCK_HZ / 1000000);	//时钟初始化
	gpio_init();		//gpio初始化,用户可以在 user_config.h 里面修改配置
	rf_drv_init(CRYSTAL_TYPE);	//RF初始化,用户不关心
	user_init();		//ble初始化&系统初始化&用户自定义初始化
	irq_enable();		//使能全局中断
	while(1)
	{
		#if(MODULE_WATCHDOG_ENABLE)
			wd_clear();
		#endif
		main_loop();	//1.ble收发处理	2.低功耗处理	 3.用户自定义处理
	}
}

1.3 BLE协议栈收发包处理

在lib中实现,用户不用关心。如果有需要,用户可以参考 my_Attributes_provision[] / my_Attributes_proxy[] / my_Attributes[] 定义,自己定制 BLE service。

1.4 Mesh应用 收发处理
1.4.1 发包
  1. 节点之间发包
    调用 mesh_tx_cmd2normal_primary(),该函数具体用法后面介绍。此方式发送的数据遵循SIG_ Mesh协议。
    access_cmd_onoff() 等命令是对 mesh_tx_cmd2normal_primary() 进行封装而来。
    开发者可以启用 sim_tx_cmd_node2node() 来进行发送命令的演示(该函数默认是屏蔽的),效果是:上电后,每隔3秒自动交替发送ON/OFF命令。详见后续对该函数的说明。
  2. 直连节点发给 Master
    调用 bls_att_pushNotifyData(),用于发送客户任意自定义格式的数据。
    注意:需要新增UUID,然后才能用该方式,否则可能会和当前UUID的协议冲突。
  3. HCI(USB/UART)上报数据
my_fifo_push_hci_tx_fifo(u8 *p, u16 n, u8 *head, u8 head_len)
p:指向所发数据地址
n:数据长度
head:标识头
len:标识头长度(没有则填0

调用 my_fifo_push_hci_tx_fifo(u8 *p, u16 n, u8 *head, u8 head_len) 往 hci_tx_fifo 送数据,在发送回调函数里会把 hci_tx_fifo 的数据送出去。回调函数在 user_init 里注册:

UART: blc_register_hci_handler(blc_rx_from_uart, blc_hci_tx_to_uart)
USB: blc_register_hci_handler(app_hci_cmd_from_usb, blc_hci_tx_to_usb)

1.4.2 收包

1.5 发包流程简介

1.6 收包流程简介

1.7 SIG Mesh 信道

SIG Mesh的通信信道分为两种:

序号承载层功能
1adv-bearer通过adv机制实现相互通信的,通信双方不需要建立BLE的连接
2gatt-bearer通过建立BLE的连接实现通信
  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值