泰凌微TLSR825X开发一蓝牙通信实例

背景

泰凌微蓝牙方案在消费类产品中近两年才火起来,实际网上也没有太多资料,芯片缺货的情况下作为替代方案还是可行的,手上有块TLSR8258的开发板,也就边看文档调试边记录
这里采用8258的方案在调,其实825X系列仅内部资源不一样(价格高低),实际选型的时候根据产品定位来选择合适的型号

型号flashsram
8251512kB32kB
8253512kB48kB
8258512kB64kB

如有异议,欢迎指正,转载请注明出处

资源及SDK下载
特性
  • BLE5.0;支持Telink Mesh(私有)
  • Flash 512Kb Ram64Kb(TLSR8258)
  • 1.8V~3.6V
  • 5.3mA Rxfullchip;
  • 4.8mA Tx 0dbm_fullchip;
  • <1uA sleep+sram 0.4uA sleep
  • Tx Max +10dBm
  • 工作温度-40℃~+85℃(工业级)
架构图

在这里插入图片描述

SDK下载
  • 这里可以根据实际的应用来选择SDK,bz为了兼容其他相同产品线的方案选择了Single Connection的SDK
    在这里插入图片描述

IDE安装烧录可以查看Mesh博文

SDK工程
文件结构

工程导入Eclipse后的文件结构如下
在这里插入图片描述

  • application:提供了通用的应用处理程序,主要为打印print、USB、按键keyboard、音频audio
  • boot:提供芯片的 software bootloader,即 MCU 上电启动或 deepsleep 唤醒后的汇编处理过程,为后面 C 语言程序的运行搭建好环境(中断向量、堆栈配置)
  • common:提供通用的跨平台处理,如标准C库的字符串、内存处理函数等
  • drivers:提供与MCU外设驱动程序
  • proj_lib:内部为泰凌微蓝牙协议栈库文件liblt_8258.a包括RF射频、PM低功耗等库,这部分对开发用户不开放
  • stack:协议栈相关调用的头文件
  • vendor:用于存放用户应用层代码,目前支持应用有:
    • 8258_ble_remote:遥控应用,配合IR模块
    • 8258_ble_sample:是remote的简化应用,与标准的ios、android连接配对
    • 8258_hci:提供了基于USB/UART的HCI,和其他host通信,组成完整的ble slave系统
    • 8258_module:蓝牙串口透传模块的应用
    • 8258_master_kma_dongle:dongle的应用代码,是 ble master的例程
    • 8258_driver_test:外设的测试应用
    • 8258_feature_test:蓝牙射频相关的测试应用
实例
代码讲解
主函数

这里使用8258_ble_sample实例,先查看main.c中入口函数

  • 变量deepRetWakeUp来判断系统是否为休眠唤醒,来实现系统快速初始化
  • 中断irq_enable使能后协议栈开始运行
  • user_init_normal为ble系统初始化
_attribute_ram_code_ int main (void)    //让main运行在ram中,加快加载时间
{
    DBG_CHN0_LOW;   //debug 配合示波器调试使用
    blc_pm_select_internal_32k_crystal();//选择内部32k rc时钟
    cpu_wakeup_init();//硬件初始化, system timer计数器开始工作
    int deepRetWakeUp = pm_is_MCU_deepRetentionWakeup();  //判断唤醒源 1 - deepsleep retention唤醒 0 poweron/deepsleep
    rf_drv_init(RF_MODE_BLE_1M);//1M 通信带宽
    gpio_init( !deepRetWakeUp );  //快速初始化IO
#if (CLOCK_SYS_CLOCK_HZ == 16000000)//选择系统时钟频率,默认16M
    clock_init(SYS_CLK_16M_Crystal);
#elif (CLOCK_SYS_CLOCK_HZ == 24000000)
    clock_init(SYS_CLK_24M_Crystal);
#elif (CLOCK_SYS_CLOCK_HZ == 32000000)
    clock_init(SYS_CLK_32M_Crystal);
#elif (CLOCK_SYS_CLOCK_HZ == 48000000)
    clock_init(SYS_CLK_48M_Crystal);
#endif
    if(!deepRetWakeUp){
        blc_readFlashSize_autoConfigCustomFlashSector();//读取片上flash配置
    }
    blc_app_loadCustomizedParameters();  //加载参数
    if( deepRetWakeUp ){
        user_init_deepRetn (); //休眠唤醒后的快速初始化
    }
    else{
        user_init_normal ();//ble系统初始化
    }
    irq_enable();//开启中断
    while (1) {
#if (MODULE_WATCHDOG_ENABLE)
        wd_clear(); //clear watch dog
#endif
        main_loop ();//主循环任务,ble收发、低功耗
    }
}
蓝牙配置

