文章目录
1、SDK 概述
SDK 给用户提供基于 SIG_Mesh 协议应用开发的 demo code,用户可以在这些 demo code基础上开发自己的应用程序。
目前工程适用的芯片是 TLSR8269(2016.1.16)。负责上位机通信的芯片是8267(或者8269)。
1.1 SDK的文件架构
SDK的文件架构分为 app应用层 和 BLE & SIG_mesh协议层。当导入工程文件后,显示的文件架构如下图所示。有3个主要的顶层文件夹:proj,proj_lib,vendor。
1、proj:提供MCU相关的外设驱动程序,如 flash,i2c,usb,gpio,uart等。
2、proj_lib:提供MCU运行所必须的库文件,包括 BLE协议栈、RF驱动、PM驱动等,这部分是以库文件形式提供的,user 无法看到源文件。比如
序号 | 库文件 | 描述 |
---|---|---|
1 | liblt_8269_mesh.a | 蓝牙协议栈的库文件 |
2 | libsig_mesh.a | 普通节点的库文件 |
3 | libsig_mesh_LPN.a | SIG_Mesh中的低功耗节点的库文件 |
4 | libsig_mesh_prov.a | SIG_Mesh中的Provision节点的库文件 |
3、vendor:存放 用户应用层代码。vendor目录下:
- 8267_master_kma_dongle:上位机测试 使用固件,配合上位机工具可以作为一个Provisioner的角色,用于演示和debug。
- 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。
序号 | 文件 | 描述 |
---|---|---|
1 | app.c,app.h | 主要是初始化和底层回调功能 |
2 | app_att.c | 蓝牙att表的描述,以及接口函数的说明 |
3 | app_config.h | 定义工程中对应的宏和声明 |
4 | main.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 发包
- 节点之间发包
调用 mesh_tx_cmd2normal_primary(),该函数具体用法后面介绍。此方式发送的数据遵循SIG_ Mesh协议。
access_cmd_onoff() 等命令是对 mesh_tx_cmd2normal_primary() 进行封装而来。
开发者可以启用 sim_tx_cmd_node2node() 来进行发送命令的演示(该函数默认是屏蔽的),效果是:上电后,每隔3秒自动交替发送ON/OFF命令。详见后续对该函数的说明。 - 直连节点发给 Master
调用 bls_att_pushNotifyData(),用于发送客户任意自定义格式的数据。
注意:需要新增UUID,然后才能用该方式,否则可能会和当前UUID的协议冲突。 - 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的通信信道分为两种:
序号 | 承载层 | 功能 |
---|---|---|
1 | adv-bearer | 通过adv机制实现相互通信的,通信双方不需要建立BLE的连接 |
2 | gatt-bearer | 通过建立BLE的连接实现通信 |