软件组织架构
该 BLE SDK 软件架构包括 APP 应⽤层和 BLE stack 协议栈部分。
在 IDE 中导⼊ sdk ⼯程后,显⽰的⽂件组织结构如下图所⽰。
顶层⽂件夹有 8 个:
- [algorithm] 提供加密算法相关的函数
- [application] 提供⼀些通⽤的应⽤处理程序,如 print、keyboard、audio 等。
- [boot] 提供芯⽚的 software bootloader,即 MCU 上电启动或 deepsleep 唤醒后的汇编处理过程,为后⾯ C 语⾔程序的运⾏搭建好环境。
- [common] 提供⼀些通⽤的跨平台的处理函数,如内存处理函数、字符串处理函数等。
- [drivers] 提供与 MCU 紧密相关的硬件设置和外设驱动程序,如 clock、flash、i2c、usb、gpio、uart 等。
- [proj_lib] 存放 SDK 运⾏所必需的库⽂件(如 liblt_825x.a)。BLE 协议栈、RF 驱动、PM 驱动等⽂件,被封装在库⽂件⾥,⽤⼾⽆法看到源⽂件。
- [stack] 存放 BLE 协议栈相关的头⽂件。源⽂件被编译到库⽂件⾥⾯,对于⽤⼾是不可⻅的。
- [vendor] ⽤于存放⽤⼾应⽤层代码
main.c
包括 main 函数⼊⼝,系统初始化的相关函数,以及⽆限循环 while(1) 的写法,建议不要对此⽂件进⾏任何修改,直接使⽤固有写法。
_attribute_ram_code_ int main(void) // must run in ramcode
{
DBG_CHN0_LOW; // debug
blc_pm_select_internal_32k_crystal();
#if (MCU_CORE_TYPE == MCU_CORE_825x)
cpu_wakeup_init();
#elif (MCU_CORE_TYPE == MCU_CORE_827x)
cpu_wakeup_init(LDO_MODE, EXTERNAL_XTAL_24M);
#endif
int deepRetWakeUp = pm_is_MCU_deepRetentionWakeup(); // MCU deep retention wakeUp
rf_drv_init(RF_MODE_BLE_1M);
gpio_init(!deepRetWakeUp); // analog resistance will keep available in deepSleep mode, so
no need initialize again ↪ clock_init(SYS_CLK_TYPE);
if (!deepRetWakeUp)
{ // read flash size
blc_readFlashSize_autoConfigCustomFlashSector();
}
blc_app_loadCustomizedParameters(); // load customized freq_offset cap value
if (deepRetWakeUp)
{
user_init_deepRetn();
}
else
{
user_init_normal();
}
irq_enable();
while (1)
{
#if (MODULE_WATCHDOG_ENABLE)
wd_clear(); // clear watch dog
#endif
main_loop();
}
}
app_config.h
⽤⼾配置⽂件,⽤于对整个系统的相关参数进⾏配置,包括 BLE 相关参数、GPIO 的配置、PM 低功耗管理的相关配置等。
后⾯介绍各个模块时会对 app_config.h 中的各个参数的含义进⾏详细说明。
application file
- app.c:⽤⼾主⽂件,⽤于完成 BLE 协议栈初始化、数据处理、低功耗处理等。
- BLE slave ⼯程的 app_att.c:service 和 profile 的配置⽂件,有 Telink 定义的 Attribute 结构,根据该结构,已提供 GATT、标准 HID 和私有的 OTA、MIC 等相关 Attribute,⽤⼾可以参考这些添加⾃⼰的 service和 profile。
- 其他 UI ⽂件:如 IR(红外)、battery detect(电池检测)等⽤⼾任务的处理⽂件。
BLE stack entry
Telink BLE SDK 中 BLE stack 部分 code 的⼊⼝函数有两个:
(1) main.c ⽂件 irq_handler 函数中 BLE 相关中断的处理⼊⼝ irq_blt_sdk_handler。
__attribute_ram_code_ void rf_irq_handler(void)
{
irq_blt_sdk_handler();
}
(2) application file main_loop 中 BLE 逻辑和数据处理的函数⼊⼝ blt_sdk_main_loop。
void main_loop(void)
{
/ BLE entry
blt_sdk_main_loop();
// UI entry
// PM process
}
IC型号 flash和sram大小
适⽤如下⼏种 IC 型号,它们属于 B85m 系列,均为同⼀内核,其中 8251/8253/8258,8271/8273/8278 硬件模块基本⼀致,只是在 SRAM size 与 flash ⽅⾯略有差异。具体如下表所⽰。
IC | Flash size | SRAM size |
8251 | 512 kB | 32 kB |
8253 | 512 kB | 32 kB |
8258 | 1 MB | 64 kB |
8271 | 512 kB | 32 kB |
8273 | 512 kB | 48 kB |
8278 | 1 MB | |