app.c文件中主要为gap相关配置

  • 修改广播周期
#define     MY_APP_ADV_CHANNEL                  BLT_ENABLE_ADV_ALL//全通道 37 38 39
#define     MY_ADV_INTERVAL_MIN                 ADV_INTERVAL_30MS//30ms
#define     MY_ADV_INTERVAL_MAX                 ADV_INTERVAL_35MS//35ms
  • 蓝牙广播:修改广播报文与扫描应答报文

//
//   Adv Packet, Response Packet
//
const u8    tbl_advData[] = {
     0x05, 0x09, 'k', 'H', 'I', 'D',                //广播local name
     0x02, 0x01, 0x05,                          // BLE limited discoverable mode and BR/EDR not supported
     0x03, 0x19, 0x80, 0x01,                    // 384, Generic Remote Control, Generic category
     0x05, 0x02, 0x12, 0x18, 0x0F, 0x18,        // incomplete list of service class UUIDs (0x1812, 0x180F)
};
const u8    tbl_scanRsp [] = {
         0x08, 0x09, 'k', 'S', 'a', 'm', 'p', 'l', 'e',
    };
  • 连接参数:修改连接间隔
void task_connect (u8 e, u8 *p, int n)
{
//  bls_l2cap_requestConnParamUpdate (8, 8, 19, 200);  // 200mS
    bls_l2cap_requestConnParamUpdate (8, 8, 99, 400);  // 1 S
//  bls_l2cap_requestConnParamUpdate (8, 8, 149, 600);  // 1.5 S
//  bls_l2cap_requestConnParamUpdate (8, 8, 199, 800);  // 2 S
//  bls_l2cap_requestConnParamUpdate (8, 8, 249, 800);  // 2.5 S
//  bls_l2cap_requestConnParamUpdate (8, 8, 299, 800);  // 3 S
    latest_user_event_tick = clock_time();
    device_in_connection_state = 1;//
    interval_update_tick = clock_time() | 1; //none zero
}
  • 调整发射功率
#define     MY_RF_POWER_INDEX                   RF_POWER_P3p01dBm
主任务

在main_loop中运行了主要的应用任务

  • blt_sdk_main_loop:必须被周期性调用,内部执行了BLE数据解析与逻辑处理
  • blt_pm_proc:低功耗处理接口,通过宏BLE_APP_PM_ENABLE来配置使能
  • blt_pm_proc:蓝牙广播与连接通信时的低功耗,包括超时60sec进入deepsleep,后续在低功耗调试里面展开讲解
void main_loop (void)
{
    // BLE entry /
    blt_sdk_main_loop(); //ble数据与逻辑处理
    // UI entry /
#if (!TEST_CONN_CURRENT_ENABLE) //demo板子上的按键,可在头文件使能
    #if (SAMPLE_BOARD_SELECT == EVK_C1T139A30_V1P2)
    proc_keyboard (0, 0, 0);//按键处理
    #elif (SAMPLE_BOARD_SELECT == DONGLE_C1T139A3_V2P0A)
    // process button 1 second later after power on, to avoid power unstable
    if(!button_detect_en && clock_time_exceed(0, 1000000)){
        button_detect_en = 1;
    }
    if(button_detect_en && clock_time_exceed(button_detect_tick, 5000))
    {
        button_detect_tick = clock_time();
        proc_button(0, 0, 0);
    }
    #endif
#endif
    // PM Process /
    blt_pm_proc(); //pm低功耗,在头文件中配置
}
运行测试
  • 在vendor目录下mesh工程进行编译,在8258_ble_sample目录下生成8258_ble_sample.bin的固件,并通过BDT工具烧录固件
    在这里插入图片描述

  • 打开app可以扫描到名称为ksample的设备,其中kHID是广播名称
    在这里插入图片描述

  • 连接后可查看到支持的服务,其中ota是泰凌微私有定义的,所以app显示为未知服务;由于支持了HID的服务,可以使用带蓝牙的PC来连接设备
    在这里插入图片描述

  • 45
    点赞
  • 126
    收藏
    觉得还不错? 一键收藏
  • 54
    评论
评论 54
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值