軟體組織架構
該 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 | |